PicWriterUSB:ソフトウェア編【PIOの利用】

pio_test_log

RP2040 PIOを用いたPICマイコンアクセス

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

PICマイコン(PIC16F1823)へプログラムを書込むには、基本的に4本の信号線をコントロールする必要があります。

  • VPP:PicWriterUSBではHigh Voltage Programmingを使用しますので、書込み時に9Vを印加します
  • VDD:3.3V電源ですがProgrammingモードに入れるために、VPPと併せてON/OFFのコントロールが必要です
  • ICSPCLK:データ読み書きのための同期クロックで、アクセスタイミングの調整も行います(各種Wait付加)
  • ICSPDAT:上記クロックに同期してデータを入出力する、唯一の双方向信号線です

このうち、VPPとVDDはプログラミングモードの開始/終了の際に一度だけ操作すれば良い=タイミングに多少余裕をもたせても処理全体の時間には大きな影響は無いためGPIOに割り当てても問題は無いでしょう。一方でICSPCLKとICSPDATはデータの読み書きで1bitずつ処理していくため、仕様に合う範囲で可能な限り早く動作させたいです。PIC16F1823のICSPCLKサイクルは200nsecと高速ですし、要所要所でWaitを入れる=ICSPCLKを動かさない期間を作る必要もあります。この用途にはGPIO+ソフト処理ではなく、RP2040のPIO(Programmable Input/Output)モジュールが非常に良くマッチします。

RP2040のPIOはCPUの直接操作無しに、

  • FIFOに積まれたデータを決められたシーケンスでGPIOピンから出力する
  • GPIOピンへの入力を決められたシーケンスでFIFOに積む

を行います。この「決められたシーケンス」をアセンブラに似たプログラム(機能が少ないのでスーパーサブセット版といった感じです)にてステートマシンとして記述できます。ステップ数が32迄などあまり複雑な処理は出来ませんが、システムクロックのスピード(125MHzでは1ステップ8nsec)で動かせるので高速な処理にも対応出来ます。

pio_block

※RP2040 Datasheetより抜粋

下記が今回作成したICSPCLK/ICSPDATコントロールのPIOプログラムです。

main()とCMakeLists.txtです。

これらを下記のフォルダに配置し、いつものようにビルドします。

pio_test.uf2ファイルをRP2040に転送し、PIC16F1823を接続した状態でプログラムを走らせると下記のログが得られます。

pio_test_log

正しくDevice IDが読めています。次ページにてPIOプログラムの内容をもう少し詳しく見ていきます。

コメント

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