PicWriterUSBの機能実装に必要な機能を考える
こんにちは、リゲル・インテリジェンスです。
Seeed XIAO RP2040をPICマイコンの書込み器に利用する際に、どのような機能にするか=どのようなソフトウェアコンポーネントが必要か、を考えてみました。あまりに実装が困難ですとホビーレベルの工作では辛くなってしまいますので。
- RP2040をUSBマスストレージクラスデバイス=USBドライブとしてホストOSに認識させる
- USBマスストレージクラスの実装
- ファイルシステム:互換性を考えるとFATが無難
- PICマイコンの「.hex」ファイルを上記ドライブにコピーすることで書込みを開始する
- 「.hex」ファイルが書き込まれことをキャッチする方法
- ファイルシステム(FAT)に置かれたデータのリード:RP2040にて内部利用するためのFATリーダー
- 「.hex」ファイルのParser
- PICマイコンの書込み機能に関するハードウェアコントロール&コマンド実装
- 折角なので可能な限り書込みスピードは上げたい
- デュアルコアへの対応
- RP2040、PIOモジュールの利用
ぱっと思いつくのはこのくらいでしょうか。やはり実装として重そうなのは「USBマスストレージ」かと思います。
結論から申しますと、pico SDKにあるTiny USBの実装例が今回の目的にピッタリでした。
pico-sdk/lib/tinyusb/examples/device/cdc_msc
を改変して使用することにします。早速ソースコードをwork/msc_testフォルダにコピーしてビルドを試します。
1 2 3 4 5 6 7 8 9 10 |
pico-sdk/ work/ ├── pico_sdk_import.cmake └── msc_test/ ├── CMakeLists.txt └── src/ ├── main.c ├── msc_disk.c ├── tusb_config.h └── usb_descriptors.c |
上記のようにフォルダを作成しファイルを配置したら、Tiny USBを参考にCMakeLists.txtを変更します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
cmake_minimum_required(VERSION 3.13) # Pull in SDK (must be before project) include(${CMAKE_CURRENT_LIST_DIR}/../pico_sdk_import.cmake) include(${PICO_SDK_PATH}/lib/tinyusb/hw/bsp/family_support.cmake) # project name (need to edit for each project) set(PROJECT "msc_test") project(${PROJECT} C CXX ASM) set(CMAKE_C_STANDARD 11) set(CMAKE_CXX_STANDARD 17) # SDK initialization family_initialize_project(${PROJECT} ${CMAKE_CURRENT_LIST_DIR}) # executable name (need to edit for each project) add_executable(${PROJECT} src/main.c ) # source code target_sources(${PROJECT} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/src/main.c ${CMAKE_CURRENT_SOURCE_DIR}/src/msc_disk.c ${CMAKE_CURRENT_SOURCE_DIR}/src/usb_descriptors.c ) # include path target_include_directories(${PROJECT} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/src ) # Configure compilation flags and libraries ... # see the corresponding function in hw/bsp/FAMILY/family.cmake for details. family_configure_device_example(${PROJECT}) # enable serial output pico_enable_stdio_usb(${PROJECT} 1) pico_enable_stdio_uart(${PROJECT} 1) # create map/bin/hex file etc. pico_add_extra_outputs(${PROJECT}) |
ビルドします。Tiny USBに使用するデバイスを指定する必要があるのでcmake に -D オプションを追加します。
(exportは適宜実行のこと)
1 2 3 4 5 6 |
cd work/msc_test mkdir build cd build export PICO_SDK_PATH="[SDKをインストールしたフォルダ]/pico-sdk" cmake .. -DFAMILY=rp2040 make |
build/msc_test.uf2をSeeed XIAO RP2040にUSB経由で書込みます。一旦ホストPCから切断された後「TinyUSB MSC」というドライブ名(ボリュームラベル)にて再認識されれば動作確認は完了です。
次ページではTinyUSB MSCに必要な改変を行っていきます。
コメント