【STM32笔记3】I2C的时序解读与软件模拟(即软件I2C的实现,另有软I2C与硬I2C的差异说明)

5 篇文章 1 订阅
1 篇文章 0 订阅

一、I2C简介

1、IIC(Inter-Integrated Circuit)总线是一种由PHILIPS公司开发的两线式串行总线,用于连接微控制器及其外围设备。它是由数据线 SDA 和时钟 SCL 构成的串行总线,可发送和接收数据。 在 CPU 与被控 IC 之间、IC 与 IC 之间进行双向传送,高速 IIC 总线一般可达 400kbps 以上;

2、I2C 总线在传送数据过程中共有三种类型信号,它们分别是:开始信号、结束信号和应答信号。

开始信号:SCL 为高电平时,SDA 由高电平向低电平跳变,开始传送数据; 

结束信号:SCL 为高电平时,SDA 由低电平向高电平跳变,结束传送数据; 

应答信号:接收数据的 IC 在接收到 8bit 数据后,向发送数据的 IC 发出特定的低电平脉冲, 表示已收到数据。CPU 向受控单元发出一个信号后,等待受控单元发出一个应答信号,CPU 接 收到应答信号后,根据实际情况作出是否继续传递信号的判断。若未收到应答信号,由判断为受控单元出现故障;

注: 起始信号是必需的,结束信号和应答信号,都可以不要。

二、I2C总线数据传输的总时序图(主要参考start、ack、stop三大信号的产生与运用)

1、start信号的实现

2、ack信号的实现(附不产生ack信号的实现)

3、stop信号的实现

4、一个字节大小的数据的send与read(注:都是由MSB-高位到LSB-低位)

 

三、指定地址读取I2C芯片内部的一个字节大小的数据的时序图(此处以24Cxx芯片为例,主要参考其软件模拟实现方式)

 

 四、指定地址写入I2C芯片内部的一个字节大小的数据的时序图(此处以24Cxx芯片为例,主要参考其软件模拟实现方式)

另:

1、I2C-24C02的初始化函数 

2、个人时序总结笔记

3、I2C软件实现与硬件实现的差异 

所谓硬件I2C对应芯片上的I2C外设,有相应I2C驱动电路,其所使用的I2C管脚也是专用的;软件I2C一般是用GPIO管脚(只不过此处所用到的GPIO口恰巧是芯片内部硬件I2C所分配的复用引脚PB6、PB7),用软件控制管脚状态以模拟I2C通信波形。

(1)硬件I2C的效率要远高于软件的,而软件I2C由于不受管脚限制,接口比较灵活。模拟I2C 是通过GPIO,软件模拟寄存器的工作方式,而硬件(固件)I2C是直接调用内部寄存器进行配置。如果要从具体硬件上来看,可以去看下芯片手册,因为固件I2C的端口是固定的;

(2)从底层配置上看,比如IO口配置,如果配置了IO口的功能(IIC功能)那就是固件IIC,否则就是模拟,可以看IIC写函数,看里面有木有调用现成的函数或者给某个寄存器赋值,如果有,则肯定是固件IIC功能,没有的话肯定是数据一个bit一个bit模拟发生送的,肯定用到了循环,则为模拟;

(3)从代码量判断,模拟的代码量肯定比固件的要大。且硬件IIC用法比较复杂,模拟IIC的流程更清楚一些;硬件IIC速度比模拟快,并且可以用DMA;模拟IIC可以在任何管脚上,而硬件只能在固定管脚上;

附:此文为本人经STM32实战后总结所得,欢迎大家参考指点,谢谢。

  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值