環境
- windows11
- wsl2
- make用
使用ツール
- Tang nano 9k
- Gowin ide
- picoRV32のクロスコンパイラ
- xpack-riscv-none-embed-gcc-8.2.0-3.1-linux-x64.tgz
- ここからとれます(xpack-riscv-none-embed-gcc-8.2.0-3.1-linux-x64.tgz)
- teraterm
- picorv等のソースコード: https://github.com/sipeed/TangNano-9K-example/tree/main
1. 事前準備
- リポジトリを適当な場所にcloneする。
-
TangNano-9K-example\picotiny\project\picotiny.gprj
をgowin ideで開く -
Project->Configuration->Place&Route->Dual-Purpose Pin
のUse MSPI as regular IO
にチェック - 左側下部にあるバーからProcessタブに移動して
Place & Route
を右クリック、表示されるClean & Return All
をクリックして実行 - teratermを起動
- シリアルを選択して設定から115200を選択し通信開始
- 適当なCOMポートを指定して以下のコマンドを
TangNano-9K-example\picotiny
で実行
python .\sw\pico-programmer.py .\example-fw-flash.v COM??
- tang nano 9kのリセットボタンS1を押して離す
Read program with 11760 bytes
- Waiting for reset -
...
この表示が出たら成功です。
Total sectors 3
Total pages 46
Flashing 1 / 3
Flashing 2 / 3
Flashing 3 / 3
Flashing completed
- teratermに
Command>
やメニューが表示される
以上が公式チュートリアルの内容でした。これをもとにメニューの中身を書き換えます。
2. 独自のコマンドの追加
先ほどのexample-fw-flash.vに相当するものを自作します。fwディレクトリ内のcファイルを編集してクロスコンパイルします。
- (例)全部のledを一度に点灯させるコマンドを作成します。以下のようにcaseを1つだけfw/fw-flash/firmware.cに追加しました。
case '7':
GPIO0->OUT ^= 0x0000003f;
break;
- xpack-riscv-none-embed-gcc-8.2.0-3.1-linux-x64.tgzを解凍
tar -xvzf /mnt/c/User---/xpack-riscv-none-embed-gcc-8.2.0-3.1-linux-x64.tgz
- Makefile内のコンパイラの位置を修正 (ここではopt下に解凍したため以下のようになります)
RISCV_PATH ?= /opt/xPacks/riscv-none-embed-gcc/8.2.0-3.1
-
make
を実行 - 先ほどのpythonコマンドのvファイルをfw-flash.vのパスに置き換えて実行します。そこからの操作は先ほどと変わりません。
- teratermに表示されるメニューが先ほどから変化していたら成功です。
各所の画像
すべてのledの点灯を操作できています。
注意
- pcから取り外すと全部リセットされるので取り外した後もう一度実行したいときはgowinでplace&routeからpython ./sw/--, s1ボタンを押して離して, teratermを開く, をもう一度しないといけません。