IC设计 IIC进阶

首先,iic支持多主机,多从机,所有的主从设备都连接在同一条sda和scl线上。两条信号线都使用开漏输出,支持线与。

多从机系统:

    当主机发起通信后,第一个字节首先发送地址信息和读写控制信号。每个从机都会接收到这个数据,从机比较这个地址,如果与自己的地址符合,则继续接下来的通信,否则不予理会,直到下一个启动信号来临后再次判断。

多主机系统:

在多主机系统中,sda和scl信号线都是双向端口。sda双向端口很容易理解,而scl设置为双向端口的目的是为了时钟同步。在多主机系统中,主机首先会检测总线是否被占用,可以通过起始信号和停止信号来标记总线状态。比如当主机在总线上检测到起始信号后(其他主机发送的),就标记为总线忙,在这期间不会请求通信,直到检测停止信号后,总线被标记为空闲,在空闲状态可以自由的发起通信。但是这样就能解决所有的主机仲裁问题了吗?

当总线空闲的时候,如果两个主机同时(时间相差很小)发起起始信号,这样上面的方案就行不通了。为了解决这种问题,首先就是时钟同步。总线上的时钟信号,是由两个竞争主机的驱动时钟信号线与而成,即SCK = SCK0 & SCK1,这就是时钟同步。所以这时候通信的时钟信号sck就不能用主机自己 产生的SCK0,而是总线上的时钟SCK。即主机会输出自己产生的SCK0,在总线上进行线与运算(开漏输出的必然结果),然后主机采集总线SCK,利用SCK控制时序。多主机的sck信号解决了,还有sda信号。当主机在SCK低电平期间改变输出sda信号后,会在SCK高电平期间采集sda信号,sda信号和sck信号一样,SDA = SDA0 & SDA1.比对一下是否和自己发送的一样,如果一样,则继续的发送数据,如果不一样则释放总线,放弃通信。如果两个主机都一样,则直到出现不一样的情况后竞争结束。由iic的仲裁机制可以看出,iic设备没有优先级一说,在两个主机发送数据不一样时,谁发送的是低电平,谁就夺得总线。   

时钟延展:

    时钟延展是从设备进行时钟延展。一般的iic时钟都是由主机产生,从机无法更改。但是为了使通信更加灵活,从机也可以控制sck。当从机在sck低电平期间发送数据时,如果数据没有准备好,sck就拉高了,那么数据就会错误。为了给从机充分的时间去准备数据,从机可以将sda拉低,直到数据准备好了之后再释放sck。这样会缩短sck的高电平持续时间,但在高电平期间,主要是进行数据的采集,可以灵活应用。

注意:一般情况下,在有多个设备可以更改sda信号时,设备必须使用从总线采集而来的sda信号,而不是自己产生的sda信号。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值