はじめに
安価なRISC-Vボードとして国内でも比較的入手が簡単なLongan nanoを入手した。 開発環境としては当ブログでもおなじみのPlatformIOに対応している。
国内で入手が容易なせいか日本語の情報も多いが、Windows環境での動作報告記事が多いので、ここではUbuntu 18.04上でPlatformIOで動かした事例を紹介する。
PlatformIO
PlatformIOはpipコマンドでインストールするが、環境を汚さないためにuserインストールする。
$ pip install platformio --user
環境変数を通すために~/.bashrc
に下記を追加する。
PATH="${HOME}/.local/bin:${PATH}"
端末を開き直すか次のコマンドを実行し、環境変数を読み直す。
$ source ~/.bashrc
whichコマンドで次のようになればOK。
~$ which platformio /home/xxxxx/.local/bin/platformio
プロジェクトの作成
とりあえず作業用ディレクトリを次のように作成する。
$ mkdir -p ~/pio/longan $ cd ~/pio/longan
PlatformIOでLongan nanoのボード名を確認する。
$ pio boards | grep longan sipeed-longan-nano GD32VF103CBT6 108MHz 128KB 32KB Sipeed Longan Nano
次にlongan向けのプロジェクトを作成する。
$ pio init -b sipeed-longan-nano $ ls include lib platformio.ini src test
これでプロジェクトの作成は完了
プログラムの作成
main.cpp
src/main.cpp
を次の内容で作成する。
#include <Arduino.h> void setup() { pinMode(LED_BUILTIN, OUTPUT); } void loop() { digitalWrite(LED_BUILTIN, HIGH); delay(1000); digitalWrite(LED_BUILTIN, LOW); delay(1000); }
一般的なArduinoのLチカのコード。
platformio.ini
Arduinoのライブラリを使用する場合、frameworkをarduino
に設定する必要がある。
また、ファームウェアの書き込みにdfu
を使用するので、platformio.ini
を次の内容に編集する。
[env:sipeed-longan-nano] platform = gd32v board = sipeed-longan-nano framework = arduino upload_protocol = dfu
udevルールの編集
DFUを使用してファームウェアを書き込むには、Longan nanoをDFUモードで接続する必要がある。
Ubuntu 18.04というか、LinuxマシンにLongan nanoをDFUモードで接続するためにはまずudevルールを追加する。
/etc/udev/rules.d/99-platformio-udev.rules
に次の内容を追加する。
# Longan Nano ATTRS{idVendor}=="28e9", ATTRS{idProduct}=="0189", MODE="0666"
次のコマンドでudevルールを読み込ませる。
$ sudo udevadm trigger
Longan nanoをDFUで接続
Longan nanoをDFUモードで接続するには、BOOT0
ボタンを押しながらUSBケーブルを接続する。
基板をケースに入れていない場合はシルクで確認できるが、基板のType-Cコネクタを左にした時に下側にあるボタンがBOOT0ボタンとなる。 反対側のボタンはリセット。
DFUモードで接続できた場合、基板のBOOT0側の赤いLEDだけが光っている状態になるのでおそらくわかるが、確実に確認したい場合はdmesg
コマンドを使用し、次のメッセージが表示されていることを確認する。
[26877.865188] usb 1-2: new full-speed USB device number 8 using xhci_hcd [26878.201184] usb 1-2: device descriptor read/64, error -71 [26878.459003] usb 1-2: New USB device found, idVendor=28e9, idProduct=0189, bcdDevice=10.00 [26878.459008] usb 1-2: New USB device strings: Mfr=1, Product=2, SerialNumber=3 [26878.459012] usb 1-2: Product: GD32 0x418 DFU Bootloade [26878.459015] usb 1-2: Manufacturer: GDMicroelectronics [26878.459017] usb 1-2: SerialNumber: 䌳䩂
これでファームウェアの書き込みが可能となる。
ビルドと書き込み
次のコマンドでファームウェアをビルドする。
$ pio run
次のコマンドで書き込む。
$ pio run -t upload
次のように「dfu-util: dfuse_download: libusb_control_transfer returned -1」というエラーが表示される。
Opening DFU capable USB device... ID 28e9:0189 Run-time device DFU version 011a Claiming USB DFU Interface... Setting Alternate Setting #0 ... Determining device status: state = dfuERROR, status = 10 dfuERROR, clearing status Determining device status: state = dfuIDLE, status = 0 dfuIDLE, continuing DFU mode device DFU version 011a Device returned transfer size 2048 GD32 flash memory access detected Device model: GD32VF103CB Memory segment (0x08000000 - 0801ffff)(rew) Erase size 1024, page count 128 Downloading to address = 0x08000000, size = 8268 Download [ ] 0% 0 bytes Download [ ] 0% 0 bytes Download [====== ] 24% 2048 bytes Download [============ ] 49% 4096 bytes Download [================== ] 74% 6144 bytes Download [======================== ] 99% 8192 bytes Download [=========================] 100% 8268 bytes Download done. File downloaded successfully dfu-util: dfuse_download: libusb_control_transfer returned -1 *** [upload] Error 74 ================== [FAILED] Took 2.52 seconds ==================
ここによれば、
That message is unrelated. I recall reading that this was a failure (or perhaps a permissions problem) for a post-transfer operation, I think related to a post-transfer reset, but I forget where I read it. It doesn’t affect the actual flashing of the firmware, so far as I can tell.
とのことで書き込み結果には関係ないらしい。
まとめ
Longan nanoの開発環境をUbuntu 18.04上に構築し、無事に動かすことができた。
PlatformIOなので基本的にはWindowsやmacOSでもほぼ変わらない手順で動くとは思うが、デバイスを認識させる手順などがおそらく異なる。
面白そうな基板なのでもう少し遊びたい。