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

お世話になります。

 

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

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

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

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

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

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

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

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

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

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

  • わわいです
    スレーブに接続するデバイスによってそこらへんの最適値は変わるもんなんで、それだけの情報ではなんともいえません。
    そのスレーブにつながるデバイスのデータシートをよく読んで、最適な設定を探してください
  • Takthysさん、こんにちは。NoMaYと申します。

    私は、かふぇルネで何度もRSPI関係のスレッドにリプライしていますが、実は1度も実際にマスタ⇔スレーブ間で通信させたことが無く、そういう人物のリプライだと念頭に置いておいて欲しいのですが、、、

    この「「0xF0」を書き込んだものを読みだそうと思ったら「0x78」で返ってきた」というのは、RSPCKとMOSI/MISOの極性(というか位相というかのたぐい)の問題では無く、ビットズレの問題ではないでしょうか?

    極性(位相)の問題であれば、変化途中のMISOの信号を拾ってしまって、読む度に値が変化するという現象になりそうな気がします。

    ビットズレの問題と発想を変えてみた場合、原因の可能性としては、RSPIは複雑な動作をするものですので、オシロで波形を観測してみて、「RSPIがこういう動作をするものならスレーブ側でクロック1つとして認識されてしまうよなぁ」とか「LSBファーストだったら想定外にスレーブから送信されたbit0をマスタが受信し損ねるよなぁ」とか、何か分かるかも知れないように思います。

    とはいえ、「読み出しをすると何も読み出せなくなります」と「ビットズレ」とで整合の取れる話でも無いところが、心苦しいところですが、、、([追記] 手始めには、オシロで0x00(もしくは、読み出せないとは0xFFのことかも知れませんが)以外の何かが返って来ているか確認してみる、ことでしょうか、、、)

  • Takthysさん、こんにちは。NoMaYです。

    > ([追記] 手始めには、オシロで0x00(もしくは、読み出せないとは0xFFのことかも知れませんが)以外の何かが返って来ているか確認してみる、ことでしょうか、、、)

    そういえば、以前に別スレッドでHiRoSanさんという方が試されていたことですが、MISOをVCCに繋いで0xFFが読めるか、逆にMISOをGNDに繋いで0x00が読めるか、を確認すると簡易にRSPI側に何かあるのかどうか分かるかも知れない、と思いました。もし読めないのであればRSPI側に何かありそうです、、、

  • Takthysさん、こんにちは。NoMaYです。

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

    読み出しとはいえ、何かしらアドレス(レジスタアドレス or メモリアドレス)を書き込む必要があるのではないかなぁ、と思い浮かんだのですが、アドレスの書き込みでも極性が反転していたりしないでしょうか?もしくは、そのことに対処しようとしてプログラムを改造した時に、アドレス書き込みとデータ読み出しの間で意図せずSSLがネゲートされてしまうようになったりとか、そういうことはないでしょうか?

  • こんにちは。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)
  • ×RX26T
    ○RX62T
    誤記申し訳ありません
  • わわいさん
    Takthysです。
    ご回答ありがとうございます。
    スレーブ側デバイスのデータシートを深堀してませんでした。
    参考にさせていただきます。
  • NoMaYさん
    Takthysです。
    ご回答いただきありがとうございます。
    ビットずれの観点からも調査してみたいと思います。
  • Hosさん
    Takthysです。
    ご回答いただきありがとうございます。
    知識不足で、WriteRead間でCPOLとCPHAを切り替えてはいけないということを知りませんでした。
    スレーブ側データシートを読み再調査したいと思います。
  • フォーラム管理人です。
    タイトルに「RX26T」との誤った記載がありましたので、私の方で「RX62T」に変更させて頂きました。

    以上、よろしくお願いします。