UIAPduino Pro Micro CH32V003 V1.4 にプログラムを書き込むには、公式ページで説明されている次の操作で行います。
| リセットボタンを押しながらボードをPCのUSBポートへ接続し、リセットボタンをすぐに離します。ボードは書き込みを待機します。 |
|---|
『ボードをPCのUSBポートへ接続し』の部分を、USBスイッチのOFF→ONで代用できると考えていたが、何度やっても「書き込みモード」に移行してくれない。
このUSBスイッチは VBUSだけをOFF/ONしていると思われ、D+/D-信号はつながったままであることが原因ではないかと推測した。
それを確認すべく、VBUSおよびD+/D-を切断できる USBスイッチ を、次の3通り設計した。
USB切断スイッチの設計
左のUSBが入力側、右のUSBが出力側。中央が切断機構。いずれもマイコンは未使用。
- 小型リレー方式
オムロン製小型リレー(2回路C接点)941H-2C-5D を 2つ使った方式
・ リレーの駆動は押しボタンスイッチで行う
・ リレーの電源はUSBバスパワーを利用(することは問題なし)

- 4PDTスイッチ方式
物理スイッチ方式は、部品点数が少なく済み回路は簡単ではあるが、4PDTスイッチは種類が少なく、高価な物が多い。例えば、
TE Connectivity製(4回路C接点スライドスイッチ)ASE4204は上記小型リレーの10個分より値段が高い。

ALPSALPINE製SSSU042100ならリレー3個分程度のようだが、入手性が悪い。 - 半導体スイッチ方式
物理スイッチを半導体スイッチに置き換えた方式。USBのD+/D-を切り替えるICは、いくつか存在する。ただし、VBUSの切り替えまではできないため、CH217を併用してVBUSの切断を行う。半導体方式はPCBをスマートに仕上げることができるが、反面、周辺の抵抗やコンデンサを多く必要とし、部品点数が増え 価格面で最安にならない。

USB切断スイッチの製作
上記3方式で 一番安価な 小型リレー方式を、72mm x 47mm のユニバーサル基板に実装した。
- 入出力のUSBソケットは、タイプCに加えてタイプAも並列に接続(使用できるのは、どちらか一方のみ)
- 上図は
おもてから見た配線図であるが、一部は裏面で配線 - リレーのサイズに誤りがあり、上図は
8x4穴分であるが、実際は8x3穴分 - 実装の都合上、下側リレーの電源の向きを逆にした
- 抵抗内蔵LEDを使用することで、外付けの制限抵抗を省略した
- 出力側USB-CのGND横の★印は、入力VBUSラインにかかっているので、手前で配線を切断することを意味する
検証結果
| このUSBスイッチは VBUSだけをOFF/ONしていると思われ、D+/D-信号はつながったままであることが原因ではないかと推測した。 |
|---|
1. USBスイッチ
テスターを使って、ON/OFF状態を調べた結果、下表の通りであった。
凡例 ○:接続、×:切断
| 信号 | ON状態 | OFF状態 | |
|---|---|---|---|
| VBUS | ○ | × | |
| GND | ○ | × | 想定外 |
| D+ | ○ | ○ | |
| D- | ○ | ○ |
2. 本USBスイッチを使ったUIAPduinoの書き込みモードへの移行
手持ちに53KΩ抵抗が無かったので、51KΩと2KΩ抵抗を直列に接続して代用した。
問題なく、『書き込みモードへの移行』できました。狙い通りです。
・ 考察
当初は、D+/D-信号とGND間の電位により、マイコンにわずかでも電流が流れていることが原因と考えていた。
しかし、冒頭のUSBスイッチがGNDも切断している事実を考えると、D+/D-信号間の電位が原因ということになる。
今回作成した USBスイッチは、GND以外の VBUS/D+/D- を切断するため、マイコンには一切の電流が流れない。このため、『USBポートから抜いた』状態が再現できている結果、問題なく『書き込みモードへの移行』できたということだろう。
・ 結論
もし、前項の『考察』が外れていたとしても、『書き込みモードへの移行』ができているので、結果的に問題はない。
| リセットボタンを押しながらボードをPCのUSBポートへ接続し、リセットボタンをすぐに離します。ボードは書き込みを待機します。 |
|---|
この
USBスイッチは、手に握って指でスライドスイッチを操作する必要があり、これと、UIAPduinoのリセットボタンを押す操作を同時に行うことは、考えているほど簡単ではない。(UIAPduinoのリセットボタンが『押しにくいタイプ』のタクトスイッチであることも一因。)
一方、今回作成した USBスイッチは、作業机に置いた状態で タクトスイッチを押す操作で行うため、UIAPduinoのリセットボタンを押す操作と同時に行うことが簡単になった。
自分は、作業机にあるUSBハブを使用しており、USBケーブルをUSBハブに挿す操作を行うときは、USBハブを支えていないと動いてしまってケーブルを挿すことができない。これと同時にUIAPduinoのリセットボタンを押す操作を行うことは、至難の業であった。
(左手で USBハブを支えながらUSBケーブルを挿す操作を行い、右手でUIAPduinoを支えながらリセットボタンを押す操作を行っている。)
今回作成した USBスイッチは 支える必要はなく、タクトスイッチをまっすぐ押し込むだけのため、『書き込みモードへの移行』が楽に行えることが、最大のメリットである。
注意事項
本USBスイッチは USB 1.0 / 1.1 / 2.0 のみ使用できます。
以上