研究生
最后登录1970-1-1
在线时间 小时
注册时间2017-9-25
|
1火花
1.问题描述,一段IIC读写AT24C02的函数,有个地方不明白,下面的代码用红色字体标注出来了
/**
* @brief 在EEPROM的一个写循环中可以写多个字节,但一次写入的字节数
* 不能超过EEPROM页的大小,AT24C02每页有8个字节
* @param
*uint32_t I2C_EE_PageWrite(u8* pBuffer, u8 WriteAddr, u8 NumByteToWrite)
{
I2CTimeout = I2CT_LONG_TIMEOUT;
while(I2C_GetFlagStatus(EEPROM_I2Cx, I2C_FLAG_BUSY))
{
if((I2CTimeout--) == 0) return I2C_TIMEOUT_UserCallback(4);
}
/* Send START condition */
I2C_GenerateSTART(EEPROM_I2Cx, ENABLE);
I2CTimeout = I2CT_FLAG_TIMEOUT;
/* Test on EV5 and clear it */
while(!I2C_CheckEvent(EEPROM_I2Cx, I2C_EVENT_MASTER_MODE_SELECT))
{
if((I2CTimeout--) == 0) return I2C_TIMEOUT_UserCallback(5);
}
/* Send EEPROM address for write */
I2C_Send7bitAddress(EEPROM_I2Cx, EEPROM_ADDRESS, I2C_Direction_Transmitter);
I2CTimeout = I2CT_FLAG_TIMEOUT;
/* Test on EV6 and clear it */
while(!I2C_CheckEvent(EEPROM_I2Cx, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED))
{
if((I2CTimeout--) == 0) return I2C_TIMEOUT_UserCallback(6);
}
/* Send the EEPROM's internal address to write to */
I2C_SendData(EEPROM_I2Cx, WriteAddr);
I2CTimeout = I2CT_FLAG_TIMEOUT;
/* Test on EV8 and clear it */
while(! I2C_CheckEvent(EEPROM_I2Cx, I2C_EVENT_MASTER_BYTE_TRANSMITTED))
{
if((I2CTimeout--) == 0) return I2C_TIMEOUT_UserCallback(7);
}
/* While there is data to be written */
while(NumByteToWrite--)
{
/* Send the current byte */
I2C_SendData(EEPROM_I2Cx, *pBuffer);
/* Point to the next byte to be written */
pBuffer++;
I2CTimeout = I2CT_FLAG_TIMEOUT;
/* Test on EV8 and clear it */
while (!I2C_CheckEvent(EEPROM_I2Cx, I2C_EVENT_MASTER_BYTE_TRANSMITTED))
{
if((I2CTimeout--) == 0) return I2C_TIMEOUT_UserCallback(8);
}
}
/* Send STOP condition */
I2C_GenerateSTOP(EEPROM_I2Cx, ENABLE);
return 1;
}
这是一个多个字节写入的程序,pBuffer++; 已经表示指向下一个即将要写入到AT24C02的数据了,但是要写入到AT24C02内存的地址没有自增(代码没有体现出来),所以我认为应该要加上WriteAddr++;身边没有设备验证,还麻烦有操作经验的前辈回答一下,是不是要写上WriteAddr++;谢谢!
|
最佳答案
查看完整内容
EEPROM 的页写入
每写入一个数据都需要向 EEPROM 发送写入的地址,我们希望
向连续地址写入多个数据的时候,只要告诉 EEPROM 第一个内存地址 address1,后面的数
据按次序写入到 address2、 address3… 这样可以节省通讯的内容,加快速度。为应对这种
需求, EEPROM 定义了一种页写入时序。
根据页写入时序,第一个数据被解释为要写入的内存地址 address1,后续可连续发送 n 个
数据,这些数据会依次写入到内存中。其中 AT24C02 ...
|