SNSへはこちら

MacでPIC開発にトライ

先の記事では Windows での PIC 開発をしましたが、今回は Mac でやってみました。なぜ最初から Mac でやらないかというと、ライターのソフトが上手く動かなかったからです。ですが最近たまたま、うまく動かす方法がわかった(無理矢理ではない)のでご紹介します。この方法はググっても出てこなかったので当ブログが初出になるのかな?

追記(2018/3/1): 回路図、配線図、コマンドを修正

ただ注意点として、先の記事で用いた PIC は書き込みソフトが非対応ということです。ですので秋月で PIC18F2420 をテキトーに買い直しました。

参考にしたサイト

1つ目をメインに参考にさせていただきました。感謝です。2つ目は1つ目のサイトに使用されている FT232RX のピン配置を確認するために見ながらちまちま回路を作っていました。

回路

というわけで自分用に回路を EAGLE で組んでみました。こちらは FT232RL のチップを生で使うものなのですが、秋月のモジュールを使う時は FT232RL の左側は無視、電源は VIO 端子としてください。MAX662 は秋月で購入できます。ここで D2 はツェナーダイオードで、9V のものを使います。これは書き込み時の VPP 電圧が 12V ではなく 9V であるデバイス用に新しく取り付けたものです。ジャンパをショートさせると 9V、オープンで 12.6V になります。

なおこちらをプリント基板にしてみました。配線図は以下。

この基板を発注して、はんだ付けしてみました。写真は一部間違っていた箇所があったので、そちらをスズメッキ線で強引に修正したものです(上の回路図、配線図は既に直してあります)。

書き込みソフト

PicProg を用います。 Linux 版をダウンロードして適当に make でもしておいてください。途中リンカから「deprecated だぞ!!!」って怒られると思いますが、まあ無視で問題ないようです。多分。出来上がった picprog はパスの通った場所に置くと便利だと思います。然しながら、これだけでは準備は不十分です。以下を読み進めてください。

Mac 側の設定

ここが大きなポイントです。まず Mac には Apple 製の FTDI デバイス用ドライバが乗っかってると思いますが、こちらでは動きません。ご注意を。ちゃんと動作させるには FTDI 社謹製のドライバが必要になります。

まずご自分の Mac でどのドライバが動いているかを確認します。以下のコマンドを打ち込んでください。

$ kextstat | grep FTDI

おそらく com.FTDI.driver.FTDIUSBSerialDrivercom.apple.driver.AppleUSBFTDI のどちらかが出ていると思います。前者が出ている方はこのセクションはスルーでOKです。後者の人はこちらから Mac の 64bit 版を入れてください。入れたら再接続なり再起動なりすればいいと思います。そしたら上のコマンドをもう一回打ってみて、com.FTDI.driver.FTDIUSBSerialDriver が表示されたらOKです。2つとも出ている人は

$ sudo kextunload -b com.apple.driver.AppleUSBFTDI

とすれば Apple の方を無効化出来ます。

MPLAB X 側の設定

こちらは各プロジェクトごとに設定が必要になってきます。picprog では HEX ファイルの拡張アドレス設定で0番地を省略することは出来ない仕様になっているようで、デフォルト設定のままで読ませるとエラーを吐いて書き込みスタートしてくれません。ですのでこちら側から直します。まずプロジェクトを作成、左ペインのプロジェクトを右クリックして Properties を選んでください。

設定画面が出るので XC8 linker の Additional options からチェックボックスをチェックします。

これでビルドをしてあげると、出来上がった HEX ファイルの1行目に以下の行が追加されて、picprog に正常に認識させることが出来るようになります。

:020000040000FA

書き込みだ

適切な配線をして以下のコマンドを打てば書き込みができます。結構通信速度が早いようなので、配線が長いと成功率は下がります。自作プリント基板ではある程度の確率で失敗するようですが、まあこんなもんでしょう(多分)。

$ picprog --slow -q -p /dev/tty.usbserial-A104RH1S --erase --burn --input ~/MPLABXProjects/LEDChika.X/dist/default/production/LEDChika.X.production.hex

書き込み時のコンソール表示はこんな感じ。

Using 10 µs delays.
/dev/tty.usbserial-A104RH1S: id 0x1147: detected pic18f2420 version 0x07
Device pic18f2420, program memory: 16384, data memory: 256.
Erased and removed code protection.
Burning program memory, 1696 locations,
burning data memory, 0 locations,
burning id words, 0 locations,
burning fuses,/dev/tty.usbserial-A104RH1S:0x300000: configuration byte verification failed, read 0x00, should be 0xff
This is a configuration byte, which often has hardwired
bits and therefore does not verify.  It also may have code
protection bits, and if they were programmed to enabled
state, verification may fail.  Therefore this error is ignored.
/dev/tty.usbserial-A104RH1S:0x300004: configuration byte verification failed, read 0x00, should be 0xff
/dev/tty.usbserial-A104RH1S:0x300007: configuration byte verification failed, read 0x00, should be 0xff
 7 locations,
done.

何やら fuse 辺りでエラーメッセージが出ていますが、これは Configuration bytes とは関係のない未使用領域を読み出しているだけなので、無視してOKです。実際 Configuration bytes はしっかりと書き込まれていますのでしっかりと動作しています。

書き込みが終わると自動的にプログラムが走り出します。プログラムは以下のものを使いました。

いやぁ〜〜、長かった!半年以上前から Linux で動く PIC ライタの wiki ページは見つけてはいたんですが、どうもうまく動かなくて。しばらく放置していたら、偶然にもドライバ周りが原因じゃね?となったのでした。
やはり Mac で何でも動かしたいという強い気持ちがあったので、今回の発見はすごく嬉しかったです。まあマイクロマウスにはこれっぽっちも関係ありませんがね。PICKit 3 はあんなの買ってやるもんですか。高すぎるよ!
PIC の評価は MSSP(SPI, I2C)以外は実は全て終わっているのですが、まったり触れていきたいと思います。

ところでこのライタは LVP に対応していないんですかね?多分対応してるんじゃないかと思うので、オシロで波形を見てみたいと思います。
↑なんか対応してないっぽいです。よくわからないですが、書き込みが正常に終了しません。

また、この回路ではインバータをかませていますが、これって出力論理のインバートで対応できるんじゃね??と今更ながら思いました。これは FT232RL 側の EEPROM を書き換えることで可能なようです。詳細は実験して後日別記事にて報告します。

続報あり。こちらをクリック!