IIC通信两点线搞多设备,老规矩乱套了?看懂操作逻辑
前几天看电子课讲通讯方式,发现个有意思的事。以前用串口传数据得一根根线连设备,设备越多线路越复杂,好像蜘蛛网一样糟心。后来有个叫IIC的协议出来了,用两根线就能控制一堆设备,还不会相互干扰,感觉像变魔术似的。
IIC这东西工作时分清楚了。一条线管时间节奏叫时钟线,另一条管数据叫数据线。两根线平时都保持高电平状态,也就是一直开着。开始传输数据时,先让时钟线不变,数据线突然往下掉,这就算发了个开始信号。

设备地址是8位编码,每个设备都有自己的号码。列如24C02芯片地址是1010000,主控发这个序列过去就能找到它。发完地址还得确认设备在不在听。如果设备收到了就回个0,表明收到,要是没准备好会回1,这样主控才知道要不要重发。
写数据的时候,先确定写哪里。寄存器地址占8位,所以能存256个位置。假设计算机里选的是0X01位置,就把数据塞进去。每次写完设备都会回个信号,确认收到了。最后发个停止信号就结束一整个动作。

读数据跟写类似,但要注意两个地方。第一是得两次发设备地址,第一次确定设备,第二次告知要读还是写。操作位要改成1,不然读不出来。有次调试时没改这个,数据一直读不出来,折腾好久才发现。
IIC用得多的是芯片级通信,像传感器、存储器这些。好处是线路少,节省空间也便宜。但速度比不上用四根线的SPI,适合不太讲究速度的地方。

实则这协议也不算复杂,就是步骤多,容易漏。列如发完数据没发停止信号,总线会被锁死,后面设备都等着接不上。我上次做实验就这样,结果程序卡死了,重启好几次才解决。
智能家居用这个协议挺合适,列如温度计、灯光模块连主控,都不用布太多线。工厂设备也可能用,但可能由于速度不够会选别的方案。总之记住两根线搞定多个设备的关键就是地址和正确发信号,差一步都能让整个系统趴窝。






