PIC HID Bootloader

last updata : 2018/05/03

HID Bootloader (pic18Non-J) 【Microchip製 HID Bootloader互換】

雲

2012年の雲

阿蘇の山と雲の写真やまなみハイウェイから

HID Bootloader とは

ブートローダとは、起動後最初に動作するプログラムです。 PCやスマートフォン等では、他の主プログラム(OS等)をRAMに読み込みするのが目的になります。

PICやAVR等のマイコンは、主プログラムをROMに読み込み(書き込み)するのが目的になります。 似て異なる機能ですかね。

Bootloader の種類

PICのブートローダとして、SIO(シリアル通信), I2C や 今回紹介する USB HID 等があります。 ですが、個々に仕様が違いますので互換はありません。

Microchip製 HID Bootloader互換

後述しますが MLAのUSBにあるHID Bootloaderが大元です。

そのHID Bootloader は、XC8 PRO で記述しています。 free版でコンパイルするには、修正が必要 + メモリ使用量が多くなります。 アプリケーション側に寄与する機能がなければ、少ないほうが良いに決まっています。

そこで MPASM(アセンブラ)で互換性のある HID Bootloader を作りました。 アセンブラで記述すれば、約半分強ほどで済みます。

マイクロチップ社製 HID Bootloader と XC8コンパイラ

マイクロチップの「 Microchipアプリケーション用ライブラリ(MLA)

MPLAB® IDEは、MPLAB® X IDEに完全にバトンタッチしてXC8コンパイラが幅を利かせております。 ユーザープログラムのHID Bootloader対応もXC8で十分できる様になりました。

2021/02/24現在 mla v2018_11_26 が最新のようです。

ソフトウェア 3.18版 (2021/02/24)

Ver 3.17は、PIC18F25K50のブートローダーを使ってプログラムを更新する際、 イレーズ処理で止まることが多く出たので調べたところ…。

イレーズ中にUSB処理を挟むと止まる様です。

USBからデータを引き取ることも渡すことも出来ない状態でUSB処理を呼び出してもしょうがないのに… pic16f145x_familyのブートローダーでは各処理中にUSB処理を呼び出すことはないです。

で今回その部分を外しました。 ついでにウォッチドックタイマを稼働させました。 こちらは、単に稼働し忘れです。

デフォルトで4秒のウォッチドックタイマを稼働させています。 USBを使うならメインループは、1mS~100mS位で回るでしょうから十分長いと思います。 まっ アプリケーションでWDTを起動しない手もありますが。

pic18Non-JのUSB PICに対応しました。

  • PIC18(L)F14K50, PIC18(L)F13K50
  • PIC18(L)F24K50, PIC18(L)F25K50, PIC18(L)F45K50
  • PIC18F2450, PIC18F2455, PIC18F2458
  • PIC18F2550, PIC18F2553
  • PIC18F4450, PIC18F4455, PIC18F4458
  • PIC18F4550, PIC18F4553

もしローダーとして上手く動作しないとかあったら連絡頂けるとありがたいです。

ダウンロード

pic18Non-J用 (HID Bootloader 2KB版 Restart Address:0x0800)

bootloader-18Non_J_318.zip

選択

上記圧縮ファイルには、Hexファイルとソースファイルが入っています。

ソースファイルはMPLAB® X IDEの環境ごと入れてありますので、[BOOT_18xxxxx]を選んでビルドしてください。 (右の図を参照)

追記. XC8用のコンフィグ設定ファイルも入れました。

各機能に付いて

  • ブートローダースイッチ
  • 初期設定のブートローダースイッチは、MCLRピンに設定し使用できるようにしています。 純正も他のピン変更はほぼ不可なので、それに習い変更不可にしてあります。 ただし、純正もユーザープログラムからブートローダーに移行する機能が出来ました。

    旧のブートローダーに移行する機能は、廃止しました。

  • LED
  • 2個使いから1個に変更しています。 多少でも小さくなるようにです。

    初期設定のLEDは、使用しないにしてあります。 各ボード毎にLEDの配置が違うので、修正してビルドすれば使えるようになります。 (PIC毎に分けていないから使い難いかも。)

  • Bios
  • この機能は、Ver3.10より廃止しました。

ホストプログラム

作っていません。 何故ならば、マイクロチップ社製と互換があるのでそっちダウンロードしてね。 「 Microchipアプリケーション用ライブラリ(MLA)」此処です。

[bootloders]-[utilities]-[bin]-[win] に"HIDBootloader.exe"があります。

重要. Ver2.9j 以降を使用すること。それ以前を使用すると新しい機能が使えないだけではなく、ユーザープログラムが起動しません。。

ベンダーID/プロダクトIDに付いて

このブートローダーに使っているベンダーID/プロダクトIDは、マイクロチップ社のHID Bootloaderと同じです。

動作や機能が同じなので、個人的や社内でテスト的に使う分には問題はでないと思います。が、 2KB版 HID Bootloader を製品(プログラム用開発ボード等含む)に組み込んで販売する事はできません。

ただ、同じベンダーID/プロダクトIDを使って別なPICブートローダーを公開している企業も有るようです。 何処まで良いのか日本マイクロチップに少し問い合わせしてみましたが回答は無かったです。(2013/6/12)

上記の様に販売したい場合は、開発または販売元でベンダーID/プロダクトIDを取得してプログラムを変更してください。 また組み込んだ事に依るデータ喪失や機器損傷等の損害等の保証は一切受けられません。

回路図

サンプル回路図

テストに使っているブートローダーの回路図を載せておきます。

使い方

作成したブートローダのHEXファイル単体をpickit3等のライタで書き込むことでHIDブートローダーの使用が可能になります。

ただしブートローダーを使って起動するアプリケーション は、そのブートローダーの仕様に合わせて変更する必要があります。 HID Bootloaderを使ったアプリケーションの作り方を参照ください。

PIC16F145x

この、PICにもUSBが付いていて今回は純正のブートローダーが出来ています。 前に少し試した事があるのですが、製造ロットによっては大きなバグがあるのでローダーを作るのを見送っていました。

やはり、純正もPIC16F145xのリビジョンID "A5" 以降 対応ですか。 ブートーローダーの仕様上、仕方がないかもしれません。

前回の検討の結果…作ってみました。 "A5" 以降 のデバイスがやっと入手できて完成した訳ですが一寸大変でした。 (色々ありまして。)

こちらHID Bootloader (pic16f145x_family) を参照ください。

免 責

情報は出来るだけ正確に書くつもりです。ただこの記事を見て作ると思ったときは、 個人の責任において作業を行なってください。 データの喪失や機器の損傷が有っても、一切の責任は取れません。