お世話になっております。
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になるのか、何処に原因があるのかわかりません。
リードするタイミングでしょうか。お手数をおかけしますが、ご教示願います。
※ コードの作成では、過去スレッドのつくしさんの回答を参考にさせていただきました。
LEON様
SPTEFに変えて試してみましたところ、さらに摩訶不思議な状態になってしまいました。
それが下図です。
なんと、3線式で、全ての処理を終えてからチップセレクトを1にしているはずなのに、コマンド(0x05)を送信したところで強制的にポートが1に変わり、受信用に出しているはずのクロックも出なくなるという状態になりました。コマンドを送出したあとの命令が全部無視された状態です。(?o?;)これって何??
画像をよく観察すると、どうもSPIのバスラインを初期化しているように見えます。
ソースは、次の通りです。
試験用に入れた命令のコメントアウトがあちこちにあるため、読みにくいソースになってしまっていますが、ご容赦願います。
スレーブに送出するコマンドと、受信用に送出するときに入れていたIDLNFをSPTEFに変更したところ、上図に示す波形になってしまいました。
//// FRAM ステータスレジスタ 読み込み//
Y_RSPI0_Start(); PORTC.PODR.BIT.B4 = 0; // チップセレクト -> FRAM
RSPI0.SPDR.WORD.H = 0x0005; // データの送信 // dummy = RSPI0.SPSR.BYTE; while(RSPI0.SPSR.BIT.SPTEF == 0); // 送信完了待ち // while(RSPI0.SPSR.BIT.IDLNF == 1); // 送信完了待ち
RSPI0.SPDR.WORD.H = 0x0000; // 受信用ダミー送出 // dummy = RSPI0.SPSR.BYTE; while(RSPI0.SPSR.BIT.SPTEF == 0); // 送信完了待ち // while(RSPI0.SPSR.BIT.IDLNF == 1); // 送信完了待ち
while(RSPI0.SPSR.BIT.SPRF == 0); // 受信バッファフルの確認 // dummy = RSPI0.SPDR.WORD.H;
// RSPI0.SPSR.BIT.SPTEF = 1; // 送信バッファエンプティフラグのクリア // dummy = RSPI0.SPSR.BYTE; // while(RSPI0.SPSR.BIT.SPRF == 0); // 受信バッファフルの確認
FRAM_READ_STR = RSPI0.SPDR.WORD.H; // RSPI0.SPSR.BIT.SPRF = 1;
PORTC.PODR.BIT.B4 = 1; // チップセレクト 解除 PORTF.PODR.BIT.B7 = 0;
Y_RSPI0_Stop();
パールマンさん、こんにちは。どうも始めまして。藁を少し足してみました。・マイコンの破損/不良・基板の破損/不良・基板のパターン設計のミスRX113とFRAMを切り離して、MISOA信号線のロジアナを繋いでいた箇所をLowに落として、マイコンのMISOA端子を単なる入力ポートに設定して読んでみる、というのを試すのはどうでしょうか?パールマンさんwrote:>MISOAの配線がはずれているのか?とも考えましたが、それもないようです。>※ バスに正しい信号が出ていて、マイコンに入っていないとしたら、配線しか疑うところがない。>困った。リカルドさんwrote:>>困った。> RX113もRSPIも知らないけど、困っているようだから。> 「藁をも掴む」の藁回答です。>・通信速度を下げる。速い方が良いと言うので安易に速くすると、トラブルの元>・プルアップが必要な信号ではないか>・電源電圧と速度の依存性は無いか>・CPUの処理速度が速いと、ステータスが確定する前のステータスを読む事がある。 ...以降略...>・通信の場合、最初のデータはゴミの事が多い。受信だったら、ゴミデータを読んでデータが空になった後が正しいデータとか。 ...以降略...