RX62TでRSPIによるSPI動作(4線式)全二重同期式シリアル通信について

お世話になります。

 

RX62TにてE1エミュレータを接続し、CS+forCCツールを使用しています。

SPI動作(4線式)で、全二重同期式シリアル通信を行い、RX62Tをマスタにして使用しています。

マスタからスレーブへの書き込みは問題なく行えたのですが

マスタへスレーブからの読み出し時に問題が発生しました。

「0xF0」を書き込んだものを読みだそうと思ったら「0x78」で返ってきたので

書き込み時は、CPHA(RSPCK位相設定ビット)を「0」にし

読み出し時は、CPHA(RSPCK位相設定ビット)を「1」にして

通信させたいのですが、読み出しをすると何も読み出せなくなります。

この現象の原因がわかる方、いらっしゃいましたら

ご教示いただけたら幸いです。

Parents
  • こんにちは。Hosです。

    今回送受信しているデータは以下となっていますので、1bit分のデータずれが発生しているようですね。

     0xF0(0b11110000)
     0x78(0b01111000)

    SPI通信ではCPOLとCPHAの組み合わせで、クロックの極性とサンプリングのタイミングを決定します。(組み合わせで4パターンあります)
    今回は書き込みと読み出しで、CPHAを変えてしまっているので書き込み時と読み出し時でサンプリングのタイミングに1/2RSPCK分のずれが発生します
    その結果として1bit分のずれが発生しているのではないかと考えます。

    通常、SPI通信をするときはCPOLとCPHAを書き込みと読み出しで切り替えることはしないと思います。(少なくとも自分が使ったことのあるデバイスでそのようなものはありませんでした)
    今回使用しているスレーブデバイスは本当に切り替えてしようするようなものなのでしょうか。
    わわいさんのおっしゃるように、スレーブ側のデータシートを確認することをお勧めします。

    なお、CPHAによるタイミングの変化については以下をご参照ください。
    RX62Tグループ、RX62Gグループ_ユーザーズマニュアル_ハードウェア編
     26.3.4.1 SPCMDm.CPHA ビット= 0 の場合
     26.3.4.2 SPCMDm.CPHA ビット= 1 の場合(m = 0 ~ 7)
  • Hosさん
    Takthysです。
    ご回答いただきありがとうございます。
    知識不足で、WriteRead間でCPOLとCPHAを切り替えてはいけないということを知りませんでした。
    スレーブ側データシートを読み再調査したいと思います。
Reply
  • Hosさん
    Takthysです。
    ご回答いただきありがとうございます。
    知識不足で、WriteRead間でCPOLとCPHAを切り替えてはいけないということを知りませんでした。
    スレーブ側データシートを読み再調査したいと思います。
Children
No Data