STM32
直播中

李继明

7年用户 1089经验值
私信 关注
[问答]

为什么i2c无应答主机还发送数据?

通常被寻址的接收器在接收到的每个字节后,除了用CBUS 地址开头的数 据,必须产生一个响应。当从机不能响应从机地址时(例如它正在执行一些实时函数不能接收或发送),从机必须使数据线保持高电平,主机然后产生一个停止条件终止传输或者产生重复起始条件开始新的传输
以上是i2c协议
版主的程序中等待应答,如果没有应答返回0,接着发送数据,并没有停止发送,对返回值也没有继续操作,这样会不会有错误?
u8 AT24CXX_ReadOneByte(u16 ReadAddr)
{      
u8 temp=0;                     
IIC_Start();   
if(EE_TYPE>AT24C16)
{
  IIC_Send_Byte(0XA0);    //发送写命令
  IIC_Wait_Ack();
  IIC_Send_Byte(ReadAddr>>8);//发送高地址
  IIC_Wait_Ack();   
}else IIC_Send_Byte(0XA0+((ReadAddr/256)<<1));   //发送器件地址 0XA0,写数据
IIC_Wait_Ack();  
    IIC_Send_Byte(ReadAddr%256);   //发送低地址
IIC_Wait_Ack();     

回帖(2)

张秀芳

2019-11-4 08:48:07
你觉得该怎么写?
写出来测试一下,好用不?
举报

李川

2019-11-4 09:02:32
不好意思,没看仔细,IIC_Wait_Ack()里面有stop函数,
举报

更多回帖

发帖
×
20
完善资料,
赚取积分