原创 【MM32应用笔记】01.使用GPIO端口模拟I2C从机通讯

2020-5-25 13:22 686 23 4 分类: MCU/ 嵌入式 文集: MM32应用笔记
1.I2C总线
从事嵌入开发的大多都了解I2C总线。I2C总线仅由两根信号线组成,一根为SCL时钟信号线,另一根为SDA数据信号线;双方通过I2C总线协议完成数据的通讯交互。在做这个章节的实验之前,我们再来明确一下I2C总线通讯协议的3个基本特性:起始条件、停止条件和数据的有效性。关于I2C其它的技术点,可以自行去查阅I2C的相关资料去了解哈。
1.1.如下图所示是I2C总线起始条件和停止条件的时序示意图:

起始条件:当SCL处于高电平状态时,SDA从高电平状态跳变到低电平状态,这个时候I2C总线上将产生一个起始信号。

结束条件:当SCL处于高电平状态时,SDA从低电平状态跳变到低电平状态,这个时候I2C总线上将产生一个停止信号。


1.2.如下图所示是I2C总线上数据有效性的示意图:

SDA数据线上的电平状态只能在当SCL时钟线处于低电平时,才允许改变;否则当SCL处于高电平时,SDA数据线的电平发生了改,I2C总线会识别为起始信号或者停止信号。


1.3.如下图所示,给出了I2C主机向从机写入一个字节和从从机中读取一个字节的时序图,这里就不展开讲了,主要是下面参考程序需要对照这个时序才能更好的理解,才贴出来的^^

2.实现功能
使用两个普通GPIO端口实现模拟I2C从机,与I2C主机进行数据通讯交互的功能。
3.参考程序
i2c.h头文件

i2c.c源文件

4.设计说明
模拟I2C程序是基于MM32的eMiniBoard-MB025开发板上实现的,板载的是一颗MM32F032R8T6芯片,我们将PB6模拟成SCK时钟信号线,将PB7模拟成SDA数据信号线;在初始化配置的时候,我们将两个两个引脚配置成输入模式,并开始两个引脚的外部触发中断功能,且配置成上升沿和下降沿双边沿触发模式。在产生外部中断后,根据当前的中断源再结合中断源信号引脚的高低电平状态,来进行处理:当SDA外部中断触发时,根据SCL时钟信号的高低电平状态,来判断I2C总线的起始信号、停止信号和数据信号;当SCL外部中断触发时,根据第1.3小节的时序图进行数据的收发处理。
配合验证模拟I2C从机程序的也是基于MM32的eMiniBoard-MB023开发板上实现的,板载的是一个MM32L073PF芯片,通过硬件I2C对模拟I2C进行读写操作实现。
5.调试运行
如下图所示,是主机通过调用SHELL命令,通过主机的I2C操作模拟I2C从机实现读写操作,每次命令的调用都是向模拟I2C从机写入一串数据,再从模拟I2C从机中读取一串数据,写入和读取的数据内容,可以参照打印消息和逻辑分析仪监控看到验证结果。

6.后续
当前的模拟I2C是基于普通GPIO口加外部中断功能实现的,在能够达到的I2C通讯速度是有限的,在实际测量后,读取的最大时钟频率可以达到36hHz,写入的最大时钟频率可以达到34kHz,本身从外部中断触发到进入中断处理就要消耗掉700ns-1.2us的时间,所以限制了速度;有位大神通过DMA的操作方式实现了模拟I2C从机,能够达到400kHz的通讯速率,后面再研究学习一下!

【MM32应用笔记原创,不接受任何形式的转载】

作者: xld0932, 来源:面包板社区

链接: https://mbb.eet-china.com/blog/uid-me-3889467.html

版权声明:本文为博主原创,未经本人允许,禁止转载!

文章评论1条评论)

登录后参与讨论

qwqr3231 2020-5-25 15:22

新篇章,不错,博主优秀!
相关推荐阅读
xld0932 2020-05-29 11:27
【MM32应用笔记】02.使用Xmodem协议实现文件传输功能
1.Xmodem协议Xmodem协议是由Ward Chritensen于70年代提出并实现的,是一种被广泛使用的异步文件传输协议。Xmodem协议传输数据的单位为信息包,每个信息包都包含有一个字节的开...
xld0932 2020-05-17 08:38
【MM32学习笔记】18.定时器(TIM)之3路PWM移相输出
1.移相搜索复制MM32高级定时器TIM1的应用功能非常多,本节就输出比较模式下翻转模式的应用做一个移相的应用。简单的说,移相就是相对于之前输出的相位产生了偏差,这个偏差称之为相位差。MM32的TIM...
xld0932 2020-05-14 21:59
【MM32学习笔记】17.定时器(TIM)之输出相位差为180度的PWM
1.输出相位差为180度的PWM搜索复制这一章节我们来产生两路相位差为180度的PWM脉冲信号,占空比和频率都是相同的,只是相位不同; 在上一小节中,我们使用TIM1产生的3组互补带死区的PWM脉冲,...
xld0932 2020-05-14 21:22
【MM32学习笔记】16.定时器(TIM)之带死区控制的3路互补PWM输出功能
1.死区时间搜索复制死区时间是PWM输出时,为了使H桥或者半H桥上的上下晶体管不会因为开关速度的问题而发生同时导通的情况而设置的一个保护时间段,在这段时间内,上下晶体管都不会有输出。而PWM控制的上下...
xld0932 2020-05-12 21:23
【MM32学习笔记】15.定时器(TIM)之PWM输入捕获
1.PWM输入模式搜索复制MM32的高级控制定时器可以工作在输入捕获模式,PWM输入模式是输入捕获模式的一个特例,与输入捕获模式的异同点可以参考用户手册的11.3.7小节的介绍。但有一点需要注意的就是...
广告
EE直播间
更多
我要评论
1
23
广告
关闭 热点推荐上一条 /6 下一条