longan nano, RISC-V board を Ubuntu 18で使う | たけおか ぼちぼち日記

たけおか ぼちぼち日記

思いついたらメモ

longan nano という RISC-V が載った大変安いボードを買った。

秋月で830円。(今は、メモリの少ない版しか入手できないであろう)

http://longan.sipeed.com/en/
--
メモリ:チップ内蔵128 KBフラッシュ、32 KB SRAM
汎用16ビットタイマー × 4、基本16ビットタイマー × 2、高度16ビットタイマー × 1
CPU:GD32VF103CBT6(RISC-V 32 bitコア)
ストレージの拡張:小型TFカードスロット
ディスプレイ:160 × 80 IPSディスプレイ(SPIインタフェース)

USB-Cで、PCと接続して、バイナリを書き込める。
DFUというプロトコル(?)で書く。
--





とりあえず、開発環境は、PlatformIO という甘っちょろい IDE で試用。

ホストは Ubuntu 18.04.03 LTS。( Linux 4.15.0-72-generic)

まず、VS CodeというIDEを入れ、そこに PlatformIO を入れる。
VS Codeって、Visual Studioなんだなぁ…
(Visual Studioとか大嫌い。IDEがそもそも嫌い)

PlatformIOに、longan nanoの開発ツールを入れる。
下記の通りでうまく行く。
(多少、変なことが起きた気がするが、VS Codeを再起動してやり直すと、うまく行ったり…)


https://longan.sipeed.com/en/get_started/pio.html


そして、example で、「longan-nano-blink」を開く。

ここからが、Ubuntuで DFU 書き込みのために重要。
https://bbs.sipeed.com/t/topic/1338/14 からの引き写し。


プロジェクト中の
platform.ini ファイルに
--
upload_protocol = dfu
--

という行を書く。
全体としては、
-- platform.ini
[env:sipeed-longan-nano]
platform = gd32v
framework = gd32vf103-sdk
board = sipeed-longan-nano
monitor_speed = 115200
upload_protocol = dfu
; change microcontroller
;;board_build.mcu = GD32VF103CBT6
; change MCU frequency
;;board_build.f_cpu = 108000000L
--

とした。
これで、ビルド。


DFUを使用するために、dfu-util を入れる。

$ sudo apt-get install dfu-util

そして、longan nanoの DFU デバイスを、アクセス・モード 666 にするために、
/etc/udev/rules.d/99-platformio-udev.rules として、下記を書く。
--
# Longan Nano
ATTRS{idVendor}=="28e9", ATTRS{idProduct}=="0189", MODE="0666"
--

上記を有効にするために
$ sudo service udev restart
を行う。


longan nanoを、Ubuntu に接続するときには、
1) Boot0ボタンを押下したまま、USB接続
2) Boot0を押下したままで、
3) Resetを押下し、離す
4) Boot0 ボタンを離す
以上で、アプリケーションが走行していなければOK。

DFUデバイスは、
lsusb で、表示されないこともあるが、気にしない。

以上で、Platformio から、longan nano に DFU で書き込める。



手動で、DFUデバイスを探すには、

$ sudo dfu-util -l

として、存在していればそれが表示される。

DFUデバイスのパスを知るためには、strace で、openatを捕まえる。
そして、「28e9」などをサーチすると、その直前の行にパスが見えることが多い。
(openat で、捕まらない場合もある)

# sudo strace -e trace=openat dfu-util -l
:
openat(AT_FDCWD, "/dev/bus/usb/002/016", O_RDWR) = 9
Found DFU: [28e9:0189] ver=1000, devnum=16, cfg=1, intf=0, path="2-2", alt=1, name="@Option Bytes /0x1FFFF800/01*016 g", serial="??"
Found DFU: [28e9:0189] ver=1000, devnum=16, cfg=1, intf=0, path="2-2", alt=0, name="@Internal Flash /0x08000000/512*002Kg", serial="??"
+++ exited with 0 +++


以上で、Ubuntu で、楽に使えるようになった。


だが、
書き込みする時に、いちいち、儀式と共にUSBを抜-挿しなければならないのが、大変、面倒臭い。(^^;
(これは、Windowsでも同様と思われる)


2020/JAN/03 追記

CLI(command line interface, shell)から platformio を使う方法。

・参考:

https://docs.platformio.org/en/latest/installation.html
を読んだ。


・インストール法
--
$ sudo pip install -U platformio
--

※自分用だけの場合は、上記の参考ページをよく読む。


・使用方法

プロジェクトのあるディレクトリで。
(私のプロジェクトは、 ~/Documents/PlatformIO/Projects/200102-105158-longan-nano-blink/ にあった)

## Build project
$ platformio run

## Build , platform.ini 中の envを明示指定
$ platformio run -e sipeed-longan-nano


## Upload firmware
$ platformio run --target upload

## Upload firmware, platform.ini 中の envを明示指定
$ platformio run --target upload -e sipeed-longan-nano

# Clean build files
$ platformio run --target clean

これで VS Code IEDは不要になった