IIC通讯实现过程

iic(inter integrated circuit)两根线,一条时钟线scl和一条数据线sda,所以是半双工通信,主从模式,支持一对多。
假设主机a给从机b发数据(a.scl接b.scl,a.sda接b.sda),根据应用,a可以同时接b,c,d。空闲时,sda和scl上的电平都为高电平。
起始和停止
起始条件s:当scl高电平时,sda由高电平向低电平转换;停止条件p:当scl高电平时,sda由低电平向高电平转换。起始和停止条件一般由主机产生,总线在起始条件后处于busy的状态,在停止条件的某段时间后,总线才再次处于空闲状态。
空闲时sda和scl上的电平都为高电平。a先把sda拉低,等sda变为低电平后再把scl拉低(以上两个动作构成了i2c的起始位),此时sda就可以发送数据了,与此同时,scl发送一定周期的脉冲,sda发送数据和scl发送脉冲的要符合的关系是:sda必须在scl是高电平时保持有效,在scl是低电平时发送下一位(scl会在上升沿对sda进行采样)。
传输与响应
一次传8位数据,8位数据传输结束后a释放sda,scl再发一个脉冲(这是第九个脉冲),触发b将sda置为低电平表示确认(该低电平称为ack)。最后scl先变为高电平,sda再变为高电平(以上两个动作称为结束标志),如果b没有将sda置为0,则a停止发送下一帧数据。
整体时序
i2c总线上的每个设备都有唯一地址,数据包传输时先发送地址位,接着才是数据。一个地址字节由7个地址位(可以挂128个设备)和1个指示位组成(7位寻址模式),0表示写,1表示读。一般芯片手册i2c地址都是7位地址,有些与某个引脚的电平相关,主机控制最后读写位。实际项目一般都是采用i2c库,有的库要求传入的是8位的写的地址,有的是7位,由接口函数再区分读写补位。当然,最愚蠢的办法是从0到255定时循环读某个寄存器地址,读到正确值时的地址就是正确的从机地址。
一般情况下使用i2c库,除了配置从机地址,其他的起始、结束等时序等其实不太关注,只需要配置时钟频率,一般看从机最大支持多少,以及主机的系统时钟,太高会偶尔出现错误,再没有时间要求的情况下,时钟越低越稳定。


日本Konami与假Open Bionic合作,推出了一款3D打印的仿生手臂
采用网络仿真技术软件实现计算机实验教学系统的构建
镇压骁龙835?LG G6确认内置铜管散热:下月发布
PCB工艺的一些小原则
固体绝缘材料的主要性能
IIC通讯实现过程
怎么在PWM调光的OLED屏幕上使用DC调光?
首款5nm 5G Soc!麒麟9000来袭:Mate 40 Pro首发
什么让医疗行业带来了新气象
你的废旧手机其实是一个未被发掘的宝藏
基于工业物联网平台打造的企业污水治理远程监控管理系统
物联网无线通信路由器内嵌花生壳PHTunnel,快速实现设备远程外网管理!
5G商用步伐的临近 一些新兴市场的数字化转型大潮势不可挡
新一代48V直流变换器介绍
五分钟了解之诺1E续航里程与驾驶体验
2005第六届中国国际机电产品博览会暨电子展
智能照明技术研讨会:世强与Silicon Labs推出多协议无线Mesh方案
LFP材料再次迎来市场曙光,但整体竞争压力依然突出
单端反激式开关电源电路
频谱定义及频谱资源的特性