はじめまして、Takuと申します。
現在I2Cを利用してのEEPROMの書き込み、読み出しを行うプログラムを作成しているのですが
読み出しがうまく行かず困っています。そもそも書き込みができているのかが…
よろしければアドバイスをお願い致します。
使用統合開発環境 CS+ for CA,CX
使用製品 MTK-RL78/G14
使用EEPROM型名 R1EX24512ASAAS0A
/*書き込み部*/ i2c_write_buf[0] = 0x00; /*アドレス上位8bit*/ i2c_write_buf[1] = 0x00; /*アドレス下位8bit*/ i2c_write_buf[2] = data; /*データ1byte*/ R_IICA0_Master_Send(WRITE_WAVE, i2c_write_buf, 3, 100); R_IICA0_StopCondition();
/*読み出し部*/ i2c_write_buf[0] = 0x00; i2c_write_buf[1] = 0x00; R_IICA0_Master_Send(WRITE_WAVE, i2c_write_buf, 2, 100); R_IICA0_Master_Receive_Restart(READ_WAVE, i2c_read_buf, 1, 100); R_IICA0_StopCondition();
※マスタ送信/受信コールバック時にストップコンディションは生成していません。
チョコ様 返信ありがとうこざいます。
r_iica0_callback_master_sendendあるいはr_iica0_callback_master_receiveendの実行
↓
ストップコンディションの生成
書き込み待ち あるいはポーリングでの完了待ち
この様な流れでよろしいでしょうか。
R_IICA0_Master_Receive_Restartはこのような処理を行っています。 japan.renesasrulz.com/.../6699 MD_STATUS R_IICA0_Master_Receive_Restart(uint8_t adr, uint8_t * const rx_buf, uint16_t rx_num, uint8_t wait) { STT0 = 1U; /* set IICA0 start condition * /* Wait */ while (wait--) { ; } /* Set parameter */ g_iica0_rx_len = rx_num; g_iica0_rx_cnt = 0U; gp_iica0_rx_address = rx_buf; g_iica0_master_status_flag = _00_IICA_MASTER_FLAG_CLEAR; adr |= 0x01U; /* set receive mode */ IICA0 = adr; /* receive address */ return (MD_OK); }