ctime:2019-09-24 23:49:23 +0800|1569340163
标签(空格分隔): 硬件 技术
一些基础知识:
- I2C通信的两条信号线需要使用OD方式,连接上拉电阻
- I2C通信有主机、从机之分,主机即为发起通信的一方。主机未必是数据的发送方或者接收方
- I2C总线上可以有多个设备,每次仅能有一个设备控制总线
- 如何界定当前总线是由哪个设备控制?看当前哪个设备能拉低SCL\SDA信号线
- 理论上来说,所有I2C设备都可以拉低这两条信号线
- 但实际操作中,I2C设备会有个标志,标志当前总线是否由自己控制,如果不是自己控制,它是不会去拉低总线的
- I2C检测总线被占用的方式也很简单,检测SCL\SDA是否都是高电平,如果都是,则为空闲
死锁的发生:
- 一般死锁发生于主机与从机通信之间,出现意外的通信错误(可能是SCL、SDA与3V3 GND意外短路,或者通信速率太高,而总线电容太大,导致丢失某些bit),或者丢失ack
- 死锁即为:
- 主机认为此时应该由从机控制总线(即可能是主机在等待从机发送一定数量的数据,但中间丢了1个bit,没发送完)
- 从机认为此时应该由主机控制总线(即从机已经把数据发送完了,在等待主机接管总线)
- 双方互相等待,陷入死锁