RX231 IIC通信 API関数について

はじめまして、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();
}

Parents
  • こんにちは。動きそうに見えますが不思議ですね。ウチで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);
    }
Reply
  • こんにちは。動きそうに見えますが不思議ですね。ウチで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);
    }
Children
No Data