0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

CH32V003をUSBのHIDデバイスにして、Windowsパソコンとデータ送受

Posted at

経緯

 CH32V003が乗った基板が安かったので購入した。
 Type-Cのコネクタが付いて居る、チップ自体はUSB機能を持たないが、
 電源入力だけじゃ勿体ないよな。
 ◆◆◆ よし、USB通信に使ってみよう ◆◆◆
 サンプルはその辺のネットに転がっているだろう。

HIDとしての動作

 PC(パソコン)側からデータ送信し、デバイス(CH32V003)からデータを受け取る。
 単にHIDデバイス(キーホードやマウス)として動作するだけでなく、
 パソコンとの間のデータのやり取りを行う、インテリジェンスデバイスとして動作させる。
 USBシリアルでもデータのやり取りは可能だが、専用のDriverが必要となる。
 HIDデバイスで有ればDriverの作成は不用であり敷居が低い。

 大昔はCPUの信号を直接取り扱うことが出来て、其れにはプリンタポート等が利用されてきた。
 しかし今では、プリンタポートなんか付いてるパソコンは有るだろう。
 PCと通信する場合はDriverという、極めて難易度の高いソフトが必要となる。※MSの認可も必要。
 HIDデバイスはそれに代わる通信手段で有ろう。※策度が遅いが。

開発環境(ハード)

 「前回」に同じ。
usb_hid_conect.jpg

接続

 下記を基板と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デバイスが見えれば動作正常。
hid_usb_tv.jpg
 機能は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を指定して起動し、一端ソリューションのリビルドを行っておく事。
 ソフトを起動し"通信開始"を押せは、通信が継続される。
usb_hid_txrx.jpg

通信状況

 400usに一回程度、送受信(8byte)を行っている。
 下記は送受信を2回実行。※途中にkiip信号が挟まっている。
 1÷0.0004×8=20KB/秒=160Kbps/秒の通信速度となる。※早くはない。
tx_rx.jpg
 下記は送信データ
tx_sig.jpg

感想

 市販されているものも有るが、PC連動を深く考えて無い気がする。
 PCの持つデータと連動させれば、面白い物が作れそうな気がする。
 なお、上記記載内容は全て無保証であり、各自の責任においてご利用願います。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?