RSPIのMISOA信号とSPDRより読み取った値が異なってしまいます。

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

RX113のRSPIで、富士通のFRAMをスレーブデバイスとして接続し、通信を行っております。

無事にFRAMにステータスリードのコマンドを送信して、下図の通りバス上では正しいレスポンス(0x10)が返ってきました。

しかし、読み取ったSPDRの値はなぜか(0xFF)という値でした。

  

送受信のソースは次の通りです。

//
// FRAM ステータスレジスタ 読み込み
//
  Y_RSPI0_Start();
  PORTC.PODR.BIT.B4 = 0;           // チップセレクト -> FRAM

  while(RSPI0.SPSR.BIT.SPTEF == 0);
  // RDSR コマンド送信 ( 送信バイト数:1、データ:0x05 )

  RSPI0.SPDR.WORD.H = 0x0005;       // データの送信
  while(RSPI0.SPSR.BIT.IDLNF == 1);     // 送信完了待ち
  RSPI0.SPDR.WORD.H = 0x0000;       //  レスポンス受信用のクロック送出
  while(RSPI0.SPSR.BIT.IDLNF == 1);     // 送信完了待ち


  while(RSPI0.SPSR.BIT.SPRF == 0);      // 受信バッファフルの確認
  FRAM_READ_STR = RSPI0.SPDR.WORD.H;

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

 

バス上の信号(0x10)が何故0xFFになるのか、何処に原因があるのかわかりません。

リードするタイミングでしょうか。お手数をおかけしますが、ご教示願います。

 

※ コードの作成では、過去スレッドのつくしさんの回答を参考にさせていただきました。

Parents
  • LEONです。
    RX113は使ったこと無いですが、
    ・SPDRに書き込んだ後、SPTEFのクリア
    ・SPDRからリードした後、SPRFのクリア
    が必要じゃないんでしょうか。
  • 先のレスで、私の他CPU処理では SPTEF、SPRF をクリアしてましたが、必須ではないかもしれません。早とちりですみません。

    ・オシロのMISOAデータは、MSBから展開されますから 0x10 ではなく 0x02 のようです。
     富士通FRAMの型番が不明ですが、MB85RQ4MLの場合ステータスレジスタは以下の通りでした。
      Bit1:WEL:ライトイネーブルラッチ
       1=書き込み可能。WRENコマンドでセット
       0=書き込み不可。WRDIコマンドでもリセット

    以下は、既知設定済みかもしれませんが、お確かめ下さい。
    ・CPU側シングルマスタ/FRAM側シングルスレーブの設定?
    ・SPDRのワードアクセスの送信データ/受信データはLSB詰め。
    ・SPCMD0.LSBF=0 0:MSBファースト
    ・SPCMD0.SPB=0100~0111: 8Bit長
  • LEON様
    お世話になっております。

    いえ、気になさらないでください。
    > ・オシロのMISOAデータは、MSBから展開されますから 0x10 ではなく 0x02 のようです。

    はい、その通りです。2進と16進をごっちゃに書いてしまいました。0x02が正解です。

    > 以下は、既知設定済みかもしれませんが、お確かめ下さい。
    > ・CPU側シングルマスタ/FRAM側シングルスレーブの設定?
    > ・SPDRのワードアクセスの送信データ/受信データはLSB詰め。
    > ・SPCMD0.LSBF=0 0:MSBファースト
    > ・SPCMD0.SPB=0100~0111: 8Bit長

    はい。 CPU側はシングルマスタの設定です。(MSTRビット)
    接続されるデバイス(今回はFRAM)には、シングルスレーブなどを設定する機能はありましたでしょうか。
    そこは意識していなかったです。
    SPDRのワードアクセスは、ワードです。
    送信データのSPDRへの書き込みはハードウェアマニュアルに書かれている通りにLSB詰めで書いています。
    送信データは、0x0006と書いています。
    MSBファーストであること、8ビット長であることも確認いたしました。
  • パールマン様
    こんにちは、追加で確認ですが、
    全二重同期式シリアル通信(SPCR.TXMD = 0)でしょうか?
    お教え願います。
  • 今回使用しているFRAMの型番は、MB85RS512Tという512K(64Kx8)ビットのメモリです。
    メモリセルへの書き込み/読み出しの評価のために、まずはWRENコマンドを送信したわけです。
    その後、ステータスレジスタを確認しようとしたら、バスの波形と読み出しのデータが違っていたと…(涙)
Reply
  • 今回使用しているFRAMの型番は、MB85RS512Tという512K(64Kx8)ビットのメモリです。
    メモリセルへの書き込み/読み出しの評価のために、まずはWRENコマンドを送信したわけです。
    その後、ステータスレジスタを確認しようとしたら、バスの波形と読み出しのデータが違っていたと…(涙)
Children
No Data