鳥なき里のマイコン屋(155) RISC-VでもGo!TinyGoで4機種目 MaixBit

Joseph Halfmoon

Go言語の動作確認、Androidスマホで始め、Linux機、Windows機でOK。TinyGoを導入し、ラズパイPicoSeeeduino XiaoBBC micro:bitと3機種でもOKです。今回はマイコン4機種目、64ビットRISC-V機、Kendryte K210搭載Sipeed MAiX Bit。

TinyGoの機種毎ドキュメント

TinyGoのマイクロコントローラの説明ページから、MAiX Bitのページが以下に。

Seeed Sipeed MAiX Bit

MAiX Bit にもいくつか変種あるのですが、MCUそのものはKendryte K210で共通です。ボード間の差異については今のところ気にしておりませぬ(それほど深いところ使ってないし。)

今回の開発用母艦はラズパイ4

TinyGoで「クロスコンパイル」するホスト機は Raspberry Pi 4 model B 機(Raspberry Pi OS <32 bit buster>)としました。MAiX BitのFlash書き込みに必要な Kflashというソフトウエアツールをインストール済のため。

これでラズパイ4は、ラズパイPicoとMAiX BitのTinyGoホスト機、WindowsPCがXiaoとBBC micro:bitのTinyGoホスト機となりました。

しかしソースの編集はWindowsPC上のVScodeで行っているので見かけはいつも同じ。

今回使用の実験用ソースコード

毎度毎度代り映えのしない吉例Lチカを繰り返していますが、機種により「光らせ方」に微妙な差異がありです。前回の BBC micro:bit はマトリックスLEDであったためにたった1個光らせるのに複数端子の操作が必要でした。今回のMAiX BitのオンボードLEDは

3色LED

です。LED1パッケージに3色のLEDが入っているタイプがオンボードに搭載されています。折角なので点滅というより「色変」するようにいたしました。また fmt.Printの出力も確かめます(ラズパイPicoで使ったGoのソースのチョイ変です。)

すでにラズパイPicoでTinyGoをやったときにリモート接続のVSCode上にTinyGoのプラグインもセットアップ済です。Maix Bitをに切り替える際に必要なのは、tinygo target コマンドを発行して maixbit を選択することです。以下の画面キャプチャの最下行、青色のステータス行に TinyGo: maixbit と書かれているのが見えますか?

VSCodePi4

今回実験に使用したソース、Pico用のものとあまり代り映えしないですが全文載せておきます。

package main

import (
    "fmt"
    "machine"
    "time"
)

func main() {
    led1 := machine.LED1
    led2 := machine.LED2
    led3 := machine.LED3
    led1.Configure(machine.PinConfig{Mode: machine.PinOutput})
    led2.Configure(machine.PinConfig{Mode: machine.PinOutput})
    led3.Configure(machine.PinConfig{Mode: machine.PinOutput})
    var idx int = 0
    for {
        fmt.Print("Maix Bit: ")
        fmt.Print(idx)
        fmt.Print("\r\n")
        led1.High()
        led2.Low()
        led3.Low()
        time.Sleep(time.Millisecond * 1500)
        led1.Low()
        led2.High()
        led3.Low()
        time.Sleep(time.Millisecond * 1500)
        led1.Low()
        led2.Low()
        led3.High()
        time.Sleep(time.Millisecond * 1500)
        idx++
    }
}
Flash書き込み

TinyGoのホームページに書かれているコマンドラインそのままで書き込もうとすると手元のラズパイ4機では以下のようにエラーとなります。
ErrorFlash

これは、MAiX BitをラズパイのUSBポートに接続すると /dev/ttyUSB0 と /dev/ttyUSB1 の2つのシリアルデバイスに見えるためだと思われます。以下のコマンドラインのように /dev/ttyUSB0 の方を選択してやらないと書き込めません。

$ tinygo flash -port /dev/ttyUSB0 -target=maixbit ./hello.go

書き込み成功したところが以下に。

OKFlash

実行結果

冒頭のアイキャッチ画像は青色点灯時ですが、右下のユーザLED、ちゃんと色が変わりますぞ。また fmt.Printでの書き出しの確認は以下のようにして行いました。

$ minicom -b 115200 -o -D /dev/ttyUSB0

上記のコマンドラインで観察できた出力の一部が以下に。

fmtPrint

いやあ、RISC-V機でも全然問題ないっす。TinyGo万々歳であります。Lチカばかりではツマラナイのでそろそろいろいろと周辺回路をいじりたいのですが、まだTinyGoの待ち行列に並んでいるマイコンボードがあり。そいつらをやっつけてからですな、深みにハマっていくのは。

鳥なき里のマイコン屋(154) micro:bitでもGo!TinyGoで3機種目 へ戻る

鳥なき里のマイコン屋(156) Wio TerminalでもGo!TinyGoで5機種目 へ進む