RX231でSPIのスレーブプログラム

RX231(R5F52318BDFP)を使用して、同じCPUで片方の基板を制御基板(SPI Master)と表示基板(SPI Slave)

基板として、SPI通信を簡易SPIを使用しての通信プログラムの作成を考えています。

SPI Masterは何度か作成しているのですが、SPI Slaveのプログラムを作成した経験がありません。

SPI Slaveのプログラムの作成方法やサンプルプログラムはありませんでしょうか?

Parents
  • チョコです。

    RXは使ったことはありませんが、誰もレスしないので、コメントします。

    表示素子が何か、表示がキャラクタかドットマトリクスかなどで必要な処理は異なります。単に表示基板と言うだけでは、サンプルプログラムなんてみつからないでしょう。

    最初にやるべきことは、スレーブが、機能を実現するためにどのようなデータ(またはコマンド)が必要かに対応した通信仕様を決めることではないでしょうか。通信仕様が決まれば、マスタは、その仕様を満足するために通信を行うことになるでしょう。

    I2Cと異なりSPIではスレーブ側の処理が間に合わないときの対策も決めておく必要があるかと思います。

    以上

Reply
  • チョコです。

    RXは使ったことはありませんが、誰もレスしないので、コメントします。

    表示素子が何か、表示がキャラクタかドットマトリクスかなどで必要な処理は異なります。単に表示基板と言うだけでは、サンプルプログラムなんてみつからないでしょう。

    最初にやるべきことは、スレーブが、機能を実現するためにどのようなデータ(またはコマンド)が必要かに対応した通信仕様を決めることではないでしょうか。通信仕様が決まれば、マスタは、その仕様を満足するために通信を行うことになるでしょう。

    I2Cと異なりSPIではスレーブ側の処理が間に合わないときの対策も決めておく必要があるかと思います。

    以上

Children
  • チョコさま

    応答ありがとうございます。

    表示基板側は7segやLEDを点灯させる基板で表示させる機能自体は実装して確認をしております。

    制御基板側で

    R_SCI0_SPI_Master_Send_Receive(Spi_tx_buf,2,Spi_rx_buf,2);

    を実行して、想定の波形がMOSI端子から出ている事はオシロで波形を確認できておりますが、

    スレーブにしている表示基板側で受信割り込み関数に入ってきません。

    受信をするとr_sci0_receive_interrupt関数が実行されるという認識で合っておりますでしょうか?

    環境は両方ともCS+でコード生成ツールを使用していて、簡易SPIでSCI0で設定しております。

    何から確認していけば良いかご教示をお願いします。

  • SPIの場合は、信号が4本あると思います。

    スレーブの場合、①SS、②SCK、③MISO、④MOSIを使用しますが、スレーブ側の①の信号をイネーブル状態にしているかを確認してください。通信を開始する前には必ずイネーブル状態にする必要があり、これをやらないとスレーブ側は動作しません。④の信号が正しく出力されているならスレーブがイネーブル状態でない可能性があります。簡易SPIの場合はこの信号を汎用ポート出力モードで制御する必要があります。通常Lowアクティブとなります。通信終了後は、Highに戻します。

    スマートコンフィグなどでドライバを実装している場合は、多分問題ないかとは思いますが、現象からすると怪しいので、念のためマスター側の初期化に関する処理を適切に呼び出しているかを確認しするといいかもしれません。

    通信開始前に、マスターからのSSがLowになっていれば、マスターからのクロック発生により、スレーブ側で受信割り込みが発生するはずです。

    それでもだめなら、スレーブの初期化にも問題がある可能性がありますので、そちらも確認するといいと思います。