在线时间43 小时
UID3492434
注册时间2019-6-1
NXP金币0
该用户从未签到
中级会员
 
- 积分
- 404
- 最后登录
- 2022-6-10
|
本帖最后由 yaomeng0725 于 2019-7-10 16:32 编辑
大神们,我使用KEA128的硬件I2C读写AT24C04EEPROM失败,具体表现如下:
前八位传输的是1010 0000,到了第九位没有得到EEPROM的ACK回复,红圈部分,应该是低电平,现在是高电平。我的总线时钟是20MHz,按照手册上面描述:波特率=总线时钟/(mul*SCL),我这个寄存器赋值0x1e,mul=1 scl=192 波特率=104K 其实想调整到100K,但是SCL没有合适的值。请各位看看这是为什么。
I2CX_F寄存器
- void AT24CXX_WriteOneByte(unsigned int WriteAddr,unsigned char DataToWrite)
- {
- I2C_Start(I2C0);
- I2C_WriteOneByte(I2C0,0XA0);//发送器件地址0XA0,写数据
- I2C_IsReceivedAck(I2C0);
- I2C_WriteOneByte(I2C0,WriteAddr);
- I2C_IsReceivedAck(I2C0);
- I2C_WriteOneByte(I2C0,DataToWrite); //发送字节
- I2C_IsReceivedAck(I2C0);
- I2C_Stop(I2C0);//产生一个停止条件
- // systick_delay_ms(10);
- }
- AT24CXX_WriteOneByte(0X3F,0X3E);
复制代码 __________________________________________________________________________________________________________________________从立创商城上买了5个AT24C04,终于可以收到ACK了,但是接受到的是0xFF。请各位看图。
- AT24CXX_WriteOneByte(0x37,0x37);
- AT24CXX_WriteOneByte(0x38,0x38);
- ReadBuffer=AT24CXX_ReadOneByte(0x37);
- delay_ms(10);
复制代码 我先写了两个数据,然后又读了其中的一个。结果是0XFF
- unsigned char AT24CXX_ReadOneByte(unsigned int ReadAddr)
- {
- unsigned char temp;
- I2C_Start(I2C0);
- I2C_WriteOneByte(I2C0,0XA0); //发送器件地址0XA0,写数据
- I2C_IsReceivedAck(I2C0);
- I2C_WriteOneByte(I2C0,ReadAddr);
- I2C_IsReceivedAck(I2C0);
- I2C_Start(I2C0);
- I2C_WriteOneByte(I2C0,0XA1); //进入接收模式
- I2C_IsReceivedAck(I2C0);
- I2C_ReadOneByte(I2C0,&temp,I2C_SEND_NACK);
- I2C_Stop(I2C0);//产生一个停止条件
- return temp;
- }
复制代码 上面是读数据的代码,用的KEA128的I2C库。请各位帮忙看看。
最佳答案
给你发个我的代码
//******************************************************************************
//******************************************************************************
void Init ...
|
|