Rock64 http://akizukidenshi.com/catalog/g/gM-12382/ というのを買ってみた。
とりあえず minimal Ubuntu をいれた。
ssh は最初から有効。rock64:rock64 で入れる。
CPU温度などを連続でみる
sudo /usr/local/sbin/rock64_diagnostics.sh -m
便利ツールが最初からある。
そこそこ大きめのヒートシンクをつけてもCPUにフルロードかけると78℃近くまでいく。たぶんヒートシンク必須。だけどCPUクロックに制限かかるまではいかない。というかクロック制限はあるのだろうか?
ちなみにアイドル時にはクロックダウンする。
IR Reciever
GPIO2_A2/IR_RX/POWERSTATE2_u M21 に IR Receiver が繋っているが使いかたがよくわからない。RK3328 自体で NEC フォーマットの IR コマンドをサポートしているみたいだが Linux から利用するドライバがよくわからない。
まぁ GPIO 機能もあるので、こっちで読み出しをしてみることにしてみた。
GPIO2_A2 (2_A2 の部分を変換して pin 番号を求める) は 2 * 32 + ("A".charCodeAt(0)-65) * 8 + 2 = 66
root@rock64:/home/rock64# echo 66 > /sys/class/gpio/export
試しに IRKit に使えるフォーマットで受信データを表示するようにしてみた。IRKit は 2MHz sample のカウント数で表示されるので変換している。
//#!/usr/bin/env go run
package main
import (
"fmt"
"time"
"github.com/brian-armstrong/gpio"
)
type Event struct {
th int64
tl int64
}
func main() {
watcher := gpio.NewWatcher()
watcher.AddPin(66)
defer watcher.Close()
events := make(chan *Event)
go func() {
prev := time.Now()
var th int64 = 0
var tl int64 = 0
for {
now := time.Now()
delta := now.Sub(prev).Nanoseconds()
prev = now
_, value := watcher.Watch()
switch value {
case 1:
tl = delta
events <- &Event{th, tl}
case 0:
th = delta
default:
}
}
}()
for {
e := <-events
fmt.Printf("%d %d\n", e.th/5.0e2, e.tl/5.0e2)
}
} IR 受信にはsys/gpio だと速度がちょっと足りないですね。