RX62Tに外付けメモリとしてEEPROMを接続、通信を行うには

はじめまして。プログラミング初心者です。ご存じの方いらっしゃいましたら答えていただけると幸せます。

クロック同期式モードを使用してEEPROMと通信を行いたいです。(EEPROMはM95M01Dを使用しております。)

割込みを使わずに、一度EEPROMのステータスを読み、値を返す関数を作成しました。

下記のように書きました。別の通信ポートを使用してこの関数を呼び、画面出力しております。

EEPROMのデータシートより、ステータスレジスタ、b6 , b5 , b4 は必ず"0"が読めます。

オシロスコープで信号を確認すると、EEPROMの出力ポート、マイコンのRxD(PB6)のピンは"0"が16クロック分出力されていましたが、返り値は255となってしまいます。

送受信時のクロックは出力されており、TxD(PB5)からはEEPROMへのステータスレジスタリードの命令信号(0x05)が正しく出ているようです。

また、別のREAD命令やWRITE許可命令を送信すると、送信ポートから信号は出ており、クロックも必要数出力があるのですが、EEPROMからマイコンへの出力信号はHighに固定されたままになってしまいます。

  • 変な風に日本語変換されてしまっていたのでこちらに書きます。わかりにくくて申し訳ありません。

    やり方がわからず、、調べてからもう一度書きます。取り急ぎコピペしました

    //--- set PORTB ---//
    PORTB.DDR.BIT.B3 = 1;  //Chip Select
    PORTB.DDR.BIT.B5 = 1;  //TXD
    PORTB.DDR.BIT.B6 = 0;  //RXD
    PORTB.DDR.BIT.B7 = 1;  //clock out to EEP-ROM
    PORTB.ICR.BIT.B6 = 1;  //input buffer
    PORTB.DR.BIT.B3 = 1;         //Chip Select High = not active

    IOPORT.PFFSCI.BYTE = 0;  //select control mode

    //--- set SCI2 ---//
    //EEPROM
    SCI2.SCR.BYTE = 0x00 ; //初期値
    SCI2.SMR.BYTE = 0x82 ; //クロック同期式モード
    SCI2.SCMR.BIT.SDIR = 1; //MSB First
    SCI2.BRR = 55 ; // bps
    //SCI2.SCR.BYTE = 0x00 ; //送受信関数内でstart

    short readStatusData(void) {
    unsigned char readData=0;
    unsigned char receiveData;
    unsigned char dummyData;

    while( !SCI2.SSR.BIT.TEND  ){}; //wait until busy

    receiveData = SSCI2.SSR.BIT.ORER; 
    SCI2.SSR.BIT.ORER = 0; //

    SCI2.SCR.BYTE = 0xa1;
    PORTB.DR.BIT.B3 = 0; // CS = Low active

    SCI2.TDR = 0x05; //EEPROM Read Code
    while(! SCI2.SSR.BIT.TEND) {} //wait until send end

    SCI2.SCR.BYTE = 0x00;

    SCI2.SCR.BYTE = 0x50; //start receive data
    dummyData =SCI2.RDR;
    while(! SCI2.SSR.BIT.TEND) {} //wait until send end
    readData = (unsigned char)SCI2.RDR;
    while(! SCI2.SSR.BIT.TEND) {} //wait until send end

    PORTB.DR.BIT.B3 = 1 ; //CS = High ; Disable
    SCI2.SCR.BYTE = 0x00;

    return(readData);
    }