两种方式
单片机中的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总线读取一个字节数据