欢迎来到天天文库
浏览记录
ID:6553264
大小:138.84 KB
页数:7页
时间:2018-01-17
《响应和不响应机制》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、I2C的应答和非应答,如何理解?发布时间:2007-11-2713:05:01技术类别:ARM需要确认注册邮箱后才能下载,立即确认我的邮箱A:应答是I2C非常重要的机制,是不一定要弄清。它在工作中涉及的范围包括总线仲裁(多主)、正常的数据通信。这个问题在常见总线里是比较特别的,应当深入详细地了解。让我们先整理一下这个问题。1 确认应答和非应答的定义和解释:·应答:是一个低电平信号。·非应答:是一个高电平信号,也许,叫做应答非更合适。·两个信号的明显不同是来源不同。应答信号是当前从器件发出的,而非应答信号是由当前主器件发出,再者方向是相反的。·应答或非答的时钟,都由当前主器件发生。·(这
2、句出自何立民的《I2C总线应用系统设计》…………)原述:“应答信号在第9个时钟上出现,接收器输出低电平为应答信号(A),输出高电平则为非应答信号(/A)”,“由于某种原因,被控器不产生应答时,如被控器正在进行其它处理无法接收总线上的数据时,必须释放总线,将数据线置高电平,然后主控器可通过产生一个停止信号信号来比终止数据传输。”“当主控器接收数据时接收到最后一个数据字节后,必须给被控器发送一个非应答位(/A),使被控器发送器释放数据线,以便主控制(注:应当是主控器,不是主控制)发送停止信号从而终止数据传输。”图1 I2C应答规则.gifI2C通信协议简介(2013-01-1710:48:
3、03)转载▼标签:分类:通讯协议杂谈摒弃复杂的情况,这里只对I2C做简单的介绍。一、I2C总线的一些特征:•只要求两条总线线路一条串行数据线SDA一条串行时钟线SCL•每个连接到总线的器件都可以通过唯一的地址和一直存在的简单的主机从机关系软件设定地址主机可以作为主机发送器或主机接收器•它是一个真正的多主机总线如果两个或更多主机同时初始化数据传输可以通过冲突检测和仲裁防止数据被破坏•串行的8位双向数据传输位速率在标准模式下可达100kbit/s快速模式下可达400kbit/s高速模式下可达3.4Mbit/s•片上的滤波器可以滤去总线数据线上的毛刺波保证数据完整•连接到相同总线的IC数量只
4、受到总线的最大电容400pF限制二、I2C总线在传送数据过程中共有三种类型信号:开始信号、结束信号和应答信号。开始信号:SCL为高电平时,SDA由高电平向低电平跳变,开始传送数据。结束信号:SCL为高电平时,SDA由低电平向高电平跳变,结束传送数据。应答信号:接收数据的IC在接收到8bit数据后,向发送数据的IC发出特定的低电平脉冲,表示已收到数据起始和结束:boolI2C_Start(void){SDA_H;SCL_H;I2C_delay();if(!SDA_read)returnFALSE;//SDA线为低电平则总线忙,退出SDA_L;//拉低SDA线(当SCL为高电平时,SDA由
5、高电平向低电平跳变表示开始信号)I2C_delay();if(SDA_read)returnFALSE;//SDA线为高电平则总线出错,退出SDA_L;//数据为准备好时,拉低SCL线I2C_delay();returnTRUE;}发出开始信号之后,设备在数据未准备好时,拉低SCL线,这样主设备可知从设备未发送数据,从设备在数据准备好,可以发送的时候,停止拉低SCL线,这时候才开始真正的数据传输voidI2C_Stop(void){SCL_L;I2C_delay();SDA_L;I2C_delay();SCL_H;//SCL为高电平时,SDA由低电平向高电平跳变,结束传送数据I2C_d
6、elay();SDA_H;I2C_delay();}STOP在单主环境下非必要,但在多主环境就非常必要,主控总线的设备发送STOP后,通知总线其他设备总线已经闲置.voidI2C_Ack(void){SCL_L;I2C_delay();SDA_L;I2C_delay();SCL_H;I2C_delay();SCL_L;I2C_delay();}当主机作为接收设备时,主机对最后一个字节不应答,以向发送设备(从设备)标识数据传送结束。这是因为每次传输都应得到应答信号后再进行下一个字节传送。如果此时接收机应答了,那它就接收的不是最后一个字节了。如果是最后一个字节,第9个时钟周期发送的是非应答
7、信号(此时发送的不是应答信号就是非应答信号),最后发送停止信号。1)主发从收:主START->主发地址->从ACK->(主发数据->从ACK(循环))->主STOP或主START启动下一次传输这一过程中,主控SCL线,从只在ACK时控SDA线,其他时刻主控SDA线。2)主收从发:主START->从发地址->主ACK->(从发数据->主ACK(循环))->接受至最后一个字节时,主NACK->主STOP或主START启动下一次传输并非每传输8位数据
此文档下载收益归作者所有