IIC通信协议与时序单元

IIC通信(一主多从,多住多从,高位先行)

IIC通信可以使用软件模拟IIC实现协议,也可以使用硬件外设实现协议。对于硬件IIC,则芯片上有IIC控制器,有相应的IIC驱动电路,有专用的IIC引脚,通过调用I2C的控制函数即可,不需要用代码去模拟SCL、SDA的各种高低电平变化来实现IIC协议。对于软件IIC,则是芯片上没有IIC控制器,或者控制接口不够用时,无法使用硬件IIC实现协议的时候,通过使用任意IO口去模拟实现IIC通信协议,通过写代码去控制IO口的电平变化,模拟IIC协议的时序,实现数据帧传输。

在一主多从的控制中,只有被主机点名的从机才能控制IIC总线;在多主多从的控制中,总线上的任何一个设备都可以主动作为主机。

任何时候,主机都是完全控制SCL线,另外在空闲的情况下(未进行数据传输时)主机可以主动发起对SDA的控制。只有在从机发送数据和从机应答(发送数据)的时候,主机才会转交SDA的控制权给从机。对于SCL线地控制,在任何时候,从机对于SCL只能被动地读取。

所有设备的SCL和SDA连在一起,禁止所有设备输入强上拉的高电平,都配置成开漏输出模式,在一些情况下(比如总线), 多个GPIO口可能会连接在同一根线上, 存在某个GPIO输出高电平, 另一个GPIO输出低电平的情况. 如果使用推挽输出, 你会发现这个GPIO的VCC和另一个GPIO的GND接在了一起, 也就是短路了,如果换成开漏输出,VCC和GND多了个电阻, 这样电路就是安全。所以总线一般会使用开漏输出。SCL线传输方向是单方向的,由上图可以看出CPU的SCL可以设置为推挽输出,但是这里也用上拉电阻,在配置引脚的输入模式时,不论SDA与SCL统一把输入规定为上拉输入,或设置为浮空输入,再由上拉电阻形成上拉输入。

IIC时序单元:

起始条件:SCL高电平期间,SDA从高电平切换到低电平

终止条件:SCL高电平期间,SDA从低电平切换到高电平

起始终止

发送一个字节:SCL低电平期间,主机将数据位依次放在SDA线上(高位先行),然后释放SCL,即SCL被拉高,从机将在SCL高电平期间读取数据位,所以SCL高电平期间SDA不能有电平变化,需要在SCL进入高电平之前将电平改变好(将数据准备好),依次循环上述过程8次就发送了一个字节。

(发送一个字节)

接收一个字节:

接收一个字节的逻辑与发送一个字节相同,都是在SCL被拉升到高电平时候读取SDA数据,与发送一个字节不同的是主机在接收之前一定需要释放SDA线,即把SDA线的控制权交给从机。

(接收一个字节)

发送应答与接收应答:0表示应答,1表示非应答。

主机接收完一个字节,向从机发送一个应答。

(发送应答)

主机发送完一个字节,接收来自从机的应答

(接收应答)

所有从机都有一个从及设备地址,也就是所有IIC外设在生产时都拥有一个一个厂家分配的七位地址,为了防止雷同,一般iic外设的设备地址最后几位是可以人为修改的(通过设备上一些特定的引脚置不同的位来改变)

IIC通信的数据帧组成有:1位起始位,7位从机地址+1位读写位(高位先行),1位应答位,从机内部的的一个8位寄存器地址(高位先行),1位应答位,8位需要发送的数据,1位应答位,1位终止位。由IIC通信的数据帧组成可知。IIC通信协议下的指定地址写就是对于指定设备(设备地址),在指定地址(指定设备的寄存器地址)下,写入指定数据。

  • 30
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值