ATtiny10 用プログラム (17)

今回は、マイコン・チップ上のフラッシュ・メモリにオブジェクト・プログラムを書き込むという意味の「プログラミング」の話題です。
ATtiny10 では、フューズ・ビットの設定により、通常はリセット端子として使われる 6 番ピンを PB3 の入出力ポートや、その他の内蔵モジュールの入出力として使える設定 (RSTDISBL) があります。
いったん、RSTDISBL 状態にすると、もう 6 番ピンはリセット端子としては機能しなくなります。
そのため、通常のリセット・シーケンスで TPI (Tiny Programming Interface) モードに入る方法のほかに、6 番ピンに +12 V を印加して TPI モードに持ち込むモードが用意されています。
データシートには、このモードでの詳しいハードウェア・スペック、たとえば、供給する +12 V 電源に要求される電流容量や、12 V のモードと判断される電圧スレシホールドなどについての記述はありません。
そこで、次回に示すような測定を、ひとつのサンプルについて実際に行ってみました。
その結果、

  • 12 V は、「12 V モード」の識別の目的だけに使用され、プログラミングの電源は Vcc 5V から取られるので、TPI モードの期間、一定の値の小さな電流しか流れない。
  • その電流は、Vcc への「プルダウン抵抗」を流れるだけと思われ、そのプルダウン抵抗の値は 25 kΩ 程度で、電流も最大値で 0.4 mA 程度。
  • パワーオン・リセットで動きだすフラッシュ上のアプリケーション・プログラムで PB3 を出力に設定していると、PB3 へのシンク電流は最大で十数 mA となり、12 V 電源から、それ以上の電流を供給して電圧を引き上げると 12 V モードに移行することが可能。

ということが分かりました。
パワーオン後、アプリケーション・プログラムが動き出す前のリセット状態は、標準値で 64 ms 持続しますから、各ピンがハイ・インピーダンス状態に保たれている、この期間内に 12 V を供給して TPI モードに移行させるなら、12 V 電源に要求される電流容量は約 0.4 mA で済みます。
それに対して、すでにアプリケーション・プログラムが動作し始めた後に 12 V を印加して TPI モードに移行させるためには、アプリケーションで PB3 を出力モードで使用している可能性を考えると、十数 mA 以上の電流容量のある 12 V 電源を突っ込んで、有無を言わせず 6 番ピンの電圧を上げる必要があります。
後者の方法では、ブレッド・ボードでの実験など、誤配線や IC チップの挿入位置間違いなどが起こりやすい環境では、12 V を加えるべきでないピンに 12 V を加えてしまうような事故が心配されます。
12 V の電流容量が大きいと、事故によって、デバイスが永久破壊されてしまう可能性があります。
電流容量が小さければ、破壊までには至らずに救われる可能性が高くなります。
そんなわけで、前者の、パワーオン・リセット期間内に電流容量の少ない 12 V を印加する方法を取ることにしました。
その代わり、+5 V 電源が立ち上がったら、速やかに +12 V を発生し、電源がオンされている間は +12 V を供給しっぱなしにする必要があります。
したがって、書き込んだプログラムを走らせるためには、いったん電源をオフしてから、(+12 V はつながずに) 再び電源を投入し直す必要があります。
電源 ON から間を置かずに +12 V が立ち上がる必要がありますから、たとえば Arduino で作成したパルス波を利用して +12 V を作るようなことはできません。
Arduinoブートローダでは、リセット後はホストからのコマンドを待って、タイムアウトした後にユーザー・プログラムに制御を移しますから、その頃には、とっくに ATtiny10 上のプログラムが走り出しています。

電流容量は必要ないので、 3 倍圧「コッククロフト・ウォルトン回路」で実現することにしました。
回路図を左に示します。
電源オンで、すぐに動き始めて欲しいので、発振は CMOS 版 555 を使い約 30 kHz の矩形波発振をさせ、電源電圧 5 V × 3 = 15 V にシリコン・ダイオードの順方向電圧降下を利用して、12 V ちょっとの電圧を得ています。
Arduino を利用した書き込み器での変更点を下の回路図に示します。

ATtiny10 に対する通常のリセットと、12 V の印加をスイッチで切り替えるようにしただけです。
12 V のラインに挿入してある 1 kΩ の抵抗は、他のピンに接触した場合の電流制限で、Vcc 5 V レイルにダイオードでクランプする形式の保護回路ではダイオードに流れる電流は 2.5 mA 程度になり、破壊には至らないはずです。
抵抗により、12 V ラインも少し電圧降下し、12 V をちょっと下回る程度の電圧になります。
最後に LTspice シミュレーション回路を示します。

トランジェント解析の出力波形を下に示します。

5 ms から発振を開始し、40 ms 付近で発振を停止しています。 実際の回路では、連続して発振させており、停止はしていません。