2020年6月16日火曜日

USB入りのPICにブートローダを仕込む実験の備忘録

マイクロコントローラ(マイコン)にファームウエアなど実行ファイルをプログラムするのには、たいていはそれ専用のプログラマ(PICではPickitシリーズ、AVRではAVRISP、STMではST-Linkなど)が必要になります。

しかしデバイス自身にプログラムが可能なマイコンであれば、ブートローダという書き込み専用プログラムをデバイスに組み込むことで、外から転送された実行ファイルを自身のフラッシュメモリに書き込む事が出来るので、いちいち専用のプログラマを取り出して書き込みしなくても済みます。

転送方法はUARTとUSBが主のようで、PC側では転送用のソフトウエアを用意することにより基本的にPCさえあればいくらでもファームウエアの書き換えが可能になります。

Arduinoはブートローダがすでにマイコンに組み込まれた状態で販売されています。ユーザーはArduino IDEさえPCにインストールすれば、このソフトウエアだけでコードを書いて、コンパイル、そしてUSBなどを経由して簡単にプログラミングが出来てしまうという手軽さからいろんな電子工作界隈で普及しています。(もう少し高度なMbedもそうですね。Raspberry Piもありますが、近年ほとんどPC化しているのでもう別物です(笑))

もちろん無線電子工作のAKCのメンバーも自作機器の制御に好んでArduinoを使っておられます。

Arduinoが好きじゃないわけではありませんが、同じことしても面白くないしPICでも簡単にできないだろうかと思っていました。もともとUSB内蔵のPICでPIC18F14K50は以前から秋月で扱っておりマイコンボードも購入していましたが、USB対応には外付けXTAL発振が必要で2ポート取られるためいまいち乗り気にならずそのまま放置状態でした。しかしつい最近(1年ほど前から扱っているようですが)PIC16F1459というUSB対応のモデルを見つけました。EEPROMは内蔵していませんが、外付けXTALを必要とせず内部発振でUSB対応可能な点に惹かれ、早速秋月から取り寄せてブートローダ組み込みとプログラミング実験を行いました。

1.ブートローダ組み込みで必要なモノ
・USB内蔵PIC
これがないと始まりません(笑)今回はPIC16F1459を取り寄せました。DIPタイプは秋月で1個190円とPIC18F14K50より安価でピンコンパチです。

・周辺部品
実験用なのでブレッドボードで組みますが、0.1μFのパスコンと3.3Vレギュレータ用の0.33μF程度のパスコン、ブートローダ起動選択用のボタンとポート用プルアップ抵抗10kΩ、ステータス表示用のLEDと電流制限抵抗1kΩ、microUSBコネクタDIP変換ボード、配線ワイヤ、USBコード(microUSB-USBtypeA)くらいでしょうか。

・PC
言わずもがなですが、私はWindows10の自作PCを使っています。

2.ブートローダイメージファイルの準備
ブートローダのhexファイルはmicrochipでは公開されていません。MLAといういろいろなサンプルコード集の中からブートローダ用サンプルプロジェクトをMPLAB X IDEに取り込んでXC8pro版でコンパイルし、PICにプログラムしなくてはなりません。
ネット検索で内蔵発振に対応したブートローダのhexファイルを見つけることができるかもしれません。見つけたらダウンロードし実験用として利用するのも手です。
一方自前でファイルを生成する場合ですが、XC8のpro版を個人で所有するケースは稀です。Free版の場合でも少々コードを変更するとコンパイル通りますが、ファイルサイズは大きくなります。手順は検索するといくつか出てきますので参考にする事が出来ます。
それとはまた別にファイルサイズが極めて小さくなるブートローダもGitHubで公開されています。

3.PICへのブートローダのプログラミング
ブートローダの組み込みにはPickit3などのプログラマはやはり必要です。MPLAB X IDEでブートローダをコンパイルして直接プログラムするか、hexファイルをMPLAB X IPEで取り込み通常通りにPICにプログラムします。

 4.ブートローダの起動とユーザ作成ファイルのプログラム
あらかじめHIDBootloaderWindowsというソフトをダウンロードし起動させ、ブートローダ起動選択ボタンを押しながらPIC側からPCのUSBコネクタに接続するとPCがPICを認識します。HIDBootloaderWindowsで接続が確認されたら、ユーザ作成のファイルを選択してプログラムボタンを押すとPICに書き込まれます。リセットボタンを押すとユーザ作成のソフトが起動します。

