采用串行总线技术可以使系统的硬件设计大大简化,系统的体积减小,可靠性提高,同时系统更容易更改和扩充
常用的串行扩展总线有:I2c总线,单总线,SPI总线,以及microwire、Plus等等
I2c总线只有两根双向信号线,一根是数据线SDA,另一根是时钟线SCL
I2c总线通过上拉电阻接正电源。因此I2C总线的设备都要接上拉电阻
当总线闲置的时候,两根线均为高电平,连接到总线上的任何一个器件输出的低电平,都将使得总线得到信号变低,及各个器件的SDA和SCL都是线与的关系
每个接入到I2C总线都有唯一的地址,主机与其他器件间的数据传送可以是由主机发送数据到其他器件,这时主机即是发送器,由总线上接收数据的器件称为是接收器。
在多主机系统中,可能同时由几个主机企图启动总线传送数据,为了避免混乱,I2C总线要通过总线仲裁,已决定由哪台主机控制总线
数据位的有效性
I2C总线进行数据传送时,时钟信号为高电平期间,数据线上的数据必须保持稳定,只有时钟线上的信号为低电平期间,数据线上的高电平和低电平状态才允许变化
起始信号和终止信号
SCL线为高电平期间,SDA线由高电平向低电平的变化表示起始信号,SCL线为高电平期间,SDA线由低电平向高电平变化表示终止信号
数据传送的格式
(1)字节传送与应答
每一个字节必须保证是8位长度,数据传送时,先传送的是最高位(MSB),每一个被传送的字节后面都必须跟随一位应答位,即(一帧共有9位),应答信号由从机发送给主机
每次数据传送总是由主机产生的终止信号结束,但是若主机希望继续占用总线进行新的数据传送,则可以不产生终止信号,马上再次发出起始信号对另一个从机进行寻址
在总线的一个数据传上过程中,可以有一下几种传送方式的组合方式
a,主机向从机发送数据,数据传送的方向在整个传送过程中不变
A表示应答,A非表示非应答,s表示其实信号,p表示终止信号
主机发送地址时,总线上的每一个从机都将这7位地址码与自己的地址进行比较,如果相同,则认为自己正在被主机寻址,根据R/T位将自己确定为发送器或接收器
从机地址由固定部分和可编程部分组成,可编程的部分决定了可接入总线该器件的最大数目。
由操作时序可知要进行必要的延时
起始操作示例代码:
void T2CStart(void) { SDA = 1; SomeNop();//大于微秒级别 SCL = 1; SomeNop(); SDA = 0; SomeNop(); }