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

3セントのPadaukマイコンPMS150Cにも書き込めるようになりました

スポンサーリンク

3セントマイコンのPMS150Cも書き込めるように、機能を追加しようと思います。

スポンサーリンク

機能を追加

IDを読み取る

setVppVoltage(5.0);	//Power ON
delay(5);
setVddVoltage(3.0);
delay(5);

sendData(0xA5A5A5A7,32);	//send write command
receiveData( &data , 26+12 );	//receive id

setVppVoltage(0.0);	//Power OFF
setVddVoltage(0.0);

まずは、デバイスのIDを読み取ってみます。PMS150Cは、ライトコマンドを送信し、26クロックした後に、12bitのIDが返ってきます。

PMS150CのIDである0xA16を取得できた

実行してみると、マイコンから0xA16の返信がありました。無事にIDを読み取ることができました。

ROMのデータをリードする

setVppVoltage(5);	//Power ON
delay(5);
setVddVoltage(2.5);
delay(5);

sendData(0xA5A5A5A6,32);	//send read command
sendData(address, 12);		//send address
receiveData( &data , 13 );	//receive data

setVppVoltage(0.0);	//Power OFF
setVddVoltage(0.0);

ROMのリードのプログラムを作ります。リードは、リードコマンドを送信後、12ビットのアドレスを送信して、13ビットのデータを受信します。

何も書き込んでいなので、0x1FFFが返ってきました。

ワンタイムROMの終わり周辺に何か書いてある

ROMの終わりのところ、0x3F6と0x3FFC,3FFFに何か書いてあります。これもキャリブレーションの値なのでしょうか?しかし、これによって、ROMからデータがリードできていることがわかりました。

ワンタイムROMに書き込む

setVppVoltage(8.0);	//Power ON
delay(5);
setVddVoltage(4.3);
delay(5);

sendData(0xA5A5A5A7,32);	//write read command
setVppVoltage(10.5);
delay(5);
setVddVoltage(5.8);
delay(5);

uint16_t data[] = {0x000, 0x001};
sendData(data[0], 13);		//send data
sendData(data[1], 13);
sendData(address, 12);		//send address
PCK_CLOCK();

PCK_UP();			//8 pulses
PDA2_HIGH();
delayMicroseconds(30);
PDA2_LOW();
delayMicroseconds(30);
PCK_DOWN();
delayMicroseconds(4);
PCK_CLOCK();

setVppVoltage(0.0);	//Power OFF
setVddVoltage(0.0);

書き込みは、少し複雑です。電圧もリードの時よりも高くなっています。

0xA5A5A5A7のライトコマンドを送信後、VDDとVPPを5.8V、10.5Vに上げます。

データは2ワードまとめて書き込みます。2ワード送信後、書き込む先頭アドレスを送信します。その後1クロック送出します。

その後、PDAピンを30us周期にON、OFFを8回行います。最後にクロックを1回送出して完了です。

アドレス0x0000に0,0x0001に1が書き込めた

実行してみましょう。ROMをダンプすると0番地と1番地に0と1が書き込まれています。

アドレスと同じ値を書き込んでみる

2ワード書けたので、全てのアドレスにアドレスと同じ値を書き込んでみました。全て正常に書き込めました。

これで、PMS150Cにもプログラムを書き込めるようになりました。

スポンサーリンク

Lチカプログラムを書き込む

プログラムを作る

それではLEDが点滅するプログラムを作りたいと思います。先日作ったPFS154用のプログラムを修正します。

[env:development]
platform = https://github.com/1500WK1500/platform-padauk.git ; ボードのリポジトリ
board = PMS150C ; 使うマイコンの選択
framework = easypdk ; ヘッダーとかを追加

extra_scripts = post:extra_script.py

platformio.iniのボード名を、PMS150Cに書き換えます。

#include <pdk/device.h>
#include 
#define LED_BIT         4 //PA4 6pin
#define turnLedOn()     PA |= (1 << LED_BIT)
#define turnLedOff()    PA &= ~(1 << LED_BIT)

void main() {
  //PDK_USE_FACTORY_IHRCR_16MHZ();
  PDK_SET_SYSCLOCK(SYSCLOCK_IHRC_16MHZ);
  CLKMD &= ~CLKMD_ENABLE_WATCHDOG;  // Disenable WDT

  PAC |= (1 << LED_BIT);          // Set LED pin as output

  while (1) {
    turnLedOn();
    for( uint32_t i=0 ; i<400000 ; i++)
        __nop();
    turnLedOff();
    for( uint32_t i=0 ; i<400000 ; i++)
        __nop();
  }
}

続いてmain.cファイルの8行目、PDK_USE_FACTORY_IHRCR_16MHZ();をコメントアウトします。

PMS150Cには内部高速オシレータのキャリブレーション値が存在しないためです。

その他はそのまま、1カ所だけ修正して保存し、コンパイルします。

プログラムを書き込む

インテルEHXファイルを書き込む

マイコンにプログラムを書き込みます。

書き込み機のドライブに、コンパイルでできたHEXファイルをドラッグ&ドロップします。

一瞬で書き込みが完了します。

電池をつなぐ

電池をつなぐと、LEDが点滅しました!

3セントマイコンPMS150Cにもプログラムが書き込めるようになりました!!

これで、10セントのフラッシュROMのPFS154と、3セントのワンタイムROM版のPMS150Cのどちらも開発が可能になりました。

スポンサーリンク

さて次回は

ブレッドボードで動作しているこの回路を、基板化したいと思います。