3セントマイコンのPadaukマイコンを使いたいので、書き込み機を作ろうと思います。
Padaukマイコン
Padaukは台湾の半導体メーカーです。製造しているマイコンがとても安いと、以前有名になりました。
例えば、ワンタイムROMのPMS150Cは、1kワードのROM容量で、PWMも入っています。
値段は1個あたり、なんと約3セント。たった5円と激安です。LEDを点滅させる回路だけでも、トランジスタやNOTゲートを使って回路を作るよりも、このマイコンを使った方が断然安く済みます。
PMS150CはワンタイムROMなので、一度プログラムを書き込んでしまうと消すことができません。PadaukではフラッシュROMタイプのマイコンも販売しています。
PFS154です。フラッシュROMになって、ROM容量もRAM容量もPMS150Cの倍です。PWMも3チャンネルになっています。
価格はなんと10セント。たった15円です。これはなかなか面白そうなマイコンです。
しかし、書き込み機の入手性が悪く、価格もちょっと高めです。
このマイコン、あまりにも安価すぎるため、過去に海外のマニア達の注目を集めました。彼らはマイコンの書き込み機をリバースエンジニアリングして、フリーの書き込み機やソフトウェアを公開しています。
EEVblogのスレッドではリバースエンジニアリングするための白熱した議論によって、全てを読みきれないくらいスレッドが伸びています。
これら資料があることから、自分で書き込み機を作ってみようと思いました。
デバイスIDを読んでみる
EEVblogのスレッドを斜め読みしたところ、Padaukマイコンは型番毎に固有のIDが振られていることがわかりました。そこで、まずはそのIDを読み出してみたいと思います。
マイコンに対して読み書きするためには、VPPをONした後にVDDをONして、コマンドを送信するそうです。そこで、VPP,VDDを個別にONできるようにします。VPPは7.5Vが良いと言うようなことがスレッドに書いてあったので、とりあえず7.5VをDCDCコンバータで生成します。
制御のマイコンにはESP32を使います。ESP32のIOは3.3V、Padaukマイコンは5Vなのでレベル変換ICを使ってロジック電圧の変換を行います。
これらの回路をブレッドボードに構築しました。ESP32はこのボードを使っています。
ESP32-S3に内蔵されたUSBのデバイスとホストの両方を実験できるボードです。ピンヘッダの部分が細いでのブレッドボードを有効に利用できます。今回はUSBデバイスに設定して利用します。
続いてプログラムを用意します。
Padaukマイコンとの通信は、送信と受信を1本にまとめたSPIのような通信方法です。
ライターからマイコンへの通信時は、マイコンはクロックの立ち下がりエッジでデータが取り込みます。逆にマイコンからライターへの通信は、クロックの立ち上がりエッジでデータを取り込みます。
VPPVoltage(ON); delay(5); VDDVoltage(ON); delay(5); sendData(0xA5A5A5A6,32); //send 32bit receiveData(&data,16); //receive 16bit Serial.printf("ID=%x\n",data); VDDVoltage(OFF); VPPVoltage(OFF);
デバイスIDを読み出すには、ライターから0xA5A5A5A6のコマンドを送信し、その後16クロックでデバイスが応答するようです。そのようにプログラムを作りました。
それではコマンドを送信してみます。しかし応答は0xFFFFです。全てのビットがHighなので、マイコンが応答していなそうです。
オシロスコープで確認してみましょう。水色がデータ信号で、黄色がクロックです。波形は正しいそうですが、デバイスが応答していません。
Delayの待ち時間を追加したり変更したり、プログラムをいろいろ変えてみたのですが応答しません。1日格闘しましたが、応答が得られませんでした。
1日が終わろうとしていた時、そういえばEEVblogのスレッドに、プログラム時にはVDDを2.6Vにするといったようなことが書いてあったことを思い出しました。すぐに2.6Vの電源は用意できないので、とりあえずESP32で使っている3.3VをPadaukマイコンのVDDに供給してみます。
するとどうでしょう。マイコンが応答しました。応答は0xFAA1です。デバイスIDは下12bitで表すようなので、0xAA1です。これはPFS154のデバイスIDと一致します。プログラムには問題はありませんでした。
Padaukのマイコンは、書き込みや読み出しのために、VDDの電圧も変更する必要があるんですね。
PFS154のVPPとVDDに、どんな電圧が必要か調べてみました。これらの値は、free-pdkプロジェクトの中のfpdkicdata.cに書かれていました。
VDDもVPPも、複数の電圧が必要なことがわかりました。コマンド送信時と、その後のリードライトではVDD,VPPの電圧が変わるんですね。
ESP32から電圧設定可能な、可変電圧電源が2ch必要になりました。
さて次回は
ESP32から設定可能な可変電圧電源が必要なことがわかったので、次回はその可変電源を設計して、padaukマイコンからデータを読み取る実験をしたいと思います。
2024.9.5 追加 続きはこちら
コメント