■ATmegaシリーズのヒューズビットやロックビットを強制的にリセットするパラレルライタ。先週の日記でどうにか格好がついたというところだったのだけど、実用できるレベルまで持ち上げられたように思っています。普段使えるツールとして、人に見せられるレベルかなという感じ。ただ、格好いいGUIとかはないけれど。COMポートを使えるターミナルソフトが必要です。VT100が通ればOKです。
開発とテストにはTeraTermを使ったので、それがあればOK。ターミナルソフト経由でデータの入出力をする、シェルと言えなくもないんでしょうが、それほど複雑なものでは決してありません。
大きくパラレルプログラミングモードに入るメニューと、ピン接続性をテストするメニューがあり、ATmegaのシグネチャを読み出し、識別し、デフォルトのヒューズビット書き込みと、強制的なチップイレースでロックビットを解除する機能があります。ピン接続性テストでは、書き込みターゲットのパラレルプログラミング用の各ピンにロジックレベルで0101‥‥を連続出力してその方形波周波数をデジタルテスタで検出することで、ターゲットの石のピンの不具合を簡単にチェックすることができます。
ピン接続性テスト(Test for PIN Connectivity)を作ったのは、比較的初期に作成したTQFN変換基盤でのピンヘッダの接続で細いピンと太いピンを間違えて接触不良になりやすいものを作ってしまっていたからです。今は細いピンにハンダを薄く巻いて肉厚にするという強引なことをやっています。反省しています。
ATmegaの各石のヒューズビットのデフォルトというのはそれぞれ異なるものと思った方が良く、オフィシャルなデフォルト値はそれぞれの石のデータシートに記載があります。
ただ、今回作った書き込みソフトというか、ATmegaリセッターが使うデフォルト値は、自分が使いやすい設定をデフォルトにしています。そのため、現在デフォルトでリセットできるのはATmega64とATmega128の2つだけです。強制チップイレースのフェーズでもデフォルト設定をしているのですが、正直言ってこれは‥‥バグです。ATmega64とATmega128では不具合にはならないと思うのですが、そのほかの石では怪しくなります。
デフォルト値はAVRMUCs.cの中で定義しています。このソースファイルにはロジックは無く、定数定義のみなのですが、不定長バイト列の配列で、各バイト列の先頭3バイトがシグネチャ、続く3バイトがlow,high,extendの各ヒューズのデフォルト値です。このデフォルト3バイトが0x00, 0x00, 0x00の場合、値が設定されていないと看做して、デフォルトの設定はしません。つまり、ATmega64とATmega128しか(今のところ)使えないわけです。
実行画面は下図のようになります。
この実行例では、(E)でパラレルプログラミングモードを選び、(N)で(データシートで最初に紹介されている手順で)パラレルモードに入ります。入った時点でシグネチャとヒューズとロックビットを読み出しています。(D)を押してデフォルトを設定しています(が、元々デフォルト値が設定されていたので、何も変わっていません)。
メニューを抜けるために(K)を押してメニューの上位層へと戻っています。
デフォルトを設定できるのだから、任意のビットも設定できますが、あえてその機能は実装していません。ヒューズの設定はそれこそGUIを持たせないと却って危ないですから。
最後に、回路図ではありませんが、ATmega168とターゲットのピン関係の図を。このプログラムはこの図にあるATmega168のピンアサインに依存しています。