PR 記事には広告が含まれています
スポンサーリンク
Translate

PadaukマイコンのフラッシュROMをダンプできるようになりました

スポンサーリンク

PadaukマイコンのVDD,VPP用の可変電源を作り、ROMの内容をダンプできるようにしたいと思います。

スポンサーリンク

可変電源の設計

ブロック図

ブロック図は上記のようにしようと思います。ESP32のPWM出力をLPFでアナログ電圧に変換し、オペアンプの非反転増幅回路で振幅電流ともに増幅します。

Padaukマイコンの電源の電流は20mA程度と、EEVblogのスレッドにあった気がするので、オペアンプには最大40mA電流が出力できるLM358にしようと思います。

DCDCの設計

LM358は、電源電圧から1.5V下までの電圧は出力できません。Voutを12Vまで出せるようにするためには、12V+1.5Vで13.5Vの電源電圧が必要です。

PadaukマイコンのVPPはデバイスによって変わりますが、最大で11Vあればいいようなので、余裕を持って12Vとし、DCDCの電圧は13.5Vにしようと思います。

DCDCのICには中華昇圧DCDCでは有名なMT3608を使います。

MT3608の回路例

R2を10kΩとした時のR1を求めます。R2の値の計算には以前作った計算ツールを使います。

R2からR1を求める

MT3608のVrefは0.6Vです。Vrefに0.6V、R2に10kΩ、Voutに13.5V、E系列にE12を指定すると、右側に計算結果が表示されます。

R1を220kΩにした場合、Voutが13.8Vになるようです。問題ないのでこの値を使おうと思います。

LPFの設計

LPFの周波数特性

LPFは簡単なRCフィルターにしようと思います。とりあえず10kΩと0.1uFで特性を見てみると、20kHzで-40dBでした。PWMの周波数を20kHzとすると、20kHzは1/100に減衰します。3.3Vの1/100なので、リップルは33mVです。まあいいかなと思います。

増幅回路の設計

非反転増幅回路の増幅率を計算する

続いて増幅回路を設計します。オペアンプの電源には13.8Vが供給されています。PadaukマイコンのVPPは12V程度、VDDは6V程度が上限なので、そうなるように非反転増幅回路のゲインを設定します。

LPFの出力の最大電圧は3.3Vです。VPPが12Vくらいになるためには、ゲインは3.6倍くらいです。E12系列の抵抗でいい感じとして、10kΩと27kΩのフィードバック抵抗にしました。

VPPの非反転増幅回路

そうすると、PWMが100%の時で出力電圧が12.2Vとなります。

続いて同様にVDDも設計します。VDDが6V程度になるためには非反転増幅回路のゲインは2倍がいい感じです。

VDDの非反転増幅回路

PWMが100%の時で出力電圧は6.6Vとなります。

今回、オペアンプの出力にダイオードを追加して、電流の吸い込みはしないようにしました。Padaukマイコンは、プログラミングモードにするために、先にVPPをONし、後からVDDをONします。このVPPがONでVDDが0Vの状態の時に、マイコン内部でVPPからVDDへ大きな電流が流れてしまうそうです。そこで、VDDが0Vでも電流を吸い込まないように、オペアンプの出力にダイオードを追加しました。

基板に実装

設計した回路を基板に実装します。チップ部品を使っているので、とても小さく作れました。

動作の確認

ESP32のPWMを制御して、0から12Vまで0.5V刻みで出力した時のVPP出力の波形です。綺麗なステップ波形になっています。12V設定時の出力電圧は11.9Vと、ほぼ設定通りの出力です。

同様にESP32のPWMを制御して、0から6Vまで0.2V刻みの出力波形です。こちらも綺麗はステップ波形となっています。6V設定時の出力電圧は5.9Vとこちらもいい感じです。

回路の完成

ブレッドボードに回路を作り、回路の完成です。

スポンサーリンク

デバイスIDを読み取ってみる

setVPPVoltage(5.5);	//VPP=5.5V
delay(6);
setVDDVoltage(2.5);	//VDD=2.5V
delay(6);
sendData(0xA5A5A5A6,32);	//send 32bit
receiveData(&data,16);		//receive 16bit
Serial.printf("ID=%x\n",data);
setVDDVoltage(0.0);
setVPPVoltage(0.0);

VPP,VDDの電圧を設定できるようにプログラムを修正しました。これでデバイスIDが読み取れるはずです。それでは実行してみましょう。

デバイスIDを読み取ってみる

おおお!!デバイスIDのAA1が読み取れました!

スポンサーリンク

フラッシュROMの内容を読み取ってみる

sendData(addr,13);	//addr 13bit 
PDA_INPUT();
PCK_UP();
delayMicroseconds(5);
receiveData(&data,14);		//receive 14bit
Serial.printf("%04x",data);
PDA_OUTPUT();

今度はフラッシュROMの内容を読み取ってみましょう。

PFS154は、13ビットのアドレスを送信すると、そのアドレスの内容の14ビットを返します。アドレス空間は0x000から0x7FFまであります。
それでは、全ての領域をダンプしてみましょう。

PFS154のフラッシュROMをダンプ

何も書き込んでいないので全て0x03FFが返ってきます。

0x7ED- 0x7EF に何か書いてある

最後に近い0x7ED〜0x7EFに何かしら書いてあります。キャリブレーションデータでしょうか?

何も書き込んでいないで、正しく読めているかわかりませんが、ROMの最後に何かデータがあるので、とりあえずダンプできていそうです。

スポンサーリンク

さて次回は

ESP32をUSBデバイスのマスストレージに設定して、ダンプした結果をパソコンから読み取れるようにしたいと思います。