I2C知识大全系列三 —— I2C驱动之单片机中的I2C

469 阅读2分钟

本文已参与 [新人创作礼] 活动,一起开启掘金创作之路。​

两种方式

单片机中的I2C驱动有两种方式。一种方式是用专用硬件I2C控制器实现,这种方式简单易行,品质也容易控制,只是会增加硬件成本方面的压力。另一种方式是用纯软件方式实现,这种方式几乎无硬件成本方面的考虑。

主要对比:

  • (1)硬件I2C用法比较复杂,模拟IIC的流程更清楚一些
  • (2)硬件I2C速度比模拟快,并且可以用DMA

模拟I2C可以在任何管脚上,而硬件只能在固定管脚上。

硬件I2C

对应芯片上的I2C外设,有相应I2C驱动电路,其所使用的I2C管脚也是专用的,因而效率要远高于软件模拟的I2C;一般也较为稳定,但是程序较为繁琐。硬件(固件)I2C是直接调用内部寄存器进行配置;而软件I2C是没有寄存器这个概念的。

​编辑

I2C控制器操作代码STM32系列单片机)

​​​​收发的三种方式:

  • 中断
  • 轮询
  • DMA

中断和轮询可以收发任意组合。

软件I2C

软件I2C一般是选择单片机中的任意两个空闲GPIO口(管脚复用都选择最基本的GPIO),其中一个口线作为时钟线(SCL),另一个口线作为数据线(SDA),与I2C设备的SCL和SDA一一对应连接,用软件控制GPIO口即SCL、SDA输出高低电平,模拟I2C总线的时序,从而与I2C设备进行通信。

​编辑

GPIO模拟I2C程序

起始(start)

时钟线(SCL)高电平,数据线(SDA)从高电平跳变到低电平。代码如下:

​编辑

结束(stop)

时钟线(SCL)在高电平期间,数据线(SDA)由低电平向高电平跳变。

​编辑

发送

主机发送一个字节到IIC总线。

​编辑

主机从IIC总线读取一个字节数据