PIC24FJ用ブートローダ (boot loader)の作成(1)
【ブートローダとは】
マイコンを起動した時に、ある特定の条件(スイッチを押しているなど)で呼び出しするプログラムのことで、今回は、そのプログラムに、USB経由で受信したファームウェアで自分自身を書き換える機能を搭載します。
【目的】
①授業でPICマイコンを使用するのですが、PICkit3(約5千円)の人数分の費用がかかります。そこで、PICkit3を用いずにUSB経由でファームウェアを書き換えることでコスト削減を図ります。
②新製品SoundVarioWithGPSのファームウェアのアップデートをユーザーができるようにするためです。
【課題】
①コンパイラ(XC16)の問題
マイコン内部のレジスタを制御するにはProバージョンが必要であることが判明しました。そこで、XC16をアンインストールし、再度XC16(Ver1.31)をインストールする時にフリーのPro版を選択しインストールをしました。2ヶ月間はフリーで使えます。
xc16-v1.31-full-install-windows-installer.exe
このbatを実行するとOKです。
※Ver1.31をインストールすると、旧のVer.1.24もPro版になりました。
②クロックの問題
内部の発振回路でUSB用の96MHzのクロックを作成するのですが、内部発振回路には誤差があるのでキッチリ96MHzにならないという懸念ああります。とりあえず回路図に発振回路を入れておいて、精度が問題になったらこの発振回路を使用することにします。
今回は、プログラムの起動時にブートローダ部を挿入しないといけません。従ってコンパイルして出来たオブジェクトを配置するリンカーの定義が必要です。PICマイコンの場合は、.gldファイルで定義し、開発環境に登録することで可能となります。
→プロジェクトの下 Linker Files を右クリックしてAdd Existing Itemでgldを選びます。
gldファイルは
C:\Program Files (x86)\Microchip\xc16\v1.31\support\PIC24F\gld\
の下にあります。これを修正し使用します。ただし、__BOOTLOADERの定義参照をしているので以下の設定が必要です。
Project Properties > xc16-ld > Symbols & Macros > Define Linker macros
に__BOOTLOADERを追加します。
64KBと128KBのマップは次の通りです。
【64KB】
(アドレス)(内容)
0 ----------------------
0x400 ----------------------
ブートローダ(4KB)
※スイッチの条件を判定し真ならプートローダを実行、偽なら0x1400へ飛ぶ
※128KBの時は0x1800へ飛ぶ
----------------------
空き 【128KBの時】
0x1400 ---------------------- → 0x1800
JMP 0x14C0 → JMP 0x18C0
0x14C0 ---------------------- → 0x18C0
↑
|
ユーザープログラム
|
↓
0xA800 ---------------------- 【128KBの時】
0xABF8 ---------------------- → 0x157F8
FLASH CONFIG4
0xABFA ---------------------- → 0x157FA
FLASH CONFIG3
0xABFC ---------------------- → 0x157FC
FLASH CONFIG2
0xABFE ---------------------- → 0x157FE
FLASH CONFIG1
0xAC00 ---------------------- → 0x15800
|
|
|
0xF80000 ----------------------
DEVICE CONFIG4
0xF80002 ----------------------
DEVICE CONFIG3
0xF80004 ----------------------
DEVICE CONFIG2
0xF80004 ----------------------
DEVICE CONFIG1
|
0xF80010 ----------------------
※リンカーエラーが発生
Ver1.30以降で発生するので、今回はVer1.24を使用することにします。
Ver1.30以降で使用する場合は gldファイルの
CRT1_STARTUP(crt1_standard.o) の次の行に
CRT_STARTMODE(crt_start_mode_normal.o) を追加すれば直ります。
④コンパイル時、_CONFIG1~4で警告が発生(Ver1.31)
以前のバージョン(Ver1.24)では問題ありませんでしたが、新しいバージョンではCONFIGの記述方法が変更になっています。変換ツールは
MPLABX IDE > Window > PIC Memory Views > Configuration Bits
で各CONFIGの設定をし、Generate Source Code toボタンをクリックすると#pragma形式に変換してくれます。表示されたコードをソースコードに貼り付けることで対処できます。
→今回はVer1.24を使用するので問題ありません。
続きは(2)へ http://fujiharagiken.hatenablog.com/entry/2017/10/03/130302