stm32中IIC通讯协议

参考资料:大部分均引用b站江协科技课程、GPT及网络资料

        什么是IIC(i2C)通讯协议?

关键字:SCL、SDA、半双工、同步、串行。

        IIC(Inter-Integrated Circuit),也称为I2C(Inter-Integrated Circuit),是一种由Philips公司(现为NXP)开发的用于在集成电路之间进行短距离通信的串行总线协议。IIC协议非常适合低速设备之间的数据传输,具有简单、低成本和易于实现的特点。

      其中有几个问题:为什么是短距离?什么是串行总线?这个等学完概念后再进行解答。

概念:

IIC总线基本特性
  1. 双线结构:IIC总线采用两根双向线路进行通信:

    • SCL(串行时钟线):由主设备产生的时钟信号,用于同步数据传输。
    • SDA(串行数据线):用于传输数据,数据在时钟信号的控制下进行传输。
  2. 多主从结构:支持总线挂载多设备(一主多从、多主多从)。每个设备都有一个唯一的地址

  3. 地址分配IIC设备使用7位或10位地址来唯一标识每个设备。在传输数据时,主设备通过地址帧选择目标从设备

  4. 同步,半双工

数据传输
  • 数据帧:每次传输的数据帧由8位数据组成,从高位(MSB)到低位(LSB)传输
  • 应答位(Acknowledge Bit):在每个数据帧传输之后,由接收方发送一个应答位。若应答位为低电平,表示接收成功;若应答位为高电平,表示接收失败。
数据读写过程
  1. 写操作

    • 主设备发送起始条件。
    • 主设备发送从设备地址以及读写控制位(0表示写,1表示读)。
    • 从设备发送应答位。
    • 主设备发送要写入的数据。
    • 从设备发送应答位。
    • 重复数据传输和应答,直到所有数据传输完毕。
    • 主设备发送停止条件。
  2. 读操作

    • 主设备发送起始条件。
    • 主设备发送从设备地址以及读写控制位。
    • 从设备发送应答位。
    • 主设备切换到接收模式,读取数据。
    • 主设备发送应答位。
    • 重复数据读取和应答,直到所有数据读取完毕。
    • 主设备发送停止条件。

IIC时序:

1.起始和终止

        起始条件:SCL高电平期间,SDA从高电平切换到低电平

        终止条件:SCL高电平期间,SDA从低电平切换到高电平

2.发送和接收

          发送一个字节:SCL低电平期间,主机将数据位依次放到SDA线上(高位先行),然后释放SCL,从机将在SCL高电平期间读取数据位,所以SCL高电平期间SDA不允许有数据变化,依次循环上述过程8次,即可发送一个字节

        接收一个字节:SCL低电平期间,从机将数据位依次放到SDA线上(高位先行),然后释放SCL,主机将在SCL高电平期间读取数据位,所以SCL高电平期间SDA不允许有数据变化,依次循环上述过程8次,即可接收一个字节(主机在接收之前,需要释放SDA)

3.应答

        发送应答:主机在接收完一个字节之后,在下一个时钟发送一位数据,数据0表示应答,数据1表示非应答

         接收应答:主机在发送完一个字节之后,在下一个时钟接收一位数据,判断从机是否应答,数据0表示应答,数据1表示非应答(主机在接收之前,需要释放SDA)

        了解了这些基本知识,再回到开头,IIC其只需要两根线控制,一根时钟线(SCL)控制同步,一根数据线(SDA)传输数据,因为只有一根数据线,数据逐个传输,因此是串行通讯。

        其中还提到了半双工,这里来解释下:

        半双工:数据可以在两个方向上传输,但不能同时进行,如iic,rs485

        全双工:数据可以在两个方向上同时进行传输。发送和接收可以同时进行,不会互相干扰,

如RS-232。

        单工:数据只能在一个方向上传输。发送方只能发送,接收方只能接收,如电视广播。

iic在长距离的环境中,容易受到干扰造成电平跳变,会严重影响数据的准确性,且IIC协议依赖于时钟线(SCL)和数据线(SDA)的同步工作。长距离可能导致信号延迟不一致,因此其适合短距离通讯。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/766577.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

力扣双指针算法题目:双数之和,三数之和,四数之和

目录 一:双数之和 1.题目: 2.思路解析 3.代码 二:三数之和 1.题目 2.思路解析 3,代码 三:四数字之和 1.题目 2.思路解析 3.代码 一:双数之和 1.题目: 输入一个递增排序的数组和一…

思维导图插件--jsMind的使用

vue引入jsmind(右键菜单)_jsmind.menu.js-CSDN博客 第一版 vue-JsMind思维导图实现(包含鼠标右键自定义菜单)_jsmind 右键菜单-CSDN博客 // 新增节点addNode() {console.log(this.get_selected_nodeid());this.get_selected_…

uniapp入门

一、新建项目 进入到主界面,左上角点击新建——1.项目 输入项目名称,Vue版本选择3 二、创建页面 选中左侧文件目录里的pages文件夹,右键,选择新建页面 1输入名称 2选中“创建同名目录” 3选择模板&…

风暴统计案例复现 | 先单后多的影响因素分析

今日要复现的是最最基础的影响因素分析文章,文章包括了①基本情况表、②卡方检验、③多因素logistic回归,复现过程将会详细截图讲解具体步骤,尤其是新手小白,请大家跟上脚步哦! 本文为常见的先单后多影响因素分析的文章…

类型“{}”上不存在属性“xxxx”。ts(2339)

