PicWriterUSB:ソフトウェア編【Dual core対応】

PANIC_log

RP2040の2つのコアを使い分ける

こんにちは、リゲル・インテリジェンスです。

RP2040へのUSBマスストレージクラス=FAT12ドライブの実装は目処が立ちましたので、PICマイコン用の「.hex」ファイルがドライブへ書き込まれたことを検出するために、Root directory entry=Block3への書込み発生をトリガにします。「.hex」ファイルの書込み先がルートディレクトリへ限定されますが、実用上の問題は無いでしょう。

まずは試しにRoot directory entryへ書込みがあったら、全ドライブ領域のデータダンプをUART上へ行うようにプログラムを組んでみました。

all_dump

PANICで停止しました。最後のメッセージはTiny USBからで、end pointを掴みっぱなし、もしくは無反応のためと推測します。UARTへのデータダンプに時間がかかり、その間プロセッサがマスストレージ側の処理が出来なくなったためでしょう。PICマイコンへのプログラム書込みの際にも同様のことが発生する可能性があります。
問題回避のためにOSを導入してタスク管理をする方法もありますが(Tiny USBではfreeRTOSをサポートしているexampleもあります)、RP2040は折角Cortex M0+を2個持っていますので少々贅沢な気はしますが

  • Core0:Tiny USB(マスストレージ)関連の処理=ホストPC処理
  • Core1:PICマイコン書込み関連の処理

と分けて担当させればOS無しでもスムースに動くでしょう。core1_main.cを追加し、main.cとCMakeLists.txtを修正します。

ビルド後、msc_test.uf2をRP2040に書込みます。ダンプデータはCore1が出力します。テスト用にRoot directory entryへ書き込みがある度に480block全てをUARTへ書き出しますが、マスストレージ側の処理を妨げることは無いのでPANICは発生しません。

dump_all02

Core0、Core1、両方を使う方向で実装を進めていきます。

コメント

タイトルとURLをコピーしました