iic串行总线:有两条线,一个数据线SDA,一个时钟线SCL,两条线都接上拉电阻,因而空闲状态,两条线均为高电压,它与其它与之
相连的器件是一种线与的关系,这点我们可以类比c语言的&&符号,意味着连接总线的任意器件只要为低电压,就会拉低总线
电压,连接到总线的器件都有唯一地址。
数据位有效性的规定:
时钟信号SCL为高电平时,数据信号SDA必须保持稳定。
时钟信号SCL为低电平时,数据信号SDA才允许变化。
起始信号和终止信号:(你可以观察到,此时SCL一直为高电平,数据信号定然不变,所以可以以此区别)
SCL线为高电平期间,SDA线由高电平向低电平的变化表示起始信号;SCL线为高电平期间,SDA线由低电平向高电平的变化
表示终止信号。(下降沿为起始信号,上升沿为终止信号)
在起始信号产生后,总线就处于被占用的状态;在终止信号产生后,总线就处于空闲状态。(了解就行)
接收器件收到一个完整的数据字节后,有可能需要完成一些其它工作,如处理内部中断服务等,可能无法立刻接收下一个字节,
这时接收器件可以将SCL线拉成低电平,从而使主机处于等待状态。直到接收器件准备好接收下一个字节时,再释放SCL线使之
为高电平,从而使数据传送可以继续进行。(其实这就是所谓的SCL为高电平时总线为空闲,为低电平总线为忙碌,该文字描述中,总线在忙于其它事物,所以拉低电压等待
当总线处理完事情时,拉高电压,表示总线空闲)
数据传送格式:
每一个字节必须保证是8位长度。数据传送时,先传送最高位(MSB),每一个被传送的字节后面都必须跟
随一位应答位(即一帧共有9位)
结束情况(反正都要发终止信号):
- 由于某种原因从机不对主机寻址信号应答时(如从机正在进行实时性的处理工作而无法接收总线上的数据),
它必须将数据线置于高电平,而由主机产生一个终止信号以结束总线的数据传送。
2.如果从机对主机进行了应答,但在数据传送一段时间后无法继续接收更多的数据时,从机可以通过对
无法接收的第一个数据字节的“非应答”通知主机,主机则应发出终止信号以结束数据的继续传送。
3.当主机接收数据时,它收到最后一个数据字节后,必须向从机发出一个结束传送的信号。这个信号是由对
从机的“非应答”来实现的。然后,从机释放SDA线(拉高电压),以允许主机产生终止信号。
数据帧格式:
一个数据帧为九位;
一字节加一为应答位;而那一字节又分为,前七位为从机地址(即主机发送信号的接收者),最后一位为传送方向位;
0为主机发送数据,1为主机接受数据;
如果发送不止一次:
若主机希望继续占用总线进行新的数据传送,则可以不产生终止信号,马上再次发出起
始信号对另一从机进行寻址。
每一次发送如果继续发送都要应答,最后结束一个非应答,然后一个终止
写入字节:
很正常;
读出字节:
记住前面有个伪写;
发送字节:是从高位开始读取,SDA=dat>>7;dat<<=1;
读取字节:从最低一位一位,先为dat扩展空间,dat<<=1;dat|=SDA;接受一位数据,循环八次(起始信号之后SCL=0,所以可以直接改变SDA信号)
来源:https://www.cnblogs.com/tanghaojie/p/11093561.html