别被IIC总线给坑了~

别被IIC总线给坑了~_第1张图片

正文


大家好,我是bug菌~

1

I2C通信理解

很多朋友在进行IIC通信协议开发的时候比较迷茫,一方面是可能长时间没怎么用了,相关的知识有所忘却,也算正常,不过如果重新围着通信时序图看来看去,那还是比较麻烦的,比如IIC的起始电平条件、停止电平条件、以及数据保持即更新条件等等:

别被IIC总线给坑了~_第2张图片

虽然每个器件对IIC通信的波形要求不是太相同,但IIC的通信时序容忍度非常高,基本上常规范围的通信参数和驱动都是通用的。

IIC数据的传输过程,在SCL通信同步时钟节拍的控制下,主机发送数据主动使得总线电平发生变化,供从机检测接收,而当从机接收到数据以后接着主动的拉低SDA来作为应答信号通知主机,如果没有拉低则表示非应答。

之前很多朋友都不太理解IIC的主机是怎么检测到从机应答的,似乎从SDA线上的波形看都好像是主机发送出来的,所以在进行通信波形解析的时候一定要注意区分信号到底是主机还是从机在处理。

2

IIC数据帧

对于通信的应用,重要的并不是所谓的电平变化,当然也不是说不重要,毕竟有时候通信不稳定还得从原始波形进行分析,但是大部分应用开发人员更多的是要了解如何传递数据帧,掌握好数据帧的传递过程和方式。

不同厂商的数据帧稍微有所差异,比如7位地址、8位地址和10位地址,但总体上都是大同小异,大家可以参考对应的芯片手册进行学习,这里以最常用的7地址位跟大家介绍一下:

IIC是一种主从通信方式,通信发起者为主机,主要熟悉三种数据帧传递过程:

1、单次或连续向从机写数据

别被IIC总线给坑了~_第3张图片

注意如上仅仅只是数据帧传递,类似于我们平时的串口通信,而至于通信数据域内的数据含义,是由通信双方共同约定即可,也就是所谓的应用层协议的制定了。

2、单次或连续向从机读数据

别被IIC总线给坑了~_第4张图片

读数据的过程主机发送的读写标志位发生变化,在数据部分从机主动控制总线发送数据给主机,然后主机来进行应答,刚好与IIC写数据相反。

3、通讯过程读写切换

别被IIC总线给坑了~_第5张图片

在通信过程中需要进行读写切换时不需要发送停止,而是应答以后重新发一次起始和从机地址及读写状态,接着进行下面的数据处理即可。

3

IIC通信别忘了上拉

对于IIC总线不要忘记通信IO上拉,上拉主要是保证信号线在空闲的状态保持高电平,也就是逻辑1,。

同时IIC总线采用的是一种开漏输出的架构,通信线上的器件可以将线路的电平拉低,即逻辑0;但是无法主动将线路拉高到逻辑1,所以上拉必不可少。

所以为了确保通信线上能够提供足够的驱动能力,同时也不能导致信号失真,上拉电阻阻值的选择尤为重要。

4

上拉电阻怎么选?

上拉电阻该怎么选呢?那影响因素可就多了~

1、通信的总线长度

通常通信线路越长,电阻要稍微大一点。

2、通信的总线材质

如果总线提供的容性负载较高,要适当减小电阻,以加快信号的变化时间。

3、通信的速率

适当降低上拉电阻,提高驱动电流,加快电平反应速度。

具体情况就具体分析和折中去选择上拉电阻了,最后就是注意电平上的匹配,避免损坏芯片~

最后

      好了,今天就跟大家分享这么多,如果你觉得有所收获,一定记得点个~

bug菌唯一、永久、免费分享嵌入式技术知识平台~

别被IIC总线给坑了~_第6张图片

推荐专辑  点击蓝色字体即可跳转

☞  MCU进阶专辑 ded811cc383b6361388a63c83ff4d0d0.gif

☞  嵌入式C语言进阶专辑 bd2bb75608c3137c9ccdcdde9e2c5585.gif

☞  “bug说”专辑 5ad3a9166bf29dafe718a89c280da8a5.gif

☞ 专辑|Linux应用程序编程大全

☞ 专辑|学点网络知识

☞ 专辑|手撕C语言

☞ 专辑|手撕C++语言

☞ 专辑|经验分享

☞ 专辑|电能控制技术

886d2871358093aa4b15005e7b8ab92e.gif

你可能感兴趣的:(单片机,嵌入式硬件)