OneBitLoader が PIC24FJ64GA に対応(80word版ブートローダー) [PIC]
OBL(OneBitLoader) が PIC24FJ64GA002 に対応しました。
PIC24FJ 版でも OBLのDNAを受け継いでおり、主な特徴は次のとおりです。
え?ソフトウェアシリアルなのに 80 ワード??(ソフトシリアル部のみで 30 ワード使っています)
実は今回の PIC24FJ 対応ではちょっとした工夫を織り込んでいます。
24FJ はフラッシュメモリの消去単位が 512 ワード(Page)単位と大きいため、かな~り前の記事で書いた
1bit通信ができたらブートローダも作りたい。これは後で(いつになることか??)検討したいですが、ブートストラップ方式でコンパクトなローダーでローダ自身をロードしてからターゲットプログラムをロード(当然最後にはコンパクトなローダ部分のみ残る)できたら理想です。
を実現しました。
所謂、2段ブートストラップ方式です。PICのシリアルブートローダーでは世界初ではないでしょうか?(どこかにあるかもしれないけどw)
OBLは内部構造をあまり公開していませんが、既存の PIC16F88/886 対応版でも フラッシュメモリの消去サイズによる無駄をなくすためにローダーの先頭にソフトシリアル受信処理を配置し、最後の書込み時(受信処理が不要な状態)には受信処理部の一部を消去&上書きすることで対応していました(そのためにPC側にもローダーのHEXファイルが必要)
今回の PIC24FJ 対応でのアプリケーションのロードシーケンスの概要を下図に示します。
OBL は IPL 部 と Body 部から構成されていて、通常は IPL 部のみがフラッシュメモリに常駐しています。
また、IPL 部と Body 部間の相互のコールポイントを固定アドレスにすることでブートローダー自身により、ブートローダーのアップデートを可能にしました。
PC側の OBL のHEXファイルを入れ替えて、アプリケーションの書込みを行うことで OBL 自身がアップデートされます。
但し、シリアルBITを変更した場合は通信タイムオーバーが発生(上図の(2)の時点で旧シリアルBITで通信できるコードがなくなるので)します。この場合でもOBL はアップデートされています。
OBL のHEXファイルとしては次の二つを準備しました。(添付しているPIC側ソースコードを変更して通信BIT、ボーレイトの変更や他の PICへの適用が可能と思います)。
現時点ではEEPROM書込みなどには対応していませんが(PIC24FJにはEEPROMは無い)、機能追加してもBody部が大きくなるだけで OBL の占有メモリサイズ(=IPL部分のサイズ)はほとんど大きくならないはずです。
インストール方法と使い方については OBL のページ を参照してください(PIC24FJ用にまだアップデートしていませんが従来とほとんど同じです)
プレインストールされている通信確認用のアプリケーションは下記のような表示でキーボード入力した値をエコーバックします(ちょっとだけ見栄えを良くしました^^)
★追記 2015/09/21 回路図例を追記
回路は下記のようなごく一般的な接続です(内部クロックを使用)
OBL は RB6(15番ピン)か RB7(16番ピン)への接続になります。
ダウンロードは下記リンクからどうぞ
★追記 2015/06/28 アップデートしました^^;
★追記 2015/09/21 RA3が使用できるように config2 の値を修正(内部クロックを使用する設定です)
PIC側のブートローダーの差し替えは上記説明のように PC側のヘキサファイルを置き換えてから本ブートローダーによりアプリケーションの書込みを行うことでブートローダー自身によりPICに新ブートローダーが書き込まれます。
★追記 2015/11/22 PIC24FJでreset処理の無いhexファイルの書き込み時に本来のreset処理にたどり着けない場合があったのでPC側の実行ファイルを修正
ブートローダ(OneBitLoader)の製作
[ 前へ ] 連載記事 [ 次へ ]
PIC24FJ 版でも OBLのDNAを受け継いでおり、主な特徴は次のとおりです。
- PCとの通信は1ビットのI/Oで行っており通信自体もソフト制御なので、ブートローダには任意のI/Oピンを一つだけ割り振るだけでよい。MCLRピンについても回路上の制約はありません。(PIC24版ではサイズ縮小のため、resetでデジタル入力状態のI/Oピンを使用)
- ローダー自体のサイズは非常にコンパクト(80ワード)で、0xab5c ~ 0xabfb のアドレスに収められていてアプリケーション側のプログラムサイズをあまり圧迫しません。
- ローダー切換え用スイッチ等は不要でロード時以外は reset の約 0.2 秒後にアプリケーションが自動起動します。
- アプリケーションからは 0x0000 ~ 0xab5b の範囲のフラッシュメモリを自由に使うことができ、開始アドレスも自由なので通常にコンパイル&リンクしたアプリケーションを書き込めます(リンカスクリプトを編集して開始アドレスを変更する必要がありません)
え?ソフトウェアシリアルなのに 80 ワード??(ソフトシリアル部のみで 30 ワード使っています)
実は今回の PIC24FJ 対応ではちょっとした工夫を織り込んでいます。
24FJ はフラッシュメモリの消去単位が 512 ワード(Page)単位と大きいため、かな~り前の記事で書いた
1bit通信ができたらブートローダも作りたい。これは後で(いつになることか??)検討したいですが、ブートストラップ方式でコンパクトなローダーでローダ自身をロードしてからターゲットプログラムをロード(当然最後にはコンパクトなローダ部分のみ残る)できたら理想です。
を実現しました。
所謂、2段ブートストラップ方式です。PICのシリアルブートローダーでは世界初ではないでしょうか?(どこかにあるかもしれないけどw)
OBLは内部構造をあまり公開していませんが、既存の PIC16F88/886 対応版でも フラッシュメモリの消去サイズによる無駄をなくすためにローダーの先頭にソフトシリアル受信処理を配置し、最後の書込み時(受信処理が不要な状態)には受信処理部の一部を消去&上書きすることで対応していました(そのためにPC側にもローダーのHEXファイルが必要)
今回の PIC24FJ 対応でのアプリケーションのロードシーケンスの概要を下図に示します。
OBL は IPL 部 と Body 部から構成されていて、通常は IPL 部のみがフラッシュメモリに常駐しています。
- IPL が Body部をフラッシュメモリに書き込む
- Body 部に制御を渡し、 Body 部が IPL の収容されている 最終 Page を書き込む
- Body 部が 自身が格納された Page 以外のアプリケーション部分を書き込む
- 再び、IPL 部分に制御が渡り、Body 部の Page を書き込む
- ロードしたアプリケーションに制御を渡す
ブートシーケンス |
|
また、IPL 部と Body 部間の相互のコールポイントを固定アドレスにすることでブートローダー自身により、ブートローダーのアップデートを可能にしました。
PC側の OBL のHEXファイルを入れ替えて、アプリケーションの書込みを行うことで OBL 自身がアップデートされます。
但し、シリアルBITを変更した場合は通信タイムオーバーが発生(上図の(2)の時点で旧シリアルBITで通信できるコードがなくなるので)します。この場合でもOBL はアップデートされています。
OBL のHEXファイルとしては次の二つを準備しました。(添付しているPIC側ソースコードを変更して通信BIT、ボーレイトの変更や他の PICへの適用が可能と思います)。
現時点ではEEPROM書込みなどには対応していませんが(PIC24FJにはEEPROMは無い)、機能追加してもBody部が大きくなるだけで OBL の占有メモリサイズ(=IPL部分のサイズ)はほとんど大きくならないはずです。
- 24FJ64GAB6_38400.hex : RB6(15番ピン)でシリアル通信するタイプ
- 24FJ64GAB7_38400.hex : RB7(16番ピン)でシリアル通信するタイプ
インストール方法と使い方については OBL のページ を参照してください(PIC24FJ用にまだアップデートしていませんが従来とほとんど同じです)
プレインストールされている通信確認用のアプリケーションは下記のような表示でキーボード入力した値をエコーバックします(ちょっとだけ見栄えを良くしました^^)
Welcome to OneBitLoader by skyriver 2015/06/16 Please push any key You pushed : a You pushed : b You pushed : c |
★追記 2015/09/21 回路図例を追記
回路は下記のようなごく一般的な接続です(内部クロックを使用)
OBL は RB6(15番ピン)か RB7(16番ピン)への接続になります。
PIC24FJ64GA002 回路例 |
|
ダウンロードは下記リンクからどうぞ
★追記 2015/06/28 アップデートしました^^;
★追記 2015/09/21 RA3が使用できるように config2 の値を修正(内部クロックを使用する設定です)
PIC側のブートローダーの差し替えは上記説明のように PC側のヘキサファイルを置き換えてから本ブートローダーによりアプリケーションの書込みを行うことでブートローダー自身によりPICに新ブートローダーが書き込まれます。
★追記 2015/11/22 PIC24FJでreset処理の無いhexファイルの書き込み時に本来のreset処理にたどり着けない場合があったのでPC側の実行ファイルを修正
[ 前へ ] 連載記事 [ 次へ ]
OneBitLoaderを使用する時に私が使っているケーブルはかなり前に秋月電子通商さんで購入した USB-RS232C 変換ケーブルです。
Prolific社 の PL2303 チップを使用したものですが、デバイスドライバが Win8 以降は対応対象外となっています。
またコピー製品対策としてチップチェック機能が実装されたことから「このデバイスを開始できません。(コード10)」というエラーが表示され動作しない場合があります。
こんな時は http://www.ifamilysoftware.com/news37.html から入手できるドライバを入れると問題なく動作します。(Win10でも動作しています)
by skyriver (2017-02-23 21:09)