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

WCH CH32V307VをZephyrで試す

soburi
December 19, 2022

WCH CH32V307VをZephyrで試す

soburi

December 19, 2022
Tweet

More Decks by soburi

Other Decks in Programming

Transcript

  1. WCH CH32V307V
    をZephyrで試す
    RISC-V/STM32互換ペリフェラル再び
    常田 裕士 github.com/soburi

    View Slide

  2. 自己紹介
    ▪ 常田 裕士
    ▪ 某F社勤務 昔はガラケー、今はカーナビ関連(主にLinuxを動くようにするお仕事)
    ▪ KiCadで雑に基板を作るチュートリアル (v6.0予習版)
    https://speakerdeck.com/tokitahiroshi/kicaddeza-niji-ban-wozuo-
    rutiyutoriaru-ver6-dot-x-yu-xi-ban
    ▪ インターフェース誌 2022年6月号
    第2特集 C/C++でPython拡張
    第1部 ハードウェア効率化…C/C++で拡張モジュール作り
    https://interface.cqpub.co.jp/magazine/202106/
    ▪ 技術書典とかコミケとか。来年はNT金沢出しに行きたい。

    View Slide

  3. WCH CH32Vとは
    ▪ 秋月で売ってる安いUSB-SerialのCH340と同じWCHさんのRISC-Vマイコン
    ▪ AliExpressで買える。評価ボードはなぜか2個単位での販売。
    ▪ WCHの独自RISC-Vコアに
    STM32互換のペリフェラルを
    くっつけた構成
    ▪ どこかで見たことあるような…

    View Slide

  4. ペリフェラル
    ▪ よく見た名前が並んでいる感じ。
    ▪ あとはだいたい想像の通り。

    View Slide

  5. Longan Nano
    ▪ 小さなカラーLCDが付いて800円。秋葉原でも入手可能。
    ▪ RISC-Vコア搭載のSoC, GigaDevice GD32Vを使用
    ▪ もともとGigaDeviceにGD32というARMのマイコンのラインがあった。
    GD32は某S社のマイコンとピンコンパチ
    ▪ このGD32のARMのプロセッサ部をRISC-Vに差し替えたのが
    GD32V。RISC-VのコアはNuclei社(武漢)のIPを使用。
    画像はhttps://www.switch-
    science.com/catalog/5946/ より

    View Slide

  6. とりあえずZephyrに移植してみる
    ▪ RISC-V部はWCH独自のQingKe(请客、もてなしの意?)コア
    ▪ 独自のCSRは3つ。他はすべてISAスペック(RV32IMACF)準拠
    ▪ かなり素直な作りっぽく見える
    ▪ PLICの割り込みコントローラと
    MachineTimer動かせば
    main()関数ぐらいは動くか…

    View Slide

  7. タイマー
    ▪ よく見るとMachineTimerがない!
    ▪ 独自実装!

    View Slide

  8. 割り込みコントローラー
    ▪ CLICもPLICもない!
    ▪ これも独自実装。PFICという名前が付いている。

    View Slide

  9. ところで…
    ▪ このレジスタ構成、
    どこかで見たことある気がする…

    View Slide

  10. !!!!

    View Slide

  11. 考察、というか雑感
    ▪ このチップ、命令セットはRISC-VのISA標準だが、ペリフェラルは「普通の構成」から外
    れて、ARM互換の割り込みコントローラーを乗せている。
    ▪ おそらくはSTM32で作ったソースの移植のコストを下げるための構成と思える。
    ▪ ペリフェラルの構成がSTM32と互換なので、ARMアーキ依存のところをRISC-Vに置き換
    える必要がある
    ▪ ハード+ソフトでソース互換性のレベルを上げている(ソース互換ならいいや、という感じ)
    ▪ GigaDeviceのGD32VのときはRISC-Vコア+STM32ペリフェラルだったが、
    後発のCH32Vは割り込みコントローラーまでARM互換にして「ARMからそのままソースを
    持ってくる」ことにフォーカスしている
    ▪ ここまでやっておいて、タイマーがARM互換でないのは謎。

    View Slide

  12. Zephyr移植の状況
    ▪ https://github.com/zephyrproject-rtos/zephyr/pull/49886
    ▪ とりあえずLチカ動くようにした。
    ▪ GigaDeviceのドライバ
    再利用しようとしたら方向性の
    違いで停滞中。
    (STM32Clone汎用
    ドライバ作る?)
    ▪ ほったらかしておいたら
    ボツになった。再提出。

    View Slide

  13. デバッグプロトコルも独自実装?
    ▪ https://github.com/fxsheep/openocd_wchlink-rv/issues/1
    ▪ WCH社のOpenOCD対応について
    ▪ Summarizing this thread: https://www.eevblog.com/forum/microcontrollers/wch-$0-10-risc-v-mcu/?all
    • WCH wanted fewer pins than the 4 of JTAG, here just 1.
    • WCH would have to pay ARM money for SWD
    • WCH did not bother either to go with https://riscv.org/wp-content/uploads/2019/03/riscv-debug-release.pdf
    • WCHは4ピン以下のJTAGコネクタが欲しい(ここでは1ピン=single wire)
    • SWDのラインセンス費を払いたくない
    • WCHはこれを使用することを躊躇わなかった(? )
    • なんか色々やってるようでとってもカオス

    View Slide