シリアルフラッシュメモリからのデータ読み出しについて (お助けください)

お世話になっております。

MCU:RX113

開発環境:e2 Studio (CCRX)

Micron社のシリアルフラッシュメモリ(SPI接続、MT25QL128)からデータを読み出すところで、どうにもわからない状態になってしまいました。

 

● フラッシュメモリからのデータ読み出しのコード

void FLASH1_R(void){

 volatile unsigned char dummy;
 uint8_t cnt;
 uint16_t dummy2;

 RSPI0.SPDCR.BYTE = 0x0000;
 RSPI0.SPSCR.BYTE = _00_RSPI_SEQUENCE_LENGTH_1; // 0 -> 0 -> 0...

 Y_RSPI0_Start();
 dummy32 = RSPI0.SPDR.LONG; // 誤動作の確認用
 dummy32 = RSPI0.SPDR.LONG; // 誤動作の確認用
 PORTC.PODR.BIT.B0 = 0; // チップセレクト -> フラッシュメモリ

 while(RSPI0.SPSR.BIT.SPTEF == 0);
 // READ コマンド送信 ( 送信バイト数:1、データ:0x03 )
 RSPI0.SPDR.WORD.H = 0x0003; // データの送信
 dummy = RSPI0.SPSR.BYTE;
 while(RSPI0.SPSR.BIT.IDLNF == 1); // 送信完了待ち
 dummy2 = RSPI0.SPDR.WORD.H; // データレジスタ(送信)を読んで、あける

 RSPI0.SPDR.WORD.H = 0x0000; // 受信アドレス(3)
 dummy = RSPI0.SPSR.BYTE;
 while(RSPI0.SPSR.BIT.IDLNF == 1); // 送信完了待ち
 dummy2 = RSPI0.SPDR.WORD.H;

 RSPI0.SPDR.WORD.H = 0x0000; // 受信アドレス(2)
 dummy = RSPI0.SPSR.BYTE;
 while(RSPI0.SPSR.BIT.IDLNF == 1); // 送信完了待ち
 dummy2 = RSPI0.SPDR.WORD.H;

 RSPI0.SPDR.WORD.H = 0x0000; // 受信アドレス(1)
 dummy = RSPI0.SPSR.BYTE;
 while(RSPI0.SPSR.BIT.IDLNF == 1); // 送信完了待ち
 dummy2 = RSPI0.SPDR.WORD.H;

 for(cnt = 0; cnt < 256; cnt++){
  RSPI0.SPDR.WORD.H = 0x0000; // 受信用ダミー
  dummy = RSPI0.SPSR.BYTE;
  while(RSPI0.SPSR.BIT.IDLNF == 1); // 送信完了待ち
  while(RSPI0.SPSR.BIT.SPRF == 0); // 受信バッファフルの確認
  TC_TX_DATA[cnt] = RSPI0.SPDR.WORD.H;

 }


 PORTC.PODR.BIT.B0 = 1; // チップセレクト 解除
 Y_RSPI0_Stop();

}

コードとしましては、チップセレクトで指定したメモリチップの0番地から256バイトを読み出すだけのコードです。

ところが、動かしてみますとハングアップ状態になるので、ロジアナでチェックしてみたところ、下図にしめすように、データを受信した後もクロックを送出し続けるというおかしな動作をしておりました。

 

なにか間違いをしていると考えているのですが、どうにもわかりません。

どのような原因が考えられるでしょうか。お手数をおかけしますが、ご教示お願いします。

Parents Reply
  • わわいです
    コンパイルオプションで、インフォメーションメッセージも出すように設定しましょう
    これでたいていのケアレスミスのたぐいは引っ掛けてくれます
    まあ、この件では、、ワーニングぐらい出てそうですが
Children
No Data