経緯
CH32V003が乗った基板が安かったので購入した。
Type-Cのコネクタが付いて居る、チップ自体はUSB機能を持たないが、
電源入力だけじゃ勿体ないよな。
◆◆◆ よし、USB通信に使ってみよう ◆◆◆
サンプルはその辺のネットに転がっているだろう。
HIDとしての動作
PC(パソコン)側からデータ送信し、デバイス(CH32V003)からデータを受け取る。
単にHIDデバイス(キーホードやマウス)として動作するだけでなく、
パソコンとの間のデータのやり取りを行う、インテリジェンスデバイスとして動作させる。
USBシリアルでもデータのやり取りは可能だが、専用のDriverが必要となる。
HIDデバイスで有ればDriverの作成は不用であり敷居が低い。
大昔はCPUの信号を直接取り扱うことが出来て、其れにはプリンタポート等が利用されてきた。
しかし今では、プリンタポートなんか付いてるパソコンは有るだろう。
PCと通信する場合はDriverという、極めて難易度の高いソフトが必要となる。※MSの認可も必要。
HIDデバイスはそれに代わる通信手段で有ろう。※策度が遅いが。
開発環境(ハード)
「前回」に同じ。
接続
下記を基板とWCH-LinkE間で接続。
※TX・RXはプログラム内通信で使う。WCH-LinkEはUSBシリアルとして動作。
V003では入出力のピン配置を部分的に変更可能。
USBとバッティングするのでこの位置(PC0,PC1)に設定。
基板 WCH-LinkE
V 3V3 電源
G GND グランド
PD1 SWDIO 書き込み信号
PC0 RX シリアル送信
PC1 TX シリアル受信
上記配線に、USB用に下記を追加。
基板 基板
PA1(D+) PD5 D+信号
PA2(D-) PD6 D-信号
V(1.5K) PA2 D-を1.5KΩの抵抗でプルアップ
※Type-CのD+とD-への接続と、ロースピードを指定するD-のプルアップが必要。
例示基板では、PD5/6がUSB端子に基板上で繋がっているため、この様な妙な配線になる。
当然、PD5/6は入出力に使ってはならない。
基板の電源はUSBから来るので、WCH-LinkEとは繋いでいない。
開発環境(ソフト)
「前回」に同じ。
CH32V003側のソフト(CH32V003 USB_HID)の説明
「ソフトの格納場所(Github) 」に格納。
※今回は構成が多少複雑なのでインクルードするファイルを全て纏めた。(行儀が悪いが)
このまま make を実行すれば、usb_hid.hexが出来上がるので、WCHLinkEで書き込む。
※ビューアーでHIDデバイスが見えれば動作正常。
機能はPCからの送信データをシフトして、送り返しているだけだが、
データの4バイト目は、送信データをPC5/6/7にセットして、PC2/3/4を読みだし写真データに書いている。
※usb_hid.cのusb_rx()/usb_tx()を参照。
PC側のソフト(CH32V003 HIDAPI)の説明
「ソフトの格納場所(Github) 」に格納。
ソフトはAPI本体(hidapi)と、APIの呼出ソフト見本(3種類)で出来ている。
hidapi API本体(DLL)
hidtest APIをCから呼び出している。
ccall APIをC#コンソールから呼び出している。
callhid APIをC#フォームから呼び出している。
※呼出ソフトはCで作製されたDLLの呼出方法確認用、callhid以外は多分不要。
ソフトはvisualstudio2022でコンパイルを確認している。
※hidapi.slnを指定して起動し、一端ソリューションのリビルドを行っておく事。
ソフトを起動し"通信開始"を押せは、通信が継続される。
通信状況
400usに一回程度、送受信(8byte)を行っている。
下記は送受信を2回実行。※途中にkiip信号が挟まっている。
1÷0.0004×8=20KB/秒=160Kbps/秒の通信速度となる。※早くはない。
下記は送信データ
感想
市販されているものも有るが、PC連動を深く考えて無い気がする。
PCの持つデータと連動させれば、面白い物が作れそうな気がする。
なお、上記記載内容は全て無保証であり、各自の責任においてご利用願います。