初级会员

- 积分
- 63
- 金钱
- 63
- 注册时间
- 2017-7-13
- 在线时间
- 13 小时
|
1金钱
RT1052 的I2c 向24C02中写数据时错误。
1、使用例程写入多个数据没问题。
u8 AT24CXX_WriteOneByte(u16 WriteAddr,u8 DataToWrite)
{
u8 status=0;
u8 writedata=0;
writedata=DataToWrite;
//ÅäÖÃI2C xfer½á11ìå
at24cxx_xfer.slaveAddress=AT24C02_ADDR; //é豸μØÖ·
at24cxx_xfer.direction=kLPI2C_Write; //D′èëêy¾Y
at24cxx_xfer.subaddress=(u32)WriteAddr; //òa¶áè¡μļÄ′æÆ÷μØÖ·
at24cxx_xfer.subaddressSize=1; //μØÖ·3¤¶èò»¸ö×Ö½ú
at24cxx_xfer.data=&writedata; //òaD′èëμÄêy¾Y
at24cxx_xfer.dataSize=1; //D′èëêy¾Y3¤¶è1¸ö×Ö½ú
at24cxx_xfer.flags=kLPI2C_TransferDefaultFlag;
if(LPI2C_MasterTransferBlocking(LPI2C1,&at24cxx_xfer)==kStatus_Fail)
status=1;
delay_ms(6); //AT24C02D′ÖüÆú×î′ó5ms£¬ËùòÔÕaàïòaóDÑóê±
return status;
}
//ÔúAT24CXXàïÃæμÄÖ¸¶¨μØÖ·¿aê¼D′èëÖ¸¶¨¸öêyμÄêy¾Y
//WriteAddr :¿aê¼D′èëμÄμØÖ· ¶Ô24c02Îa0~255
//pBuffer :êy¾Yêy×éê×μØÖ·
//NumToWrite:òaD′èëêy¾Yμĸöêy
void AT24CXX_Write(u16 WriteAddr,u8 *pBuffer,u16 NumToWrite)
{
while(NumToWrite--)
{
AT24CXX_WriteOneByte(WriteAddr,*pBuffer);
WriteAddr++;
pBuffer++;
}
}
在实际使用中调用函数:AT24CXX_Write(u16 WriteAddr,u8 *pBuffer,u16 NumToWrite); 试验是没问题的。但是 函数AT24CXX_WriteOneByte(u16 WriteAddr,u8 DataToWrite) 中有个10Ms的延时,这样造成1次写入多个数据时, 出现500ms的等待时间,造成使用体验不好。 所以我更改为这样:
u8 AT24CXX_WriteNumByte(u16 WriteAddr,u8 *DataToWrite,u8 len)
{
u8 status=0;
u8 writedata=0;
// writedata=DataToWrite;
//ÅäÖÃI2C xfer½á11ìå
at24cxx_xfer.slaveAddress=AT24C02_ADDR; //é豸μØÖ·
at24cxx_xfer.direction=kLPI2C_Write; //D′èëêy¾Y
at24cxx_xfer.subaddress=(u32)WriteAddr; //òa¶áè¡μļÄ′æÆ÷μØÖ·
at24cxx_xfer.subaddressSize=1; //μØÖ·3¤¶èò»¸ö×Ö½ú
at24cxx_xfer.data=DataToWrite; //òaD′èëμÄêy¾Y
at24cxx_xfer.dataSize=len; //D′èëêy¾Y3¤¶è1¸ö×Ö½ú
at24cxx_xfer.flags=kLPI2C_TransferDefaultFlag;
if(LPI2C_MasterTransferBlocking(LPI2C1,&at24cxx_xfer)==kStatus_Fail)
status=1;
delay_ms(10); //AT24C02D′ÖüÆú×î′ó5ms£¬ËùòÔÕaàïòaóDÑóê±
return status;
}
但是发现写入数据不正确。 仿真时发现调用:LPI2C_MasterTransferBlocking(LPI2C1,&at24cxx_xfer)时, 运行不对。
谁能帮忙看看是什么原因。
谢谢!
|
|