5.ユーザプログラムをビルドする上での注意点
PICに組み込んだブートローダが格納されているメモリ領域を避ける設定を加えます。詳細はネット上に解説がいくつかあるので検索してください。

6. ブートローダのデメリットについて
・フラッシュメモリの消費
ブートローダはPICのフラッシュメモリに格納されているので、その分ユーザアプリケーションで使える容量が減ります。PIC16F1459の場合約3分の1が消費されます。XC8Free版で生成された場合それ以上にフラッシュメモリ領域が占有されてしまいます。
・venderID, productIDについて
個人的な実験や使用についてはあまり問題はないのですが、小ロット頒布を含めて商用利用する場合は少なくともUSB-IFへの申請が必要になりますとくにMLAを利用する場合microchip社との契約も必要になるかもしれません。かかる費用もそれなりに高く個人での利用はかなり難しいです。(ただしある一定数の範囲内のものについては、サブライセンスにするなどメーカーによっては敷居が低い場合もあるようです。)

ともあれ取り寄せたPIC16F1459にブートローダを組み込み、テスト用プログラムを書いてビルドしたファイルをPickit3なしでプログラムして動作させる事が出来ました。


Arduino IDEとまではいきませんが、専用プログラマーなしでプログラムできるのは快適ですね。

2020年6月3日水曜日

各プロダクト用ケース3Dデータ公開

今年になってから続いているCOVID-19蔓延で外出自粛が続く中、自主頒布キットの頒布依頼を多くいただきました。しかしながら頒布準備作業で手いっぱいになってしまったため今月から受付を停止させていただき、次期プロダクトの開発試作を進めることにしました。

とくにケースについては3Dプリンタ出力に頼っており、1セット分を出力するのに半日はかかるため各キットに同梱することがなかなかできていません。

そんなわけで停止期間中何もないのも申し訳ないので、今までのプロダクト用のケースの3Dデータを公開します。

STLファイルで提供しますので大抵のスライサーで読み込み可能だと思います。(ちなみに自分の環境ですが、スライサーにはUltimate Curaの最新版4.61を使いCR-10クローンのGeeetech社製A30プリンタで出力しています。)素材はPLAやABS、ほかのものでも多分問題ないでしょう。各素材の収縮率を加味して出力チャレンジしてみてください。


まずはVN-xx02シリーズ用サイドパネルです。以前のケースを一新して再設計しました。


 下に小型のスピーカー(秋月電子通商のマイクロスピーカー) 内蔵可能です。


ツマミも再設計しました。チューニング用のツマミはクルクル連続して回せるように指を入れるくぼみをつけました。

取り付け用に新たにM3x15mmほどのビス8本ご用意ください。

STLファイルはこちらです。


次はKeyer Mini-V2 Revision2用のケースです。
こちらも新設計です。


旧ケースのような箱タイプではなく、4側面をカバーするタイプです。


底面は、底面のアクリル板を横からスライドさせてはめ込むタイプでビス止めは必要ありません。なお左右側面のパネルにはM3のネジ穴が出力されますが、一度M3用のタップを通してください。

STLファイルはこちらです。

表面の取り付けにM3x15mm程度のビス4本ご用意ください。


次にQRPディジタルVSWRメーターQPM-01用のサイドパネルです。


 VN-xx02用と同様に4側面を覆うタイプのケースです。
 FUNCボタン延長用のボタンもついています。

STLファイルはこちらです。

追加のビスは不要です。8mm高のスペーサと8本の透明なプラスチックビスをそのまま使用します。なお左右側面のパネルにはM3のネジ穴が出力されますが、一度M3用のタップを通してください。


最後にnanoVNA用のサイドバンパーです。頒布したものと同じデータです。



 STLファイルはこちらです。


各々の圧縮ファイル内のexpand_rate.txtに各パーツの拡大率のサンプルを載せました。フィラメントやプリンターによって値が微妙に異なりますので、各自試行錯誤でお願いします。

【注意】
 なおブログ本文へのリンクはご自由にしていただいても問題ありませんが、ファイル自体への直接リンクやファイルそのものの無断転載、第三者への無断譲渡は固くお断りいたします。