单片机iic总线问题
发布网友
发布时间:2022-04-22 18:32
我来回答
共1个回答
热心网友
时间:2023-11-15 20:43
I2C总线理解上的难点就是在于
ACK和NACK的使用上,估计你就没看明白I2C协议。简要的给你说下:ACK的时候,SCL=1,表示时钟拉高,增加Delay是为了等待SDA的数据回传(这时master的SDA是输入态,slave的SDA是输出态,SDA==0
即表示Slave响应正确)。ACK主要出现在Command、Address、Data数据传输时。
而NACK主要是在读数据后,结束位前出现,这时Master的SDA为输出,Slave的SDA为输入,SDA需要输出‘1’,告知Slave即将读操作结束。
反观你的代码,ACK中强加Delay不是不行,但很难做的通用兼容。建议考虑判断Sda状态,同时需要有错误退出机制。
最后,你还是再看下I2C
Specification
吧,另外,I2C总线是OC门,注意这个特点,应用很灵活。
IIC总线的应答信号问题
1、首先IIC通信要分清主机与从机的关系,在主机对从机进行写操作时,一般是在传送完一个数据之后单片机就进入检测应答信号状态:先将两个脚置位SDA=1;SCL=1;然后在一定时间内不断检测SDA脚的电平状态,比如说你弄个循环for(i=255;i>0;i--){..;if(...)break;...}进行不断判断,当SDA的...
51单片机的iic通信问题,求助啊
IIC总线的时序,好像是:最高频率在400KHz。单片机指令的执行时间,速度快,所以要加延时。停止函数,是在SCL=1期间,SDA出现上升,那么SDA先要为0,这个0,要在SCL=0实现。
51单片机模拟IIC总线问题
假设你有两台或者以上的S3C2410,单片机作为主机,然后单片机发送数据,所有S3C接收(接收的前提是他的接收端口上获得IIC的开始信号,你可以选择利用中断进行检测),然后你在软件里可以预先设置好每台S3C的地址,即接收单片机的前8BIT,然后对照地址,一样的话就开始接收接下来的信息,没有就放弃这个通信,这...
如何解决I2C器件死锁的问题?
广州致远电子ARM核心板使用IIC设备时,遇到总线死锁是如何让总线死锁恢复呢,常用方法如下:(1) 尽量选用带复位输人的I2C从器件,从I2C总线死锁产生的原因可以发现I2C总线死锁的一个必要条件是主设备复位了而从设备没有复位。如果从设备选用带复位输入的芯片,将主从设备的复位信号连接在一起,当外部产生...
C51单片机模拟IIC总线,应答函数的疑问
应答是接收设别自动产生的,不一定是从机。在IIC上除了开始,停止和重复开始外,所有数据都在在时钟的低电平变化的,也就是为高后,数据就应该稳定了。所以如果是模拟总线,应先有下降沿,再设为输入,然后读ACK,如果是从机的应答,是自动产生的,是作为数据通信正确的判断标志,为了可靠,是要判断的...
单片机模拟IIC总线的应答信号问题
1.应答信号SDA是在SCL的上升沿变化为0的;2.读操作的应答信号和写操作的应答信号都由从设备驱动。可参考“I2C总线协议规范”,网上搜一下即可。
关于iic总线。看过很多资料,很多都相互矛盾。在主机读取数据之前,是否...
我的理解是,读数据的时候,是从机控制总线,因此必须提前把sda释放(也就是拉高)。否则从机将不能改变总线。sda为1后,主机控制scl=1,然后,从机根据自己要发送的数据选择将sda置为1或0(即在scl=1时,从机改变sda)。而在发送数据时,主机控制总线,在scl=0时,sda被主机改变;scl=1时,sda...
单片机IIC总线,为什么编程时不用定义sda和scl ?reg52的document里面也没...
但不知你是从哪看到的程序,是什么程序?如果是C程序,肯定是有定义的,而这个定义是不在reg52.h 的头文件中的,需要自己来定义的。如果是别人写的程序,那一定是有的,一是:在自己写的头文件中定义的,应该有一个自己写的头文件。二是:可以在主程序的前面用sbit 来定义就行的。
单片机模拟IIc总线通信
scl=0;delay();sda=1;delay();写完数据的停止标志 for(i=0;i<8;i++){ scl=1;delay();k=(k<<1)|sda;scl=0;delay();} return k;} 读取8位数据,即k值,完成后同样要给停止标志
IIC总线的应答信号怎样理解
1、首先IIC通信要分清主机与从机的关系,在主机对从机进行写操作时,一般是在传送完一个数据之后单片机就进入检测应答信号状态:先将两个脚置位 SDA=1;SCL=1;然后在一定时间内不断检测SDA脚的电平状态,比如说你弄个循环for(i=255;i>0;i--){..;if(...)break;...}进行不断判断,当SDA...