midi bootloader for pic
midiのsysEXでpicマイコンのファームウェアを書き込みできる環境を作りましたので、ここに公開します。
ブートローダーの仕組み等はこちらに詳細を記載していますので、参照ください。
0.更新履歴
2014年8月23日 : RC4ピンが12F1822にはないことを記載
2015年1月16日 : アプリケーション用のアセンブラのコードにルックアップテーブルの処理がある場合、PCLATHの処理でLow Byteの処理が抜けているとBootloaderのコードから抜け出せない現象を確認(こちらの記事の最後に詳細の情報を追加しました)
1. 接続 connection
pc にmidiインターフェース装置をつなぎ、midi outからpicのRXピン(以下回路図参照)につなぎます。
2. picの回路図 schematic
対応picは以下です。
12F1822
16F1824
16F1828
16F1829
RXピンをフォトカブラ(TLP552)を介してmidi inとして使用します。
RC4を書き込みが成功したら点灯するようにしています。(PIC12F1822はRC4ピンはありませんので、必要に応じてファームウェアを変更を行ってください)
3. bootloader firmware
picに駐在するブートローダのプログラムは以下からダウンロード可能です。
最初にこのブートローダーのhexファイルをpickit3やICDなどでpicに書き込みをする必要があります。
mplabxにてプロジェクトファイルとして使用可能です。ターゲットのpicに応じてデバイスを変更すれば、フラッシュのアドレスなど自動で設定されます。
変更方法は、project propertiesからdeviceのタブから選択します。
4. bootloaderソフトウェア
pcからファームウェアを送るソフトウェアです。
max/msp上で実行されます。パッチファイルは以下からダウンロード可能です。
midibootloader_revA_final.mxb (23.48KB)
max/mspにて上記のファイルをオープンします。max/mspのランタイムをダウンロードインストールして実行してください。
max/msp runtime 4.6.3と5.1.9のみ動作確認しています。
使い方は、パッチ内にも説明がありますが、
1. ご使用のmidi インタフェースをタブから選択します。(起動時にpcに接続されているmidiインターフェースが読み込まれます)
2. ターゲットのpicのデバイスを選択します。
3. ファームウェア(xxx.hex)をロードします。hexファイルは、mplabxのプロジェクトファイルのdustフォルダにあります。
4. ターゲットのpicの電源を入れるか、もしくはRESETを行います。
5. 数秒以内にwrite hexを押します。
6. RC4のLEDが点灯し、数秒後に動き出します。
5. 最後に
色々なファームウェアを試していますが、バグ等があれば、ご連絡ください。不明点もあれば、お気軽にどうぞ。
これからの製品には、このbootloaderをすべて組み込んでいく予定ですので、その過程で変更があれば、こちらにアップデートします。
6.不具合報告と解決
- アプリケーション用のアセンブラのコードにルックアップテーブルの処理がある場合、PCLATHの処理でLow Byteの処理が抜けているとBootloaderのコードから抜け出せない現象を確認
[詳細] 以下のようなルックアップテーブルを記述したが、行き先のLow ByteのAddressの処理が抜けている場合Bootloader中にプログラムから抜け出せません。
MIDITABLE MOVLW HIGH PITCHLOOKUP ;Set high bits of "PITCHLOOUP" location MOVWF PCLATH ;To PCLATH MOVF DAT,W ;Get Table Address MOVWF PCL PITCHLOOKUP dt D'4',D'10',D'16',D'22',D'28',D'34',D'40',D'46' dt D'52',D'58',D'64',D'70',D'76',D'82',D'88',D'94' dt D'100',D'106',D'112',D'118',D'124',D'124',D'124',D'124'
[解決策]以下のように行き先のLow Byteの処理を追加(5行目から)することで、Bootloaderが正しく動作します。
MIDITABLE MOVLW HIGH PITCHLOOKUP ;Set high bits of "PITCHLOOUP" location MOVWF PCLATH ;To PCLATH MOVF DAT,W ;Get table address ADDLW LOW PITCHLOOKUP ;Set low bits of "PITCHLOOKUP" location BTFSC CARRY ;Check Carry bit INCF PCLATH,F ;Incl if carry bit is set. MOVWF PCL ;Set PCL PITCHLOOKUP dt D'4',D'10',D'16',D'22',D'28',D'34',D'40',D'46' dt D'52',D'58',D'64',D'70',D'76',D'82',D'88',D'94' dt D'100',D'106',D'112',D'118',D'124',D'124',D'124',D'124'
[...] http://www.analogfeeder.com/?p=1821 [...]
ピンバック by midi bootloader for pic | Analogfeeder — 2014/04/30 @ 00:24
[...] midi bootloader組み込み済みなので、midi経由でpicのファームをアップデートできる(max/mspで) [...]
ピンバック by TAF midi prototypeセットアップ | Analogfeeder — 2014/08/26 @ 00:38
[...] 詳細と解決策はこちらにアップデートしました。 [...]
ピンバック by pic midi bootloader不具合報告1 | Analogfeeder — 2015/01/16 @ 00:28
はじめまして。大変参考になります。
Comment by Nao Daiho — 2020/04/23 @ 00:59
Nao Daiho様
コメントありがとうございます。参考になってよかったです。
Comment by toucyy — 2020/05/03 @ 22:43