打印
[APM32F1]

关于软件模拟I2C的使用心得

[复制链接]
761|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
mcufae|  楼主 | 2023-9-28 11:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1.介绍:想要控制 APM32 产生 I2C 方式的通讯,可以采用软件模拟或硬件 I2C 这两种方式。(1)所谓软件模拟,即根据时序妖气控制 CPU 内核按照 I2C 协议的要求控制 GPIO 输出高低电平。如控制产生 I2C 的起始信号时,先控制作为 SCL 线的 GPIO 引脚输出高电平,然后控制作为 SDA 线的 GPIO 引脚在此期间完成由高电平至低电平的切换,最后再控制SCL 线切换为低电平,这样就输出了一个标准的 I2C 起始信号。(2)硬件 I2C 是指直接利用 STM32 芯片中的硬件 I2C 外设,该硬件 I2C 外设跟 USART串口外设类似,只要配置好对应的寄存器,外设就会产生标准串口协议的时序。使用它的I2C 外设则可以方便地通过外设寄存器产生 I2C 协议方式的通讯,如初始化好 I2C 外设后,只需要把某寄存器位置 1,那么外设就会控制对应的 SCL 及 SDA 线自动产生 I2C 起始信号,而不需要内核直接控制引脚的电平。
2.编程要点:例如控制EEPROM(1) 配置通讯使用的目标引脚为开漏模式;(2) 编写模拟 I2C 时序的控制函数;(3) 编写基本 I2C 按字节收发的函数;(4) 编写读写 EEPROM 存储内容的函数;(5) 编写测试程序,对读写数据进行校验。
3.分布解析:(1)开漏模式:因为SCL,SDA的数据是有ACK应答信号,需要我们的引脚信号输出和输入的,在开漏模式下可以达到要求,记得加上10K上拉电阻。(2)起始信号,停止信号,应答信号,这些是以MCU作为主机,这些都是由主机产生的信号,我的理解是封装好函数后,后面直接调用,就相当于是函数库的功能,这也是初学者后期编程可以借鉴的点。(3)发送和接收函数是以I2C协议的时序图为基础的,就是对于每一个BIT位的编写,什么时候可以进行数据的采样,什么时候对于数据的变换,都是要参考时序,最主要的是对于ACK信号那一部分进行编写要注意。(4)编写EEPROM的函数,要结合具体的EEPROM的时序,调用我们自己写好的函数库即可,其实也是前面的铺垫做好了,后面是可以直接调用的,都是大同小异的。这里面最主要的就是参考时序图的时间,比如:数据的读的电平要保持多久,写的电平要保持多久,需要满足这些电平的持续时间,才能让数据传输的稳定。(5)进行调试。

使用特权

评论回复
沙发
lzbf| | 2023-11-5 19:44 | 只看该作者
在软件模拟I2C时,需要深入了解I2C协议

使用特权

评论回复
板凳
pmp| | 2023-11-5 20:06 | 只看该作者
虽然软件模拟可以提供一定的准确性,但与真实的硬件设备相比,模拟器可能存在一些差异。

使用特权

评论回复
地板
maudlu| | 2023-11-5 20:20 | 只看该作者
软件模拟I2C是一种实用的方法,特别是在没有硬件I2C的情况下

使用特权

评论回复
5
mikewalpole| | 2023-11-5 21:39 | 只看该作者
考虑使用硬件I2C。               

使用特权

评论回复
6
ccook11| | 2023-11-5 22:21 | 只看该作者
软件模拟I2C通信需要占用更多的CPU资源和内存资源。

使用特权

评论回复
7
janewood| | 2023-11-6 19:59 | 只看该作者
它的效率可能不如硬件I2C               

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

8

主题

8

帖子

0

粉丝