itmdumpをつかうと、usbシリアル経由で別端末のlinux機上では、SWOの出力を得ることができるのですが、Window環境だけで完結できないか検討したところ、WSL1ではシリアル出力を得ることができるので、WSL1をubuntu、WSL2をDebianとしてセットアップし、WSL1端末でitmdumpを使用したところ正常にSWO出力を得ることができたので備忘録として本稿をUPしてみました。
まず、前回の"OpenOCDにてSWOをUSBシリアル経由でlinux端末に出力"のようにターゲットのプログラムをおこないます。続いて、SWOの出力を得るために、今回は、WindowsにてUSBシリアルまたはCMSIS-DAPのRXを接続します。今回はFT232RLとCMSIS-DAPのVCOMにて動作確認しました。接続は、FT232RLのRXまたはCMSIS-DAPのRX(PA3)をターゲットのPB3に、GNDをターゲットのGNDに接続します。 次にitmdumpですが、cargoではなく、openocdのソースコードに入っている itmdump.cを gccで以下の様にWSL2上で直接コンパイルします。
まず、前回の"OpenOCDにてSWOをUSBシリアル経由でlinux端末に出力"のようにターゲットのプログラムをおこないます。続いて、SWOの出力を得るために、今回は、WindowsにてUSBシリアルまたはCMSIS-DAPのRXを接続します。今回はFT232RLとCMSIS-DAPのVCOMにて動作確認しました。接続は、FT232RLのRXまたはCMSIS-DAPのRX(PA3)をターゲットのPB3に、GNDをターゲットのGNDに接続します。 次にitmdumpですが、cargoではなく、openocdのソースコードに入っている itmdump.cを gccで以下の様にWSL2上で直接コンパイルします。
cd /usr/src/openocd gcc contrib/itmdump.c -o itmdumpコンパイルはこれだけです。つづいて、wsl2でコンパイルしたitmdumpを/mnt/c/Temp以下にコピーします。コピーがすんだら、今度はwsl1の/usr/local/binにitmdumpをコピーします。
#wsl2にて cp /usr/src/openocd/itmdump /mnt/c/Temp #wsl1にて sudo cp /mnt/c/Temp/itmdump /usr/local/bin次はwsl1にて、usbシリアル/VCOMの設定をおこないます。usbシリアル/VCOMがWindows上で例えばCOM8として認識されている場合、以下の様にします。(itmdumpはcargo install itmの物とはオプションが異なりますので、注意してください。)
sudo chmod 666 /dev/ttyS8 stty -F /dev/ttyS8 2000000 cs8 -cstopb -parenb itmdump -f /dev/ttyS15 -d1次は前回と同じで、CubeIDEでデバッグを開始し、telnetでlocalhostの4444に接続し > tpiu 以下のコマンドを入力します。
$ telnet localhost 4444 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. Open On-Chip Debugger > tpiu config external uart off 84000000 2000000 > itm port 0 on最後に、ステップ動作あるいはRUNさせます。SWOが機能していると、前回と同じく
Hello World!! I'm WeAct-F401CE and looping!! 日本語出力できるかどうか試してみました!!以上のようにwsl1側に出力されていれば成功です。Keilを使わずにOpenOCD on Windows環境だけでSWOを得ることができるのはGoodですね。今回は以上です。それでは。
コメント
コメントを投稿