これまで、3.3V系のマイコンでSWDアクセスするってことにこだわってきた(?)けど、どうせターゲット電圧に合わせないといけないので、5V系にして、I/Fでターゲット電圧に合わせることを考える。そすればAVRマイコンの動作クロックを速くすることができる。
さっそく、マイコンはこんな感じ。ATmega328Pを5Vで使う(ArduinoUNOと同じ)。
で、出力は74HC125でターゲットレベルVTGTに合わせることにする。こんな感じ。SWDOはSWDIOを3.3kΩでプルすることにする。SWDIOはそのまま、マイコンに入れてデータをとることにする。本当は、こちらもレベル変換せんといかんのだけど、ATmega328Pはそのままでも3.0VまではHighと認識できるので、いったん今回は放っておく。
入力トレラントの74VHC125を使えば不要だけど、74HC125の絶対定格でVCC+0.5Vを超えた電圧を入力してはいけないので分圧する。
(修正2022.08.18)
これだとVTGTが0Vの場合に、74HC125において電源は入ってないのに機能ピンに電圧がかかる。こりゃ、あかん。では、使わないときはマイコン出力をLOWにすれば?ってなると、ENが有効ってことになるので、ターゲット接続時にターゲットのピンがLOWにドライブされる。NRSTもLOWにドライブされるのでリセットかかる。リセットがかかっても全然問題ない場合も多いのですが、不本意なのでだめ。
なので、マイコンのピンをVTGTで外部プルアップして、出力をOUTPUT HIGH/LOWではなく、INPUT HZ/OUTPUT LOWにする、、、しょーがない。こういう時にターゲット側にHZを作り出せるのが74HC125のいいところなので、たよっちゃう。
で、これらのためにターゲットの電源を引っ張っちゃいけないので、出力増強したボルテージフォロアでターゲット電圧のコピーを作って電源にしちゃう。まぁロジックICくらいは動かせるやろ。
で、こんな感じでつくっちゃう、、、動作確認のためいったんターゲット側電圧はFT231Xの3.3V出力をぶっこんでいる。
で、こんなんで動作確認する。
#define pg_dir_SWD DDRB #define pg_port_SWD PORTB #define pg_pin_SWD PINB #define pinNRST (0x02) #define pinBUFEN (0x04) #define pinSWDO (0x08) #define pinSWDI (0x10) #define pinSWCLK (0x20) #define SWD_Connect() (pg_port_SWD&=~(pinBUFEN)) #define SWD_Disconnect() (pg_port_SWD|=(pinBUFEN)) void setup(void){ pg_dir_SWD&=~(pinSWDI); pg_dir_SWD|=(pinNRST|pinBUFEN|pinSWDO|pinSWCLK); pg_port_SWD=pinNRST; SWD_Disconnect(); } void loop(void){ pg_port_SWD&=~(pinNRST);delayMicroseconds(10); SWD_Connect();delayMicroseconds(10); pg_port_SWD|=(pinSWDO|pinSWCLK);delayMicroseconds(10); pg_port_SWD&=~(pinSWCLK);delayMicroseconds(10); pg_port_SWD|=(pinSWDO|pinSWCLK);delayMicroseconds(10); pg_port_SWD&=~(pinSWCLK);delayMicroseconds(10); pg_port_SWD=(pg_port_SWD&(~pinSWDO))|(pinSWCLK);delayMicroseconds(10); pg_port_SWD&=~(pinSWCLK);delayMicroseconds(10); SWD_Disconnect();delayMicroseconds(10); pg_port_SWD|=(pinNRST);delayMicroseconds(10); delay(1); }
なんか、、、ちょっと思っているより早い気がする。パルス周期20usになっているはずなのに、18usになっている。まいか。
この回路でTimer2を使ってSWD波形を作っていこうと思います。やる気が出れば。
歳のせいか、色々なうっかりが多発する。
やらないといけないことが多すぎて、むしろ全部に手がつけられない。
やりたいことが多すぎで、むしろ全部にやる気がしない。
、、、やばいな、、、人間として。
コメントをお書きください