今回はch32v003でUSBを実現するrv003usbをUIAPduino Pro Micro CH32V003 V1.4で使ってみましょう。
rv003usbとは
rv003usbはch32funにソフトウェアUSB機能を追加したソフトウェアライブラリになります。
ch32fun環境の構築
今回、Winodws上のWSL2で実行しています。
最初にch32funのインストレーションを参考に環境構築を行います。
そのままではインストールできないのでsudoを追加して実行します。
sudo apt-get install build-essential libnewlib-dev gcc-riscv64-unknown-elf libusb-1.0-0-dev libudev-dev gdb-multiarch
rv003usbのインストール
rv003usb環境のフルコピーします。
git cloneだけではサブモジュールがコピーされない為、オプションを追加します。
git clone --recursive https://github.com/cnlohr/rv003usb/
実行する
デモプログラムをそのままmakeしただけではエラーが出てしまいます。

WSLから直接接続する
今回、WSLからUIAPduino Pro Micro CH32V003 V1.4に接続できるようにします。
Windows上のPowerShellにおいて
usbipd list:接続されたUSBデバイスの状態の表示
usbipd attach --wsl --busid 1-3:busid 1-3をWSLで使用可能にする
今回は、busid 1-3をWSLで使用出来るようにします。
AttachedとなることでUSBがWSLから使用可能になったことになります。
なお、再接続されない為、毎回この作業を行う必要があります。
udevルールの追加
WSLのLinuxに udevルール を追加します。
# Do this command after UIAPduino board was installed.
sudo wget -O /etc/udev/rules.d/99-minichlink-uiap.rules https://raw.githubusercontent.com/YuukiUmeta-UIAP/ch32fun/3bfa603f11d493710f2a811b5a2dfad905d9425c/minichlink/99-minichlink-uiap.rules
# Reboot or do this command if needed.
sudo udevadm control --reload-rules && sudo udevadm trigger
Make
make を実行すること コンパイル&書込み が行われます。
問題なく書込みまで行われるとマウスが動き、bとキー入力されます。

シームレススイッチ化
続いて、シームレススイッチ化しましょう。
プログラムに以下を追加します。
if (FLASH->STATR & (1<<14)) NVIC_SystemReset();
FLASH->KEYR = FLASH_KEY1;
FLASH->KEYR = FLASH_KEY2;
FLASH->BOOT_MODEKEYR = FLASH_KEY1;
FLASH->BOOT_MODEKEYR = FLASH_KEY2;
FLASH->STATR |= (1<<14);
FLASH->CTLR = CR_LOCK_Set;
funPinMode( PD4, GPIO_CFGLR_OUT_10Mhz_PP );



