趣味の電子工作などの記録。時にLinuxへ行ったり、ガジェットに浮気したりするので、なかなかまとまらない。コンテンツへスキップともの技術メモ趣味の電子工作などの記録。時にLinuxへ行ったり、ガジェットに浮気したりするので、なかなかまとまらない。NanoでUSBのCDC転送にチャレンジしてみました。CDCで転送ができるとUSBケーブル一本でコンソール出力できる可能性があるからです。道のりは遠いですが、とりあえずライブラリのサンプルプログラムを無理やり動かしてCDC転送はできました。IOで通常通り、プロジェクト作成します。サンプルプログラムについてはGD32VF103_Firmware_Library_V1.0.1の中のExamples/USBFS/USB_Device/CDC_ACMの下にあるものを使用しました。Sourceディレクトリの中の以下のファイルをプロジェクトディレクトリのsrcの下に放り込みました。app.ccdc_acm_core.cgd32vf103_hw.cgd32vf103_it.csystem_gd32vf103.c同じく、Includeディレクトリの中の以下のファイルをプロジェクトディレクトリのincludeの下に放り込みました。cdc_acm_core.hgd32vf103_it.hgd32vf103_libopt.husb_conf.husbd_conf.hさらに、ドライバは、GD32VF103_Firmware_Library_V1.0.1/Firmware/GD32VF103_usbfs_driverの下にあるものを同様にSourceディレクトリの中の以下のファイルをプロジェクトディレクトリのsrcの下に放り込みました。ホストモードのドライバっぽく、コンパイル中にエラーになるので外しました。drv_usb_core.cdrv_usb_dev.cdrv_usbd_int.cusbd_core.cusbd_enum.cusbd_transc.c同じく、Includeディレクトリの中の以下のファイルをプロジェクトディレクトリのincludeの下に放り込みました。drv_usb_core.hdrv_usb_dev.hdrv_usb_hw.hdrv_usb_regs.hdrv_usbd_int.husb_ch9_std.husbd_core.husbd_enum.husbd_transc.hplatformio.iniは以下のように編集しました。以下のように修正しました。修正前は以下のような感じ。追加したものを入れています。接続するとエコーバックされました。モニタするために公式ページの説明にそってセットアップします。'/tmp/runtime-root'screenコマンドで接続したまま、usbmon0を選択してキャプチャして、キーボードで適当にカチャカチャ打ってエコーバックされるのを確認したあと、キャプチャを停止します。結果を見ますが、キーボード入力に伴うINTERRUPT転送が見えて鬱陶しいので、表示フィルタを以下のように設定してBULK転送のみが見えるようにします。0x3設定すると、以下のような感じになりました。Nano(6.13.3)へ送られたときのキャプチャです。カーソルのあるところが送信されたデータ(0x42)です。それに対してエコーバックが帰ってきたのが以下です。データが戻ってきているのがわかります。}ということで、パケットバッファのデータを取り出さずにそのまま返送しているっぽいです。これをUSBシリアルっく使えるようにするにはもうひとひねり必要そうです。IOの環境から構築し直します。手順は、前回のこれとこれと同じ。Lチカまで確認できたら、GitHubにあるサンプルプログラムを動かしてみます。ZIPでダウンロードしてきて展開します。IOで新規プロジェクトを作成します。Nano」を選択します。Lite)作成したら、ダウンロードしてきたサンプルプログラムのgd32v_lcdディレクトリの中のincludeとsrcディレクトリの中身をvscodeのプロジェクトディレクトリのincludeとsrcディレクトリにそれぞれドラッグ&ドロップします。Folders」を選択してコピーします。dfu下の方のチェックマークと右向き矢印でビルドと書き込みができました。書き込んで、基板に挿入しておくと、リセットでロゴと動画が再生されました。やりたいのはデモプログラムを動かすことではありません。LCDといろんなI/Oがついているボードですから、工作に使いたい。そこで、まずはLCDとUARTを動かしたいところです。