I2C软件模拟时序的基本要素

目录

前言

一、关于I2C

二、正文

1.引脚的配置

2.I2C的起始和终止时序

3.发送一个字节

4.接收一个字节

5.应答信号

6.指定地址写和指定地址读

总结



前言

环境:

芯片:STM32F103C8T6

Keil:V5.24.2.0

本文主要参考江科大教程,如有不明白地方,可在B站搜索江科大,有视频讲解教程。

一、关于I2C

网上挺多的资料,大家自己搜索下(惯例水一下)

这里需要说一下,SCL:时钟线,也有叫SCK的

SDA:数据线。顾名思义,数据都是在这条线上传输的

二、正文

1.引脚的配置

注意:SCL和SDA一定要配置成开漏输出模式。因为从机会拉低电平进行应答或数据传输,如果此时有强上拉,将会形成短路,造成元件损坏。所有I2C均是如此。切记。

所以第三条会有上拉电阻,形成弱上拉。此时放开IO输出,IO电平会随着弱上拉变成高电平

所以可以输出高低电平,但是没有驱动能力。

2.I2C的起始和终止时序

如图:无需多言。

3.发送一个字节

时序:

1。在SCL低电平期间,将数据放在SDA上,1为高电平,0为低电平。

2.当SCL为高电平时读取此时的SDA电平,判断数据是0或1.

3.然后SCL拉低电平。

4.SDA放入数据。重复步骤1-3.实现多字节写入

备注:

1.实际在SCL上升沿时,数据就已经读取完毕。

2.在SCL高电平时,SDA不可以改变状态。

4.接收一个字节

和发送一个字节类似,不过它是由从机发送,主机接收

时序:

1.主机拉低SCL

2.从机在SCL低电平期间,将数据放入SDA,1为高电平,0为低电平

3.主机在SCL高电平期间读取SDA的数据.

4.主机拉低SCL

5.从机放入数据在SDA,循环1-5可以读取多个字节的数据

注意:

和写不一样的地方:SCL依旧由注意控制,但是主机拉低SDA后需要要释放掉SDA,进入输入模式.此时从机可以操控SDA电平.

5.应答信号

如图:无需多言.

注意:当用示波器抓取从机的应答信号时,理论上,当SDA被主机释放时会变成高电平,然后由从机拉低.但是可能无法抓取到SDA的高电平.原因是:从机在感应到SDA电平变化的时候接手,又把电平拉低了,造成SDA还未达到高电平就被从机拉低.时间太短示波器无法抓取.

6.指定地址写和指定地址读

 1.指定设备

2.指定设备中的寄存器地址

3.写入数据(读取的话一样的顺序)

注意:I2C设备读取的地址为上次操作的地址,操作完后会自动+ 1;如果数据是连续的,就可以连续读取.如果是不连续的就需要每次指定地址才可以.


总结

I2C的时序基本一致,会一个就可以会全部.希望大家技术越来越牛

关关难过关关过,前路漫漫亦灿灿.

共勉.

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值