RL78G1Cの3線シリアル I/O(マスタ送受信)について

こんにちはptanと申します。

初投稿で至らぬ点がございますがご容赦ください。

RL78G1CをCS+の環境で開発を行っております。 シリアルアレイユニットのCSIを使って4線のSPI通信を行いたいと考えております。

現在、通信がうまく行われていません。SIOmnにデータを書き込めることは確認できていますが、スレーブ側のデータがSIOmnに読み込めていない(0xFFの応答)状況です。

スレーブ単体は正常に応答していることは確認できております。RL78G1C単体も別プログラムにおいてシリアルアレイユニットのIIC通信を正常に行えることを確認できております。

配線やプログラムなど試行錯誤しておりますが解決することができません。CSIのAPI関数について( 「* __near 変数」や 「* 変数」の役割、割込み等)基本的な部分を含め、詳しくご教授いただきたいです。

また、RL78G1Cの3線シリアル I/O(マスタ送受信)を4線SPI通信として使う場合について詳しい資料やサンプルコード等があれば教えていただきたいです。

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

  • チョコです。

    まずは、RL78/G12のアプリケーション・ノートを参照されることをお勧めします。

    「RL78/G12 シリアル・アレイ・ユニット(CSI マスタ通信) Rev.1.10 - Sample Code」

    ルネサスのTOPページで「RL78/G12 CSI」で検索すると、以下のようになります。これが、目的のものです。

    これは、SPIのマスタとしての使い方を示したものです。ただし、Cのプログラムではなく、アセンブラ記述のものです。当然ながら、「CSIのAPI関数」の情報はありませんが。

    まずは、アプリケーション・ノートを読んでみてください。RL78のCSIを使ったCSIのマスタとしての使い方についてのヒントになるかと思います。

    実際に動作させようとされているプロジェクトのzipファイルを添付していただければ、それに対してコメントは可能です。また、スレーブに何を使おうとしているのでしょうか。

    以上

  • チョコさん

    ptanです。

    返信ありがとうございます。アプリケーションノートで勉強いたします。

    スレーブにはMLX90363という磁気センサを使う予定です。

    プロジェクトは現在手元にないので後ほど添付させていただきます。

  • チョコさん

    ptanです。

    追加で質問失礼いたします。

    SPI通信を使ってスレーブID(0xE5)を読みだすのみのプログラムを作っております。R_CSI00_Send_Receive内のSIO00に書き込んだ後にブレークポイントを設けて動かすと通信ができて(0xE5の応答)、ブレークポイント設けずにR_CSI00_Send_Receiveを動かすと通信ができなくなります(0xFFの応答)。その原因がわかりません。

    IC:RL78/G1C,デバックツール:E2Lite,スレーブ:ADXL345(加速度センサ)

  • チョコです。

    プロジェクトのその部分だけでもいいので、zipファイルで添付してもらえませんか。

    どこにブレークポイントを設定して、どのような処理の流れで通信できないかが分かりかねます。

    また、波形は確認されたでしょうか。波形があればそれも参考になります。

  • チョコです。

    単に想像なのですが、R_CSI00_Send_Receive関数を呼び出した後に、通信完了を確認していないのではないでしょうか

    ブレーク中にも通信は行われているので、その間に通信が完了していて、正しい結果が読み出されているのでは。

    具体的な処理手順が分からないので、想像の域を越えませんが。

  • チョコさん

    ptanです。

    波形を確認したところ、クロックが発生していませんでした。

    周辺機能-クロック発生回路の設定でRTC,インターバルタイマ動作クロックを供給に設定したところ、クロックが発生し、通信を行うことができました。それ以外変更した場所はないのですが、原因が何だったのかわかりません。

    何か知見がありましたらご教授願いたいです。