midi bootloader for pic 完成

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に書き込みをする必要があります。

midibootloader.x  (283kB)

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'

5件のコメント »

  1. [...] http://www.analogfeeder.com/?p=1821 [...]

    ピンバック by midi bootloader for pic | Analogfeeder — 2014/04/30 @ 00:24

  2. [...] midi bootloader組み込み済みなので、midi経由でpicのファームをアップデートできる(max/mspで) [...]

    ピンバック by TAF midi prototypeセットアップ | Analogfeeder — 2014/08/26 @ 00:38

  3. [...] 詳細と解決策はこちらにアップデートしました。 [...]

    ピンバック by pic midi bootloader不具合報告1 | Analogfeeder — 2015/01/16 @ 00:28

  4. はじめまして。大変参考になります。

    Comment by Nao Daiho — 2020/04/23 @ 00:59

  5. Nao Daiho様
    コメントありがとうございます。参考になってよかったです。

    Comment by toucyy — 2020/05/03 @ 22:43

この投稿へのコメントの RSS フィード。 TrackBack URL

コメントする