OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3250|回复: 2

关于I2C应答信号

[复制链接]

6

主题

10

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
287
金钱
287
注册时间
2015-9-30
在线时间
25 小时
发表于 2015-10-27 18:56:14 | 显示全部楼层 |阅读模式
5金钱
老师您好,我想问一下关于IIC应答信号的一些问题。应答信号程序源码是这样的,它是带返回值的函数,我感觉这个函数的返回值在函数体里没怎么用上,能否改成空类型(void),把return语句去掉。我把函数改成空类型的,去掉return语句后,又把下面void AT24CXX_WriteOneByte(u16 WriteAddr,u8 DataToWrite),写一个字节的函数里面的最后延时10ms去掉(//delay_ms(10); ),j就不能得到源程序一样的效果。但如果不该为void类型,则去掉延时10ms,就能得到正确现象。
u8 IIC_Wait_Ack(void)
{
u8 ucErrTime=0;
SDA_IN();      
IIC_SDA=1;delay_us(1);   
IIC_SCL=1;delay_us(1);  
while(READ_SDA)
{
ucErrTime++;
if(ucErrTime>250)
{
IIC_Stop();
return 1;
}
}
IIC_SCL=0;
return 0;              


void AT24CXX_WriteOneByte(u16 WriteAddr,u8 DataToWrite)
{          
    IIC_Start();  
if(EE_TYPE>AT24C16)
{
IIC_Send_Byte(0XA0);    //·??????ü??
IIC_Wait_Ack();
IIC_Send_Byte(WriteAddr>>8);//·????????·
  }else
{
IIC_Send_Byte(0XA0+((WriteAddr/256)<<1));   
}  
IIC_Wait_Ack();   
    IIC_Send_Byte(WriteAddr%256);  
IIC_Wait_Ack();     
IIC_Send_Byte(DataToWrite);   
IIC_Wait_Ack();         
    IIC_Stop();/
//delay_ms(10);  
}

最佳答案

查看完整内容[请看2#楼]

   IIC_Wait_Ack()可以为空,但是不要在其程序里面调用IIC_Stop(),否则当执行下面的 AT24CXX_WriteOneByte()中的IIC_Wait_Ack()无响应返回后I2C总线是在空闲状态的,但是却需要执行IIC_Send_Byte(WriteAddr>>8);总线就乱了。没有起到错误检测或或纠错的目的,只会让错误更加恶化。 10mS的延迟不能去掉,根据数据手册可查出完成写入操作所需要的时间,大约需要10ms左右。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

0

主题

18

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
207
金钱
207
注册时间
2015-10-16
在线时间
71 小时
发表于 2015-10-27 18:56:15 | 显示全部楼层

   IIC_Wait_Ack()可以为空,但是不要在其程序里面调用IIC_Stop(),否则当执行下面的 AT24CXX_WriteOneByte()中的IIC_Wait_Ack()无响应返回后I2C总线是在空闲状态的,但是却需要执行IIC_Send_Byte(WriteAddr>>8);总线就乱了。没有起到错误检测或或纠错的目的,只会让错误更加恶化。
10mS的延迟不能去掉,根据数据手册可查出完成写入操作所需要的时间,大约需要10ms左右。

回复

使用道具 举报

6

主题

10

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
287
金钱
287
注册时间
2015-9-30
在线时间
25 小时
 楼主| 发表于 2015-10-30 09:14:19 | 显示全部楼层
谢谢老师,您辛苦啦!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-18 12:42

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表