当前位置: 首页 > article >正文

STM32F1学习——I2C通信

一、I2C通信一带多

        在学习通信的时候,我们常会听到串口通信。但串口通信只限定两个设备之间,如果有多个设备,通信的两个设备就要连接上,接线复杂。所以有了总线式通信,在一条总线上可以连接多个设备,这些根据地址的不同,接收总线上不同的消息。

二、硬件电路设计

        在I2C总线上,SCL和SDA必须都配置成开漏模式,此模式下相当于GPIO可以通过MOS管下拉到地,另一个模式是浮空模式(下图右侧),但I2C外部通常会接上两个4.7kΩ的上拉电阻,可以弱上拉到高电平。此设计的好处不仅实现了防止当时序错乱时的电源短路现象,同时实现了线与功能。

        在一主多从模式中,主机拥有对SCL绝对的控制权,同时主机主机控制SDA,从机只有在得到主机允许的情况下才能使用SDA数据总线。

三、时序基本单元

1、起始和终止条件

        起始条件:在SCL处于高电平时,主机将SDA拉低的时候,从机检测到数据线SDA下拉做好了接收信号的准备,等待SCL的上升沿。

        终止条件:在SCL处于高电平时,主机将SDA拉高的时候,从机检测到数据线SDA的上升沿,并识别出这就是终止信号。

2、主机发送一个字节Byte = 8 * bit

        传输数据过程中,在SCL高电平期间不允许SDA有数据变换,不然就会误检测为起始或终止条件。

        在传输数据时,SCL先处于低电平,此时可以修改SDA的值,主机将数据位依次放到SDA线上(高位先行),然后释放SCL则SCL被拉高,产生上升沿,此时从机获取上升沿并读取SDA上的数据,

3、接收一个字节Byte = 8 * bit

        与发送一样,只不过这里变成了从机来发送数据。值得注意的两点是:

① 主机在接收数据的时候要放手SDA,即让SDA弱上拉至高,正常来说SDA只在自己发数据的时候才主动拉低。

② 此时仍然是主机有SCL的控制权,从机不能使用SCL。也就是说从机需要再SCL的下降沿将来时将SDA的数据准备好,以便主机可以在SCL高电平的时候读取到。

4、应答机制

        在主机发送完一个字节(8bit)后,主机要确定从机收到没有,就会采用接收应答下图右侧,发送完一个字节后,主机会主动释放SDA,从机如果有人收到了就拉住SDA导致他不会变为高电平,表示从机收到了。

        在主机处于接收完一个字节(8bit)消息的时,会将SDA拉低,表示从机可以继续发送,如果主机没有拉低,则从机会将SDA控制权还给主机,当传输多个数据时,我们要将最后一个字节的应答位设置为高,不然从机不会将SDA的控制权交还给主机。

 四、I2C写入读取的全部时序

参考

[10-1] I2C通信协议_哔哩哔哩_bilibili

4分钟看懂!I2C通讯协议 最简单的总线通讯!_哔哩哔哩_bilibili


http://www.kler.cn/a/394551.html

相关文章:

  • idea 弹窗 delete remote branch origin/develop-deploy
  • 使用Python实现对接Hadoop集群(通过Hive)并提供API接口
  • Oracle 单机及 RAC 环境 db_files 参数修改
  • React Hooks在现代前端开发中的应用
  • 基于海思soc的智能产品开发(两个图像处理来源)
  • win11 新建一个批处理,双击查看本机的IP地址
  • 第5章: 图像变换与仿射操作
  • vue3+vite+js env引入
  • 湾区聚力 开源启智 | 2024 CCF中国开源大会暨第五届OpenI/O启智开发者大会闪耀深圳
  • Scroll 生态全面启动为 Pencils Protocol 赋能,DAPP 将迎强势腾飞
  • 【MySQL】SQL语言
  • android studio new flutter project-运行第一个flutter项目
  • 网络安全教程:从基础到高级全面指南
  • 数据分析案例-笔记本电脑价格数据可视化分析
  • C# WPF FontDialog字体对话框,ColorDialog颜色对话框 引用
  • 批量重命名Excel文件并排序
  • 亮数据——助力全球数据抓取的高效代理平台
  • 力扣最热一百题——完全平方数(中等难度,详细分析)
  • 【Excel】ToRow超级查找函数
  • 随机数
  • Spring Boot中的自动装配机制
  • 【竞技宝】CS2-上海majorRMR:美洲区最后门票争夺战
  • Spark 共享变量:广播变量与累加器解析
  • spring-webmvc根据请求路径找到对应的 HandlerMethod
  • [代码随想录Day11打卡] 150. 逆波兰表达式求值 239. 滑动窗口最大值 (有点难度) 347.前 K 个高频元素 (有点难度) 总结
  • 28、dawn