This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
您好!
我将一个 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); }
您好 NIR、
我们的主要专家不在办公室、因此我将在明天稍后时间与您联系。
此致、
阿米尔·奥马尔
您好!
请尝试使用以下代码片段读取数据
I2C_setMasterConfig (I2C0_BASE、I2C_MASTER_CMD_BURST_SEND_START);
I2C_putMasterData (I2C0_BASE、index * 4);
I2C_setMasterConfig (I2C0_BASE、I2C_MASTER_CMD_BURST_SEND_CONT);
while (I2C_isMasterBusy (I2C0_BASE));
I2C_setSlaveAddress (I2C0_BASE、SLAVE_ADDRESS、I2C_MASTER_READ);
I2C_setMasterConfig (I2C0_BASE、I2C_MASTER_CMD_BURST_RECEIVE_START);
while (I2C_isMasterBusy (I2C0_BASE));
for (i=0;i<len;j++)
{
dest[i]=I2C_getMasterData (I2C0_BASE);
I2C_setMasterConfig (I2C0_BASE、I2C_MASTER_CMD_BURST_RECEIVE_CONT);
while (I2C_isMasterBusy (I2C0_BASE));
SYSCTL_DELAY (1200);
}
此致
西达尔特