您好!
我将一个 M24C08 I2C EEPROM 连接到 CM。
我能够从 EEPROM 写入和读取数据。
然而、当完成对数据块的读取时、EEPROM 需要从主器件获得一个 NACK。
我无法确定如何为 EEPROM 生成 NACK 条件。
此外、没有生成停止条件。
结果是读取数据后、SDA 线保持低电平、CLK 线处于高电平。
I2C 总线卡滞。
您能否解释一下如何正确读取块段、如何生成停止条件、以及如何向 EEPROM 发送 NACK?
void m24c08_Read_Data(uint8_t index, uint8_t * dest, uint32_t len)
{
uint16_t i;
// Read Byte - Select address.
I2C_setSlaveAddress(I2C0_BASE,M24C08_ADDRESS,I2C_MASTER_WRITE);
I2C_putMasterData(I2C0_BASE, index * 4);
I2C_setMasterConfig(I2C0_BASE, I2C_MASTER_CMD_SINGLE_SEND);
// Send restart.
SysCtl_delay(2400);
// Send Read command
I2C_setSlaveAddress(I2C0_BASE,M24C08_ADDRESS,I2C_MASTER_READ);
I2C_setMasterConfig(I2C0_BASE, I2C_MASTER_CMD_BURST_RECEIVE_START);
SysCtl_delay(1200);
for(i=0; i < len; i++) {
I2C_setMasterConfig(I2C0_BASE, I2C_MASTER_CMD_BURST_RECEIVE_CONT);
SysCtl_delay(1200);
dest[i] = I2C_getMasterData(I2C0_BASE);
}
// I2C_setMasterConfig(I2C0_BASE, I2C_MASTER_CMD_BURST_RECEIVE_FINISH);
I2C_setMasterConfig(I2C0_BASE, I2C_MASTER_CMD_BURST_RECEIVE_ERROR_STOP);
}