一番簡単なデバッグ・モード導入装置
デバッグ・モードへの入り方,デバッグ・モードへ入るための条件,そして,OSBDMに足りないものが,だんだんと明らかになってきました.では,回路を追加して何とかすることにします.
エレキジャック本誌では,外付けのパワーオン・リセットIC(RNA51957B)を使った「BDMアダプタ」を追加して,デバッグ・モードに入るための条件を実現しています.IC一個だけの追加で済むので,簡単です.
しかし,私の手元には,そんな便利なICは有りません.そこで,ICを使うのではなく,ディスクリートな素子だけを使ってパワーオン・リセットを実現し,自動的にデバッグ・モードに入るための装置を作成します.
リセットICって,何だ?ここでいう「リセットIC」とは,具体的な素子の名前です.電源電圧が低いときには,確実にリセット端子をLOWに固定します.つまり,電源電圧が低いときに確実に動作しなくてはならないため,気合の入った設計が必要です.
リセットICの動作をDC的なグラフにすると,このようになります.
横軸が「電源電圧」をあらわし,縦軸が「出力」をあらわします.
電源電圧が0.6Vよりも低いとき,出力は電源電圧と同じ電圧になります.これは,出力につながっているプルアップ抵抗の作用です.一般の半導体製品は,ダイオードがONする電圧(約0.6V)よりも電源電圧が低いときには動作しません.そのため,この部分の動作は致し方ないでしょう.もちろん,リセットされる側のマイコンも動作しないはずです.
電源電圧が0.6Vよりも高くなると,リセットICが動作し始め,出力をLOWにドライブします.このときから,マイコンは確実にリセットされるため,意図しない動作を抑制することができます.
さらに電源電圧がVRECOVERよりも高くなると,リセットICの出力は,プルアップ抵抗の作用により電源電圧と同じ電圧になります.電圧VRECOVERは,マイコンが確実に動作することができる電圧に設定されます.こうして,マイコンは,安全にプログラムを実行することができるのです.
マイコンが安定して動作しているとき,電源電圧がVTRIPよりも低くなると,再びリセットICが動き始め,出力をLOWにドライブします.マイコンは,リセット状態に入り,電源電圧が復帰するまでプログラムの実行を差し控えます.
マイコンのリセットが解除される電圧VRECOVERは,リセットに入る電圧VTRIPよりも少し高く設定されています.これは,電源電圧のゆっくりとした動きやノイズなどの影響を受けないようにするためです.もし,これらの電圧が同じ値に設定されていたら,出力が電源電圧とLOWの間をバタバタする現象となってあらわれ,リセットされるマイコンに対して悪影響を与えます.
BKGD/MS端子にリセットICが使える理由BKGD/MS端子は,決してリセット入力ではありません.しかし,ここではリセットICでLOWに引いてやることで問題を解決しています.これは,なぜでしょうか.理由を考えるために,マイコンの電源をOFF/ONした場合の動作を模式的に書いてみました.
マイコンの電源を再投入すると,電源電圧が低い間は,0.6V以下の部分を除いて,リセットICの作用でBKGD/MS端子の電圧はLOWになります.このとき,マイコンのパワーオンリセット・シーケンスが終了するときの電圧(VPOR)よりもリセットICのVRECOVER電圧を高くしておくと,マイコンはBKGD/MS端子からLOWを取り込み,デバッグ・モードに入るという仕組みです.
電源電圧がVRECOVERよりも高くなったら,デバッガの動作に影響を与えないように,リセットICは,BKGD/MS端子のドライブをやめます.
デバッグモード導入装置一号機を作るリセットICの動作と効果がわかったので,ディスクリート部品でデバッグ・モード導入装置一号機をつくってみました.
トランジスタ二つの簡単な回路になりました.ただし,この回路では,VTRIPとVRECOVERが同じ電圧になっているため,電源再投入時にBKGD/MS端子がバタつく可能性があります.
一号機の動作説明それでは,一号機の動作の説明を行います.リセットICと同様に,この回路も,電源電圧が0.6Vを下回るときには,動作しません.
電源電圧が0.6Vを超えたとき,まずトランジスタQ2がONします.これは,Q2のベースにR2を介してベース電流が流れこむためです.ベースに流れ込む電流のhFE倍の電流をBKGD/MS端子から引くことができます.Q2がONしているとき,万が一BKGD/MS端子が出力に設定されてHIGHをドライブしたとしても,抵抗R3により電流が制限され,マイコンを壊す心配がありません.
一方,トランジスタQ1は,OFFしています.これは,R1とVR1で分圧された"CTRL"ノードの電圧がQ1をONさせるには足りないからです.やがて,電源電圧が上昇すると,"CTRL"ノードの電位も上がり,0.6Vを超えるとQ1がONします.
Q1がONすると,Q2のベースに流れていたベース電流は,Q1のコレクタに吸い取られてしまい,Q2は,OFFします.このときの電源電圧が,リセットICのVRECOVERとVTRIPに相当します.
以上の動作原理から,"CTRL"ノードの電圧が0.6Vを超えたときにリセット出力が解除され,その電圧は,R1とVR1で構成される分圧回路によって決まることがわかります.ところで,VRECOVERって,いくつに設定したらよいのでしょうか.
一号機の調整どうも手がかりに乏しいので,ここからは,前述の三つのマイコンで実験を繰り返しました.一号機を調整しながら可変電圧電源でパワーオンリセット・シーケンスを与え,設定すべきVRECOVERを求めました.
| マイコン | 設定しきい値 |
|---|---|
| MC9S08QG4CPA | 2.0V |
| MC9S08QE8CPG | 2.0V |
| MC9S08SH4CPJ | 2.6V |
その結果,パワーオンリセットの実験で求めた電圧のうち「LEDが点灯する電源電圧」のタイミングでBKGD/MS端子の状態を取り込んでいるらしいことがわかりました.つまり,マイコンの品種によって,VRECOVERの設定を変えなければいけないようです.
一号機の調整は,以下の手順で行います.
- 可変電圧電源と一号機を接続します.
- 可変電圧電源を目標の電圧出力に設定します.
- 一号機のBKGD出力にLEDを接続します.
- 一号機のVR1を調整して,BKGD端子につないだLEDがちょうど点灯を始める状態に設定します.
- 調整が終わったら,可変電圧電源を調整して,BKGD端子のLEDが変化する電圧を確認します.
これで,一号機の完成です.OSBDMと一緒に使ったところ,うまくデバッグ・モードに入るようになりました.
次回は,ちょっぴり複雑な二号機を作成します.
