RX231 でのコード生成を利用した、RSPIモジュールの利用方法について(データのアクセス単位で混乱しています)

解決しました。ありがとうございます。

最後のページにまとめの記載と資料を添付してあります。

【このスレッドでの問題解決点】

RXマイコンでCS+を用いたコード生成機能を利用したRSPIモジュールでの通信

RXはシングルマスタ

/*************************************************/

 

 

お世話になります。

先の質問でのSPIモジュールの動作については解決したのですが

データのアクセス単位で混乱しており、相談できる相手が近くにいませんので

再度質問の投稿をした次第です。

 

【詳細】

① 繋いでいる温度センサが動かないので、ロジックアナライザにて確認を行った。

② 温度センサは初めに、コマンドバイト0x54を送り初期化を行い、次にダミーデータ2バイトを送信すると、温度データを13bitで返す

③ ダミー送信は1[s]毎に行うので、その時に温度情報を受信する

 

【問題点】

初期化コマンドを送信しないと、センサは0x00、0x00の温度データを返すのだが、この状態である。

そして以下を調べた。

① 初期化バイトの送信が送信できない( 0x00)の送信となる

② ダミーコマンドは、状態把握ため以下を試したところ

     SPIsend_cmd[0]=0x86;

     SPIsend_cmd[1]=0x53;

 ロジアナ上では

 0x86 , 0x00

 と表示されたので、何かアクセス単位のズレが生じている可能性を考えた。

 

③ 1バイト送信を行う時(センサ初期化コマンド送信)に、SPI送信関数の引数に2バイト以上を指定

  してもエラーが発生しないことからも、アクセス単位を疑っている。

  コマンド定義の型を変更したり様々な条件で試した。

 

/*** 以下コード抜粋

【RSPI初期化関数】

・フレーム数:1

・シーケンス長:1

・バッファアクセス単位:ワード単位

・転送方向:MSBファースト

 ・データ長:8ビット

【送受信関数】

・定義

MD_STATUS R_Config_RSPI0_Send_Receive(uint32_t * const tx_buf, uint16_t tx_num, uint32_t * const rx_buf){

     MD_STATUS status = MD_OK;     

     if (tx_num < 1U)

     {
          status = MD_ARGERROR;
     }

     // 引数以上のバイト数を指定するとエラーが返るはずがエラーにならない

     else
     {
          /* Initialize the global counters */
          gp_rspi0_tx_address = tx_buf;
          g_rspi0_tx_count = tx_num;
          gp_rspi0_rx_address = rx_buf;
          g_rspi0_rx_length = tx_num;
          g_rspi0_rx_count = 0U;

     /* Enable transmit interrupt */
     RSPI0.SPCR.BIT.SPTIE = 1U;

     /* Enable receive interrupt */
     RSPI0.SPCR.BIT.SPRIE = 1U;

     /* Enable error interrupt */
     RSPI0.SPCR.BIT.SPEIE = 1U;

     /* Enable RSPI function */
     RSPI0.SPCR.BIT.SPE = 1U;
     }

     return (status);

}

 

・使用時

// 初期化コマンド送信なので一度のみ

uint8_t ondo_cmd[1]

ondo_cmd[0]=0x54;

err = R_Config_RSPI0_Send_Receive(ondo_cmd,1,ondo_cmd_rcv);

 

//温度データ取得なので1[s]に1回

uint8_t SPIsend_cmd[2];

SPIsend_cmd[0]=0x86;
SPIsend_cmd[1]=0x53;

err = R_Config_RSPI0_Send_Receive(SPIsend_cmd,2,SPIrcv_cmd);

 

【まとめ】

SPIモジュールは動いています。したがって上述の通り、データの渡し方が何か勘違いを

していると思うのですが、私の頭がヒートアップし過ぎて堂々巡りです。

何かアドバイスを頂けると幸いです。

Parents
  • しんちょろすさん、こんにちは。NoMaYです。

    少し脱線する話なので聞き流して頂ければと思いますが、RSPIに関しては何かハードウェアマニュアルに記載が無いタイミングのズレがあるように感じています。最初に感じたのは、以下のスレッドに関わった時(詳細は思い出せませんが違和感を感じたことは覚えています)なのですが、実は今回も違和感を感じている箇所があります。いずれ調べてみようかな(別スレッドを立ててみようかな)、と思い始めています。(あと、ハードウェアマニュアルの記載漏れと思しき箇所もあるようです。)

    今回感じている違和感: 通常転送とバースト転送を比べるとバースト転送に腑に落ちない遅延がある、、、
    (確かにアイドル割り込みの中でソフトウェアで送信許可RSPI動作許可ビットを落としているので遅くなるのは分かるけれど)


    以前にRSPIのタイミングに関して違和感を感じたスレッド: 違和感の詳細は思い出せませんが、、、
    『RX65NでRSPIを使ったがSPIのタイミングの生成ができない』
    japan.renesasrulz.com/cafe_rene/f/forum5/4978/rx65n-rspi-spi

    ハードウェアマニュアルの記載漏れと思しきもの: バースト転送の最後のSSLネゲート遅延が漏れているような、、、

Reply
  • しんちょろすさん、こんにちは。NoMaYです。

    少し脱線する話なので聞き流して頂ければと思いますが、RSPIに関しては何かハードウェアマニュアルに記載が無いタイミングのズレがあるように感じています。最初に感じたのは、以下のスレッドに関わった時(詳細は思い出せませんが違和感を感じたことは覚えています)なのですが、実は今回も違和感を感じている箇所があります。いずれ調べてみようかな(別スレッドを立ててみようかな)、と思い始めています。(あと、ハードウェアマニュアルの記載漏れと思しき箇所もあるようです。)

    今回感じている違和感: 通常転送とバースト転送を比べるとバースト転送に腑に落ちない遅延がある、、、
    (確かにアイドル割り込みの中でソフトウェアで送信許可RSPI動作許可ビットを落としているので遅くなるのは分かるけれど)


    以前にRSPIのタイミングに関して違和感を感じたスレッド: 違和感の詳細は思い出せませんが、、、
    『RX65NでRSPIを使ったがSPIのタイミングの生成ができない』
    japan.renesasrulz.com/cafe_rene/f/forum5/4978/rx65n-rspi-spi

    ハードウェアマニュアルの記載漏れと思しきもの: バースト転送の最後のSSLネゲート遅延が漏れているような、、、

Children
No Data