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


    两种方式

    单片机中的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设备的SCLSDA一一对应连接,用软件控制GPIO口即SCLSDA输出高低电平,模拟I2C总线的时序,从而与I2C设备进行通信。

    GPIO模拟I2C程序

    起始(start)

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

    结束(stop)

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

    发送

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

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

  • 相关阅读:
    基于Spring Boot+MyBatis+MySQL的高校试卷管理系统
    微服务架构-微服务实施
    笔试记录-扔鸡蛋问题
    如何确保您的数据提供值得信赖的见解
    行情订阅&分钟合成
    49. Group Anagrams
    使用Minikube+docker+harbor+k8s自动化部署 @by_TWJ
    数据可视化:地图
    C++深度解析教程 - 目录
    Python网络编程:构建网络应用与通信
  • 原文地址:https://blog.csdn.net/phmatthaus/article/details/127456807