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

Padaukマイコンの書き込み機を作ろうと思います

スポンサーリンク

3セントマイコンのPadaukマイコンを使いたいので、書き込み機を作ろうと思います。

スポンサーリンク

Padaukマイコン

Padaukは台湾の半導体メーカーです。製造しているマイコンがとても安いと、以前有名になりました。

例えば、ワンタイムROMのPMS150Cは、1kワードのROM容量で、PWMも入っています。

PMS150Cは100個買うと一つあたり3セント

値段は1個あたり、なんと約3セント。たった5円と激安です。LEDを点滅させる回路だけでも、トランジスタやNOTゲートを使って回路を作るよりも、このマイコンを使った方が断然安く済みます。

PMS150CはワンタイムROMなので、一度プログラムを書き込んでしまうと消すことができません。PadaukではフラッシュROMタイプのマイコンも販売しています。

PFS154はROMもRAMも2倍

PFS154です。フラッシュROMになって、ROM容量もRAM容量もPMS150Cの倍です。PWMも3チャンネルになっています。

PFS154は10セント

価格はなんと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開発ボード
ESP32-S3を搭載した開発ボードです。USBシリアル変換IC接続のUSBと、ESP32-S3にダイレクト接続のUSB...

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 追加 続きはこちら