鳥なき里のマイコン屋(95) Longan nano、RISC-Vデバッガ

JosephHalfmoon

前回前々回とLongan nano上でアセンブラなど触り始めると、欲しくなるのがデバッガであります。大したプログラム書くわけではないので、Cであれば「伝統の」printfデバッグでもなんとかなりますが、アセンブラだと、やはり「止めて」レジスタなど見たくなる。そこでこれまたお手頃価格のデバッガ購入。

例によってSWITCHSCIENCE社から購入させていただいたのは、

Sipeed RISC-Vデバッガ

というものであります。現物写真は、上の方にある筈のアイキャッチ画像をご覧くだされ。USBポートに直接ささる形の小さなお道具であります。デバッグ用には10ピンの端子が出ていますが、ごく短いものですがピンソケットのケーブルが付属しています。正直いうと

デバッガならフラットケーブル

みたいな思い込みで、10ピンの狭いフラットケーブル必要かなと思っていたのです。Longan nanoと同じSipeed社の製品だし、RISC-Vと謳っているくらいだから、ピン配など配慮しているんじゃないかと勝手に思い込んでいました。しかし、現物を見て、Longan nanoに使うならば付属のピンソケットがバラで出ているケーブルの方が実用的だと分かりました。Longan nanoは、小さなボードの端面に無理やり感のあるデバッグ端子のピンが8ピンです。どうせフラットケーブル使い難いし、ピン配にも互換性ないしで、バラの結線が良いです。

現物のスペックなどは、SWITCHSCIENCE社なりSipeed社なりのページを見ていただくにして、購入前に、ちょっと恐れていたことがありました。この小さなデバッガは、JTAGインタフェースでMCUと通信するのですが、JTAGインタフェースを制御しているのがFTDI社のUSBシリアルのデバイスだったからです。なにもFTDI社のデバイスが悪いわけではなく、その逆です。あまりに人気者のチップだけに、非常に多くの製品に組み込まれています。私の手元にも、

  • FT232RLを使ったUSBシリアル変換モジュール2個
  • FT232HLを使ったUSBシリアル変換モジュール1個

があります。Longan nanoを含め、マイコンボードに接続して伝統のprintfデバッグに使用しております。うち、FT232HLの方は、ドライバを変更すればJTAGにもなるのです。しかし、これで非常に困ったことになった経験があるのです。FTDI社のデバイスは人気者なので、Windows10のPCであれば、刺すだけでCOMポートとして認識されると思います。しかし、COMポートのままではJTAGできないので、ドライバを差し替えるのです。多く使われるのが、

Zadig.exe

というソフトウエア。このソフトも何の問題もありません。実行は簡単、必要な差し替えが可能です。問題はこの後でした。数あるFTDI社デバイスを組み込んでシリアルポートとして使っている他のシステムまで、遍くドライバが交換されてしまいました。特にキツカッタのが、まったく予想していなかった

Analog Discovery 2が動かなくなった

という問題。デバッガでブレークポイント張っても、信号線をオシロで観察できなくなりました。調べると、Analog Discovery2には、

FT232HQ

というデバイスが組み込まれておったのです。こいつのドライバまで変わってしまいました。どこをどうやって復旧したのか、今となっては思い出せないのですが、いろいろアンインストールとインストールを繰り返しなんとか復旧しました。遍く使われているFTDIのデバイスのドライバを迂闊に変更すると酷いことになります。でもね、RISC-Vデバッガは大丈夫でした。

FT2232だから

シリアル1ch搭載のFT232シリーズに対して、2が多いFT2232はシリアル2ch搭載のチップです。多分、Windowsも同じものだと思わない筈。やってみると、大丈夫、Zadigを使って、0と1と2つあるチャネルのうち、0の方のドライバを交換。ちゃんとJTAGになりました。

後は、PlatformIO.iniに設定を追加。

upload_protocol = sipeed-rv-debugger
debug_tool = sipeed-rv-debugger
でデバッガのハードウエアを認識してくれるようになりました。まとめて刺せるフラットケーブルではないので、イチイチ結線を確認しながら1本ずつデバッガとLongan nanoを結線しないとならないのがイマイチ面倒ですが、大した本数でもないので頑張ります。
デバッガ起動すれば、デバッグ用にビルドし、ちゃんとLongan nanoと通信を始めた感じなのですが、最後に来て落ちます。どうも私のLongan nanoの環境には駄目なlaunch.jsonが既に存在していて、あらぬ方を向いていたためのようでした。toolchainBinDirを、gd32v用のツールチェーンのbinディレクトリに向けたら動作するようになりました。
"toolchainBinDir": "どこかの/.platformio/packages/toolchain-gd32v/bin"

立ち上げて、前回作った小さなアセンブラ関数の末尾の方にブレークポイントをしかけてブレクしたところ。ちゃんと止まって、レジスタも見えています。

デバッグ用のアイコンつかってステップ実行しているところ。ステップ実行、かなり反応遅いですが、文句は言いますまい。

レジスタの部分の拡大。RISC-Vのマニュアル的なx0からx31という名前ではなく、ABI上の「お約束」的なエイリアス名で表示されています。その方が分かり易い。

最後にデバッグしているところの結線状況。ずっとPrintfデバッグのために接続していた「FT232RLを使ったUSBシリアル変換モジュール」を活かしたまま、RISC-Vデバッガを接続してみたので、配線がかなりヤバイことになっています。ちゃんとFT232RLもシリアルポートとして動いている(Teratermに接続していた)ので大丈夫かと。

なお、RISC-Vデバッガ側にもUARTの端子(FT2232のもう一方のポート)が出ています。これを使って、FT232RLを取り外して、RISC-VデバッガとLongan nanoを直結すればこの配線は整理できる筈。

それはまた次回。

鳥なき里のマイコン屋(94) Longan nano、アセンブラその2 へ戻る

ぐだぐだ低レベルプログラミング(20) RISC-V、nop、mv、li?? へ進む

鳥なき里のマイコン屋(96) GD32VF103VBT6開発ボード へ進む