IIC通信

SCL线分析:CPU对时钟线具有绝对控制权,时钟信号始终由主机发送到从机,因此可以将时钟线输出配置为推挽输出或开漏输出。

SDA线分析:主机通过SDA线来执行操作,如通过数据总线来进行寻址,读写操作。只有主机需要接受从机数据时,才会将总线控制权给从机,否则总线均由主机掌控。

数据线不推荐配置为推挽输出。由于只有一根数据线,主机与从句的SDA口均有有输入输出两种状态。

推挽输出:当主机与从机均处于输出状态时,如果主机输出高电平从机输出低电平,会出现短路状态。

如上图,相当于上下两个开关同时导通。

因此使用推挽输出需要十分注意协调好主机从机的输入输出时机。

开漏输出:在推挽输出的基础上去除上管。需要输出低电平时,下管导通,强下拉输出低电平。需要输出高电平时,下管断开,引脚悬空。这样设计不会因为主机从句没有协调好而产生短路。

为了避免引脚悬空,接一个上拉电阻到电源,因此输出高电平时为弱上拉。

以下为IIC的基本时序单元:

为什么要释放SDA:

主句与从计的SDA均配置为开漏输出模式,具有线与功能。一旦有设备输出低电平,总线即为低电平。

如果主机不释放SDA,主机输出低电平,则无论从机发送什么数据,总线始终为低电平,主机也就无法识别接收到的数据了。

释放SDA后,从机想发送低电平就拉低总线,发送高电平就释放总线,主句根据总线的高低电平就能识别从机发送的是什么数据了。

接收应答:通过应答位来判断主机是否愿意继续接受数据,若主机不接收数据则从机交还控制权。

主机发出读命令后立马调用接收数据时序,此时没有指定读出哪个寄存器的数据。电路默认读出当前地址指针的数据。

当前地址指针:系统将所有寄存器分配到一个线性区域,上电后当前地址指针默认指向0x00位置。一旦对寄存器进行读写操作,当前地址指针就会自动移动到下一个位置去。

例如:在0x01处写入数据后,调用当前地址读时序,此时电路在当前地址指针的指引下会自动寻找到0x02位置,然后读出数据。

系统调用指定地址写的部分时序,将目标地址发送出去,但不进行写入操作,当前地址指针不移动。这时,当前地址指针就指向目的地址,再调用当前地址读时序读出目的地址的数据。

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值