Upgrade to Pro — share decks privately, control downloads, hide ads and more …

CH32Vシリーズを楽しもう(74thの場合) / enjoy ch32v series

CH32Vシリーズを楽しもう(74thの場合) / enjoy ch32v series

Avatar for 74th(Atsushi Morimoto)

74th(Atsushi Morimoto)

September 29, 2024
Tweet

More Decks by 74th(Atsushi Morimoto)

Other Decks in How-to & DIY

Transcript

  1. Atsushi Morimoto @74th • 本職 データエンジニア・バックエンドアーキテクト • ハードウェア、マイコン知識はアマチュア • 著書

    『改訂新版 Visual Studio Code実践ガイド』 • 技術書典3-17 サークル参加 ◦ 『USB完全に理解した』(技術書典16) • M5Dialをトラックパッド化した 自作キーボードキットSparrowDial ◦ HHKB Life で紹介 『ぺかそ&びあっこが厳選! 2024年最新クセ強自作キーボード』 ◦ M5Stack Japan Creativity Contest 2024 商業アイデア賞
  2. CH32Vシリーズとは • WCH社が提供するRISC-Vマイコン • STM32シリーズと同じピン配置、機能群がSTM32F1と同様っぽい • とにかくお安い(WCH公式ストア) ◦ CH32V203C8T6: 88円/pcs(購入単位20)

    ◦ CH32X035G8U6: 54円/pcs(購入単位20) ◦ CH32V003J4M6: 21円/pcs(購入単位50) • Aliexpressに公式ショップがあって手に入りやすい • 秋月でも買える! • 安いわりに、それなりにちゃんと動く • USBデバイス/ホスト機能を持つのもある • USBデバイスのあるものは、 USB経由でプログラムを書き込めて、他のプログラマが不要
  3. WCH社を知ったきっかけ • WCH社を知ったのは、 秋田先生の同人誌(後商業化)がきっかけ • CH552は、安価なUSB付きマイコンだが、 開発環境辛い、I2Cがないという話が • CH32V203で開発環境がそこまで辛くない Rust(ch32-rs)が使えることで興味を持つ

    • ブログ記事(2022/12/22) 『WCH の RISC-V MCU CH32V203 を Rust でLチカする』 https://techbookfest.org/product/5803512929714176 https://74th.hateblo.jp/entry/2022/12/22/223956
  4. CH32V203 ProMicro型開発ボードを作る • 自作キーボードから電子工作に入ったため、 ProMicroを親だと思っている • 2023年1月にキットを、Boothにて販売 • 2024年1月に完成品を、 Switch

    Scienceマーケットプレースにて販売 https://booth.pm/ja/items/4492691 https://www.switch-science.com/products/9478
  5. CH32V003 • RV32EC (E: レジスタが少ない命令セット) • Flash: 16K、SRAM: 2K •

    10セントマイコンで、50個単位で買うと安い ◦ SOP8 21円/pcs (秋月40円) ◦ TSSOP20 30円/pcs (秋月50円) • コンデンサ1個付けとけば動作する • 書き込みに必要なピンが1つ • ちょっと組み込むだけだったら結構十分 • I2C、SPI、UART、ADCなど機能を持つ https://ja.aliexpress.com/item/ 1005005036714708.html
  6. コミュニティでCH32V003の開発環境が登場 • https://github.com/cnlohr/ch32v003fun • レジスタを直接たたくことを基本とし、 使いやすくなるようマクロが組まれている、よってプログラムが小さくなる • ユーザが多く、exampleが豊富でひとまず動くコードがからスタートできる 動くので、レジスタ操作も怖くない!! •

    利用ツール群は、パッケージマネージャ、Homebrewのgccを使い、 専用の環境構築がほぼ不要 • 書き込みCLIツール minichlink をプロジェクト内で開発 • プログラムビルド、書込、シリアルモニタまでのフローが makeコマンド一発で完結 • WCH-LinkE経由で、printfのシリアルモニタが使える • CH32V20xなどもサポート
  7. CH32V003はやはり小さい • Blink + SerialでのHello World ◦ 公式SDK: 32% (5.2/16kB)

    https://github.com/74th/test-ch32v003/tree/main/20240127-usb_keyboard-rv003usb ◦ Arduino(公式SDK使用): 59% (9.5/16kB) https://github.com/74th/test-ch32v003/tree/main/20240929-lchika-arduino ◦ ch32v003fun: 4.3% (0.70/16kB) https://github.com/74th/test-ch32v003/tree/main/20240929-lchika-ch32003fun
  8. CH32V003のextralibsも便利 • GPIOデジタル操作 ch32v003_GPIO_branchless.h ◦ GPIOの操作が簡単に。 ◦ GPIO_port_enable(GPIO_port_C); ◦ GPIO_pinMode(

    GPIOv_from_PORT_PIN(GPIO_port_C, 0), GPIO_pinMode_O_pushPull, GPIO_Speed_10MHz); ◦ GPIO_digitalWrite( GPIOv_from_PORT_PIN(GPIO_port_C, 0), high);
  9. I2Cスレーブデバイス作成も簡単 • examples/i2c_slave/i2c_slave.h を使えば、 I2Cでレジスタを読み書きする実装は2行で完結できる。 • volatile uint8_t i2c_registers[32] =

    {0x00}; • SetupI2CSlave( 0x9, // I2Cアドレス i2c_registers, // レジスタアドレス sizeof(i2c_registers), // レジスタサイズ onWrite, // ホストから書き込み後コールバック NULL, // ホストから読み込まれ後コールバック false);
  10. CH32V003に出会ってからの74th • CH32V003 ProMicro型開発ボードを作って、キットを頒布 • プログラマWCH-LinkEが国内販売されていないので、 クローン品を販売 (現在は正規品が秋月で購入可) • ちょっとした制御にCH32V003を組み込みまくる

    ◦ 既に4つの電子工作キットに組み込み済み https://74th.booth.pm/items/4645948 https://74th.booth.pm/items/5022813
  11. CH32Vシリーズの開発で便利なもの① • 公式SDKでの開発にはPlatformIOが便利 ◦ パッケージがコミュニティで運用されている https://github.com/Community-PIO-CH32V/ platform-ch32v ◦ EclipseベースのMounRiverStudioを 使わずに済む

    • 公式SDKにはサンプルコードが多数あるが、 少し残念なコード(初期化だけして使ってないとか)もある • 公式SDKや、マイコンの使い方はSTM32の解説書(右)が 便利 • 私自身はch32v003funがメインになっていて、 公式SDKはあまり使い込んでいないが、 マイコン使う作法を→の本から吸収 https://www.amazon.co.jp/dp/ 4789849864
  12. CH32Vシリーズの開発で便利なもの② • Rust製のツールが活発 ◦ wchisp: USB経由書込 ◦ wlink: WCH-Link経由書込 ▪

    現在は minichlink で用が足りることが多い ◦ バイナリ1つで、CLIで使えるので、便利 ◦ Windowsしかない公式ツールを使う必要はない
  13. 作品1 自作キーボードデバイス StickPointV • I2Cデバイスとして動作、 既存I2Cトラックボールモジュールと同じプロトコルを採用 • 自作キーボード用のファームウェアの設定を記述するだけ で、利用可能に •

    firmware: https://github.com/74th/stickpoint-firmware • 専用自作キーボードキット Sparrow60C を頒布中 RP2040 QMK Firmware CH32V 003 I2C ジョイ スティック 可変抵抗 ADC https://booth.pm/ja/items/5404009 https://booth.pm/ja/items/5525726 ※ QMK Firmware: 自作キーボード用の超機能の多くカスタマイズ可能な オープンソースファームウェア
  14. 作品2 リレーでのUSB切り替え機能をもつUSBHub • スイッチによるリレー制御に使用 • Grove I2Cによって、 リモートボタンを追加可能で、 リモートボタン側にも組み込み。 CH32V

    003 リレー1 USB1 USB2 USB3 USB4 リレー2 リレー3 リレー4 USBハブ IC CH334 USB1 USB2 USB3 USB4 SW1-4 CH32V 003 SW1-4 ホスト側 デバイス側 Grove I2C https://74th.booth.pm/items/5080690 https://github.com/74th/relay-switch-usbhub
  15. 作品3 SparrowTV • ESP32-C3採用のキーボードに IOエキスパンダ、ADCとして採用 • kicad, firmware: https://github.com/74th/tv-side-keybo ard-SparrowTV

    ESP32-C3 CH32V 003 I2C スイッチマトリクス ジョイスティック (可変抵抗) https://booth.pm/ja/items/5309546 USBキーボード エミュレータ CH9329 UART PC
  16. 作品4 USBRebooter • 1週間くらいでハングアップするIoT機器に 定期的に電源断をして、強制再起動する USBアダプタ • スイッチ、タイマー制御として、 CH32V003を組み込み •

    kicad, firmware: https://github.com/74th/usb-rebooter 電源スイッチIC CH217 CH32V 003 https://booth.pm/ja/items/5261267
  17. 作品5 USBスイッチアダプタ(未発売) • スイッチを押すと、切断できるアダプタ • MCUリセットだけではできない 完全なリセットに便利 • 長押しによる遮断キープや、 過電流ポリヒューズ発動のLED表示に利用

    • kicad, firmware: https://github.com/74th/74th-oshw-projects/tree/ main/74TH-G053-usb_switch_adapter 電源スイッチIC CH217 CH32V 003 スイッチ
  18. 作品6 ESP32自動ダウンロード機能付きライター(未発売) • MosFET(2N7002など)+キャパシタを 使った自動ダウンロード回路だと、 失敗が多い • タイミング制御の問題なので、その制御専 用のMCUとして使う •

    kicad, firmware: https://github.com/74th/esp32-dev-boards/tree /main/ESP32-Writer-CH9102F CH32V 003 UBSシリアル 変換IC CH9102F EPS32 RST,GPIO0 DTR