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

STM32 I2C 通信协议

1、原理

1、硬件电路

一主多从,单片机作为总线主机

SDA:数据线

SCL:时钟线

主机对SCL线完全控制,从机只能读取;在空闲状态下,主机可以主动发起对SDA的控制,只有在从机发送数据和从机应答的时候,主机才会暂时转交SDA的控制权给从机

I2C禁止所有设备输出强上拉的高电平,采用外置弱上拉开漏输出的电路结构。为了防止出现两个引脚同时处于输出状态,如一个高电平,一个低电平,会发生电源短路。

开漏输出,输出低电平,下管导通,强下拉;输出高电平,下管断开,引脚浮空。为了避免高电平造成的引脚浮空需要在总线外面给SCL和SDA各外置一个上拉电阻(弱上拉)。

从机地址设备:每个从机设备都有一个唯一确定的7位设备地址,一般器件地址的最后几位是可以在电路中改变的。

2、时序基本单元

1、起始、终止

2、发送字节

低电平主机放数据,高电平从机读数据

3、接收字节

低电平从机放数据,高电平主机读数据

主机在接收数据时,必须释放对SDA的控制权(让SDA恢复高电平),让从机控制SDA,发送数据

4、应答

发送:主机释放SDA后,从机立刻将SDA拉低电平,应答位为0,说明从机已经收到(默认高电平,低电平说明从机进行了回应) ;应答位为1,说明从机没有进行回应,发送的字节可能没有收到。

接收:告诉从机是否要继续发送数据。得到主机应答,从机继续发送;没得到应答,从机会释放SDA

3、地址时序

1、指定地址写

发送7位从机地址+1位读写位,在之后的时序中,主机的操作,0写1读

2、当前地址读

调用当前地址读的时序时,主机没有指定读取哪个地址,从机会返回当前指针指向的寄存器的值。

指针上电默认指向地址0,每写入、读出一个字节,指针自动自增一次。

3、指定地址读

前半部分是指定地址写,只指定了地址,还没写入数据;后半部分是当前地址读,加在一起就是指定地址读。

第一个字节发送从机地址,第二个字节用来发送从机的寄存器地址,从机接收到之后,寄存器指针就指向这个地址。为了修改读写标志位,Sr重复起始条件,相当于另起一个时序,指针不会因为时序的消失而消失或改变。

http://www.lryc.cn/news/2386544.html

相关文章:

  • 【后端高阶面经:Elasticsearch篇】38、Elasticsearch 高可用架构解析:分片容灾、Translog 调优与双集群
  • 5月26日复盘-自注意力机制
  • *HTML `<script>` 标签中的核心属性解析:掌控脚本加载与执行的艺术
  • 聊一聊接口测试如何设计有效的错误响应测试用例
  • 记忆上传与自我同一性的哲学-技术综合分析
  • 人工智能工程师学习路线总结(下)
  • Vue:axios(POST请求)
  • 企业级调度器LVS (面试版)
  • 从OTA双雄「共舞」,透视旅游持续繁荣背后的结构性跃迁
  • 华为OD机试真题——虚拟理财游戏(2025A卷:200分)Java/python/JavaScript/C/C++/GO最佳实现
  • Vue-01(Vue CLI创建项目以及文件配置说明)
  • 华为云Flexus+DeepSeek征文 | DeepSeek-V3/R1商用服务开通体验全流程及使用评测
  • redis列表类型
  • 人工智能数学基础实验(一):智能推荐系统实战
  • uni-app学习笔记十二-vue3中组件传值(对象传值)
  • Vue.js教学第十四章:Vuex模块化,打造高效大型应用状态管理
  • Ubuntu/Linux 服务器上调整系统时间(日期和时间)
  • win11 禁用/恢复 内置笔记本键盘(保证管用)
  • 精度不够?光纤激光尺0.2ppm误差解锁微米级制造
  • Android 16系统源码_自由窗口(一)触发自由窗口模式
  • sqli-labs第十八关——POST-UA注入
  • 流式优先架构:彻底改变实时数据处理
  • WebSockets 在实时通信中的应用与优化
  • 零基础教程:用 Docker + pgloader 将 MySQL 数据库迁移到 PostgreSQL
  • mac上安装 Rust 开发环境
  • 解决RedisTemplate的json反序列泛型丢失问题
  • 【Elasticsearch】创建别名的几种方式
  • 【JAVA】中文我该怎么排序?
  • 《C 语言字符串操作从入门到实战(下篇):strncpy/strncat/strstr 等函数原理与实现》
  • 百度飞桨PaddleOCR 3.0开源发布 OCR精度跃升13%