解决:类型“{}”上不存在属性“xxxx”和非类型化函数调用不能接受类型参数等问题。 问题发现 今天一个学生,发我一张图(如下)。 他从远端拉取到本地(自家电脑)后打开的代码视图,一大堆抛红。问…

Golang | Leetcode Golang题解之第212题单词搜索II

题目: 题解: type Trie struct {children map[byte]*Trieword string }func (t *Trie) Insert(word string) {node : tfor i : range word {ch : word[i]if node.children[ch] nil {node.children[ch] &Trie{children: map[byte]*Trie{}}}nod…

【鸿蒙学习笔记】基础组件 Button

官方文档:按钮 (Button)添加链接描述 官方文档:button开发指导 目录标题 属性迭代完善不含子组件的按钮包含子组件的按钮ButtonType添加事件跳转超链接提交表单悬浮按钮 属性迭代完善 不含子组件的按钮 Column({ space: 10 }) {Row() {Button(添加子目…

CentOS 7 停止维护(2024-6-30)后可用在线yum源 —— 筑梦之路

众所周知,centos 7 在2024年6月30日,生命周期结束,官方不再进行支持维护,而很多环境一时之间无法完全更新替换操作系统,因此对于yum源还是需要的,特别是对于互联网环境来说,在线yum源使用方便很…

NoSQL之Redis优化

目录 一、Redis 高可用 二、Redis 持久化 1.RDB 持久化 1)触发条件 2) 执行流程 3)启动时加载 2.AOF 持久化 1)开启AOF 2)执行流程 3)启动时加载 3.RDB和AOF的优缺点 三、Redis 性能管理 1.查…

【Dison夏令营 Day 07】用 Python 和 Rich 制作 Wordle克隆(下篇)

在大流行期间,Wordle 在 Twitter 上还算比较流行的一款基于网络的益智游戏,要求玩家每天在六次或更短时间内猜出一个新的五个字母的单词,每个人得到的单词都是一样的。 在本教程中,你将在终端上创建自己的 Wordle 克隆。自 2021 …

分享一款Type C接口USB转2路485模块【带完整原理图】

大家好,我是『芯知识学堂』的SingleYork,今天给大家分享一款很实用的工具–基于Type C接口的USB转2路485模块。 这款模块主芯片采用南京沁恒的CH342F这款芯片,芯片特性如下: 该系列芯片有QFN24和ESSOP10 这2种封装,…

深度网络现代实践 - 深度前馈网络之结构设计篇

序言 深度网络结构设计作为人工智能领域的基石,正引领着技术创新的浪潮。通过模拟人脑神经元间的复杂连接,深度神经网络展现了卓越的特征学习与模式识别能力。随着大数据与计算能力的提升,设计高效、精准且泛化能力强的深度网络结构成为研究…

深度探索“目录名称无效“:原因、解决方案与最佳实践

目录名称无效:现象背后的秘密 在日常使用电脑或移动设备时,我们时常会遇到“目录名称无效”的错误提示,这一提示仿佛是一道无形的屏障,阻断了我们与重要数据的联系。从本质上讲,“目录名称无效”意味着系统无法识别或…

基于正点原子FreeRTOS学习笔记——时间片调度实验

目录 一、时间片调度介绍 二、实验演示 1、宏修改 1.1、滴答定时器宏 1.2、调度器宏 2、实验程序 2.1.1、任务1,任务2不加临界区程序 2.1.2 实验现象 2.2.1、任务1,任务2加临界区程序 2.2.2 实验现象 一、时间片调度介绍 时间片:同…

Golang中defer和return顺序

在Golang中,defer 和 return 的执行顺序是一个重要的特性,它们的执行顺序如下: return语句不是一条单独的语句,实际上,它是由赋值和返回两部分组成的。赋值步骤会先执行,这一步会计算return语句中的表达式…

【后端面试题】【中间件】【NoSQL】MongoDB的配置服务器、复制机制、写入语义和面试准备

MongoDB的配置服务器 引入了分片机制之后,MongoDB启用了配置服务器(config server) 来存储元数据,这些元数据包括分片信息、权限控制信息,用来控制分布式锁。其中分片信息还会被负责执行查询mongos使用。 MongoDB的配置服务器有一个很大的优…

【C语言】const 关键字

在C语言中,const关键字用于定义常量,使得变量的值在其声明之后无法被修改。这可以帮助防止意外修改数据,提高代码的安全性和可读性。以下是有关const关键字的一些详细说明: 基本用法 const int max_value 100;在这个例子中&…

Zynq系列FPGA实现SDI视频编解码+图像缩放,基于GTX高速接口,提供4套工程源码和技术支持

目录 1、前言工程概述免责声明 2、相关方案推荐本博已有的 SDI 编解码方案本博已有的FPGA图像缩放方案本方案的无缩放应用本方案在Xilinx--Kintex系列FPGA上的应用 3、详细设计方案设计原理框图SDI 输入设备Gv8601a 均衡器GTX 解串与串化SMPTE SD/HD/3G SDI IP核BT1120转RGB纯V…

FastApi中的常见请求类型

FastApi中的常见请求类型 后端开发语言中,我钟情于node,高效的异步处理真是让我眼前一亮,同时,简单易懂的语法也让我非常倾心 但是但是,因为考虑要写一个深度学习算法的后端接口,所以不得不选用python作为…

容器安全:等保合规性的基石

随着云计算和微服务架构的蓬勃发展,容器技术已经成为现代IT基础设施不可或缺的一部分。在网络安全等级保护制度(等保)的框架下,容器安全的要求日益凸显,成为等保合规性的基石。本文将深入探讨容器安全在等保中的重要性…