はじめまして、KANと申します。
現在、RX231マイコンとEEPROM BR24G256(ROHM製)とでIIC通信を行い、データをやり取りしようとしています。
その際にスマートコンフィグレータから生成されるAPI関数にてデータの受信をしようとするために下記コードを実行したのですが、バッファとしている配列の先頭となるDATA[0]~DATA[3]の3byteにデータが受信されず、DATA[4]~DATA[34]には正常にデータが受信される結果となりました。データ読み取りの際のデータ数を減らしても先頭のデータが受信できない状態となっていました。
先頭のデータが受信できない原因としては何が考えられるでしょうか?それともAPI関数のR_Config_RIIC0_Master_Receiveがそういった仕様になっているのでしょうか?
尚、スレーブアドレス(SLAVE_ADDRESS)は0x50と設定しています。
初歩的な質問かもしれませんが、ご教授願います。
//TEMP_eep配列初期化 TEMP_eep[0] = 0x00; TEMP_eep[1] = 0x20;
F_eep = 1; R_Config_RIIC0_Master_Send_Without_Stop(SLAVE_ADDRESS, &TEMP_eep[0], 2);//読み込みアドレス指定
while (F_eep == 1) {//コールバック待ち nop(); } F_eep = 1; T_INI = 2;
R_Config_RIIC0_Master_Receive(SLAVE_ADDRESS, &DATA[0],35);//データ読み込み
while (F_eep == 1 && T_INI != 0) { nop(); }
こんにちは。動きそうに見えますが不思議ですね。ウチでRX231のテストに使っていたコードを貼り付けます。参考になるでしょうか?
MD_STATUS IIC_Restart(uint16_t addr, void *sp, uint16_t sbytes, void *rp, uint16_t rbytes) { MD_STATUS stat; g_iica0_txEnd = g_iica0_rxErr = 0; R_Config_RIIC0_Start(); if ((stat = R_Config_RIIC0_Master_Send_Without_Stop (addr, sp, sbytes)) == MD_OK) { while ((g_iica0_txEnd == 0) && (g_iica0_rxErr == 0)) { __nop(); } if (g_iica0_rxErr == 0) { if ((stat = R_Config_RIIC0_Master_Receive (addr, rp, rbytes)) == MD_OK) { while ((g_iica0_rxEnd == 0) && (g_iica0_rxErr == 0)) { __nop(); } } } } R_Config_RIIC0_Stop(); return ((g_iica0_rxErr == 0) ? stat : g_iica0_ErrStat); }