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 だと速度がちょっと足りないですね。