为什么说LCD无法通过四线iic来读取数据呢,iic不是可以通过控制读写位来确定是读取还是写入吗
你说的是标准iic
人家既然这么写了,说明虽然支持iic接线方式,但是没有开放读功能,不是个标准协议
这是芯片自己规定的,不支持
其实知道了开漏输出的作用, 这个问题不难回答
IIC协议支持多个主设备与多个从设备在一条总线上, 如果不用开漏输出, 而用推挽输出, 会出现主设备之间短路的情况. 至于为什么需要上拉电阻, 那是因为IIC通信需要输出高电平的能力.
为了实现多个主设备抢占总线时的仲裁.
IIC只有两根线(SCL和SDA), 怎么判断哪个主设备占用总线(当然是先来后到了). 假设主设备A需要启动IIC, 他需要在SCL高电平时, 将SDA由高电平转换为低电平作为启动信号. 主设备A在把SDA拉高后, 它需要再检查一下SDA的电平.
为什么? 因为线与. 如果主设备A拉高SDA时, 已经有其他主设备将SDA拉低了. 由于 1 & 0 = 0 那么主设备A在检查SDA电平时, 会发现不是高电平, 而是低电平. 说明其他主设备抢占总线的时间比它早, 主设备A只能放弃占用总线. 如果是高电平, 则可以占用.
这就是开漏输出在IIC通信中的另一个作用.
因此, 模拟IIC一定要将GPIO端口设置为开漏输出并加上上拉电阻.(硬件IIC会自动配置为开漏输出)
LCD通过四线IIC无法读取数据的原因是因为IIC总线是半双工通信,只能在发送或接收数据的时候使用,不能同时发送和接收数据。LCD作为从设备,只能在主设备发送数据给它的时候接收数据,而不能主动向主设备发送数据。
对于读取数据的操作,主设备首先会发送一个起始信号和从设备地址,然后等待从设备的应答信号。接着,主设备将主设备的方向位设置为读(R)模式,并等待从设备再次应答。在从设备发送数据的过程中,主设备仍然是接收模式,所以它不能发送应答信号。最后,主设备产生停止信号,传输结束。
总结起来,LCD无法通过四线IIC来读取数据是因为IIC总线的设计原理决定了主设备和从设备在传输数据时只能单向通信,而无法实现双向通信(即同时发送和接收数据)的功能。
因此,如果想要从LCD读取数据,可以考虑使用其他通信协议或接口,如SPI或UART。这些协议支持全双工通信,可以实现同时发送和接收数据的功能。