I2C通信外设

I2C外设介绍

在这里插入图片描述
主机,就是拥有主动控制总线的权利。从机,只能在从机允许的情况下,才能控制总线。
多主机模型可分为固定多主机和可变多主机。固定多主机就是总线上,有2个或2个以上固定的主机,上面固定为主机,下面是从机,只能是主机对从机进行控制,从机不能控制主机,当2个主机同时控制时,就会产生总线冲突,就要进行总线仲裁,仲裁失败的一方让出总线控制权。

可变多主机,总线上挂载多个设备,总线上没有固定的主机和从机,任何一个设备,都可以在总线空闲时跳出来作为主机,然后指定其他任何一个设备进行通信,通信完成后,跳出来的主机就要退回到从机的位置。对于STM32的I2C,使用的是可变多主机。

支持7位/10位地址模式(7位地址只能支持128个设备,地址数量不够时可以通过开辟多条I2C总线或者改用10位地址来解决,十位地址的情况下就需要规定起始位后的两个字节都作为寻址为使用,如果想将第二个字节作为寻址使用那就要将第一个字节前五位写入11110来作为标志)

兼容SMBus协议(此协议是基于I2C总线改进而来的,主要应用于电源管理系统中)是系统管理总线。

硬件I2C和软件I2C,硬件I2C在stm32中最多只能有2路I2C总线。软件I2C,没有限制,只要代码存得下。

I2C外设框图

在这里插入图片描述

复用引脚,I2C1的
在这里插入图片描述
复用引脚,I2C2的引脚,I2C2还可以重映射到PB8,PB9两个引脚
在这里插入图片描述
在这里插入图片描述

I2C基本结构

在这里插入图片描述

这个移位寄存器和数据寄存器是核心,因为这是高位先行,所以这个移位寄存器向左先行,在法送时,最高位移出去,一个SCL时钟,是移位一次;移位8次,这就能把一个字节,由高位到低位,依次放到SDA总线上。

接收时,数据从GPIO口,从右边依次移进来,移位8次,最终一个字节就接收完成了。

对于GPIO口都要配置成复用开漏输出模式,复用就是GPIO口的状态,由片上外设控制的;开漏输出,是I2C协议要求配置。

SCL这里,时钟控制器通过GPIO去控制时钟线。SDA部分,输出数据,通过GPIO,输出到端口,输入数据,通过GPIO,输入到移位寄存器。

主机发送

在这里插入图片描述
7位地址的主发送和10位地址的主发送,区别是,7位地址,起始条件后的一个字节是寻址;
10位地址,起始条件后的两个字节都是寻址,其中前一个字节,帧头:内容是5位的标志位11110+2位地址+1位读写位,后一个字节,是8位地址,两个字节加一起,构成10位寻址。

7位地址的主发送:流程是,起始,从机地址,应答,数据1,应答,数据2,应答,最后P停止。

首先,初始化后,总线默认空闲状态,STM32默认从模式,为了产生一个起始条件,STM32需要写入控制寄存器,之后,STM32由从模式转换为主模式,然后会发生EV5事件,EV5其实相当于检查标志位,SB表示状态寄存器的一个状态,SB置1,表示起始条件已发送,当检测起始地址已发送时,就可以发送一个字节的从机地址,从机地址需要写到数据寄存器DR中,写入DR后,硬件电路会自动把这一字节,转到移位寄存器里,在把这个字节发送到I2C总线上,之后硬件自动接收应答并判读,如没有应答,硬件就会置应答失败的标志位,在寻址完成后,会发生EV6事件,EV6事件结束后,发送EV8事件,然后接收应答,数据2就转入移位寄存器发送,又发生EV8事件,但此时下一个数据,已经被写到寄存器等着了,所以EV8事件消失,之后应答,产生EV8事件,写入数据寄存器,EV8消失。一旦检测到EV8事件,就开始写入下一个数据,最后,当想要发送的数据写完后,这时就没有新的数据写入数据寄存器,当移位寄存器移位完成时,此时就是移位寄存器器空,数据寄存器也空状态,这个事件就是EV8_2,检测到EV8_2时,产生终止条件。

主机接收

在这里插入图片描述
时序流程是,起始,从机地址+读,接收应答,然后接收数据,发送应答,接收数据,发送应答,最后一个数据给非应答,然后终止。

首先,写入控制寄存器start位,产生起始条件,然后等待EV5事件,EV5事件代表起始条件已发送,之后是寻址,接收应答,产生EV6事件,EV6事件代表寻址已完成,数据1代表数据正通过移位寄存器进行输入,,EV6_1是没有对应的事件标志,只适用于接收1个字节的情况,这个,EV6_1,是数据1还在移位,数据没有收到,所以事件没有标志位,之后当时序单元完成时,把应答位发送出去,移入的一个字节就整体转移到数据寄存器,同时置RXNE标志位,表数据寄存器费空,收到了一个字节的数据,就是,EV7事件,当把数据读走后,,EV7事件就没了,说明此时数据1被读走,当然数据1还没读走的时候,数据2就可以直接移入移位寄存器,之后,数据2移位完成,收到数据2,产生,EV7事件,读走数据2,,EV7事件没了,按照这个流程,就一直接收数据,最后,当不需要接收时,需要在最后一个时序单元发生时,提前把ACK置0,,并设置终止条件的请求,这就是,EV7_1事件,之后,在时序完成后,设置了ACK=0,这里就给出非应答,由于设置STOP位,产生终止条件。

软件硬件波形对比

在这里插入图片描述
上面波形是软件I2C波形,下面波形是硬件I2C波形。
软件和硬件生成时序异同:引脚电平变化趋势一样,时钟线规整程度上看,硬件I2C更加规整;软件I2C,由于加了延时,软件时序不规整。

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

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

相关文章

【linux】在linux操作系统下快速熟悉开发环境并上手开发工具——体验不一样的开发之旅

个人主页:东洛的克莱斯韦克-CSDN博客 祝福语:愿你拥抱自由的风 目录 vim编辑器 Linux编译器:gcc/g使用 gcc和g的选项 编译过程 动静态库的链接 Linux项目的自动化构建 生成可执行程序 清理可执行程序 Linux调试器-gdb使用 git和git…

PHP函数大全之array_count_values()

array_count_values()函数是用于计算数组中每个值的出现次数的PHP函数,并返回一个关联数组,该数组的键表示原始数组中的唯一值,而键值表示该值在原始数组中的出现次数。 array_count_values()函数的一些注意事项: 该函数不区分大…

Python第二语言(四、Python数据容器)

目录 一、 数据容器(list、tuple、str、map、dict) 1. 数据容器概念 2. 列表list( [] ) 2.1 定义方式 2.2 嵌套列表 2.3 list通过获取下标索引获取值 2.4 下标使用概念 2.5 list列表的使用(列表的方法&#xff…

【ARM Cache 及 MMU 系列文章 6.2 -- ARMv8/v9 Cache 内部数据读取方法详细介绍】

请阅读【ARM Cache 及 MMU/MPU 系列文章专栏导读】 及【嵌入式开发学习必备专栏】 文章目录 Direct access to internal memoryL1 cache encodingsL1 Cache Data 寄存器Cache 数据读取代码实现Direct access to internal memory 在ARMv8架构中,缓存(Cache)是用来加速数据访…

德国西门子论未来质量管理 - 如何与明天相遇?

未来制造业的质量 -- 如何用软件方案满足质量要求 作者:Bill Butcher 翻译&编辑:数字化营销工兵 【前言】在Frost&Sullivan最近发表的一份白皮书中,他们讨论了制造业的质量投资。质量是制造过程的关键要素,但似乎比其他…

顶顶通呼叫中心中间件-同振和顺振配置步骤(mod_cti基于FreeSWITCH)

顶顶通呼叫中心中间件-同振和顺振配置步骤(mod_cti基于FreeSWITCH) 一、拨号方案配置 1、同振 win-ccadmin配置方法 1、点击拨号方案->2、在红框中输入同振->3、点击添加->4、根据图中配置,配置好了等待一分钟即可生效。 web-ccadmin配置方法 2、顺振…

搜维尔科技:「案例」Faceware电影中面部动画的演变历程

面部动画是电影中角色表演的一个重要方面,尤其是在严重依赖电子动画、化妆效果和动作捕捉系统的奇幻电影中。在《龙与地下城:盗贼荣誉》电影中,龙裔角色的面部动画是一个复杂的系统,使该生物在大屏幕上栩栩如生。该系统依赖于一种…

[leetcode hot 150]第一百三十七题,只出现一次的数字Ⅱ

题目: 给你一个整数数组 nums ,除某个元素仅出现 一次 外,其余每个元素都恰出现 三次 。请你找出并返回那个只出现了一次的元素。 你必须设计并实现线性时间复杂度的算法且使用常数级空间来解决此问题。 由于需要常数级空间和线性时间复杂度…

LINUX系统SSH远程管理 , SFTP远程文件传输,NFS共享存储服务

一、SSH 1.SSH:是一种安全通道协议,用来实现字符界面的远程登录,远程复制,远程文件传输;对通信双方的数据进行了加密;用户名和密码登录;密钥对认证方式可实现免密登录;ssh默认端口为…

Datetime,一个 Python 的时间掌控者

大家好!我是爱摸鱼的小鸿,关注我,收看每期的编程干货。 一个简单的库,也许能够开启我们的智慧之门, 一个普通的方法,也许能在危急时刻挽救我们于水深火热, 一个新颖的思维方式,也许能…

【html】如何用html+css写出一个漂亮的“众成教育”页面

先来看看效果图&#xff1a; 源码&#xff1a; <!DOCTYPE html> <html><head><meta charset"utf-8" /><title></title><style>* {margin: 0;padding: 0;/* border: 2px solid #000; */}.con {width: 1000px;height: 840px…

了解Kubernetes-RKE2的PKI以及证书存放位置

一、什么是PKI&#xff1f; 简称&#xff1a;证书基础设施。 可以方便理解为当你的集群有Server,Client架构&#xff0c;那么为了安全加密之间的通信&#xff0c;则需要使用证书进行交互&#xff0c;那么利用PKI架构可以安全加密组件之间的通信。 二、Kubernetes的PKI架构什…

后端开发面经系列 -- 华为C++一面面经

HUAWEI – C一面面经 公众号&#xff1a;阿Q技术站 来源&#xff1a;https://www.nowcoder.com/feed/main/detail/b8113ff340d7444985b32a73c207c826 1、计网的协议分几层&#xff1f;分别叫什么&#xff1f; OSI七层模型 物理层 (Physical Layer): 负责物理设备之间的原始比…

深入了解静态IP:基础知识与原理(固定IP地址解析)

在今天的数字化世界中&#xff0c;互联网连接已成为我们日常生活和工作中不可或缺的一部分。而在网络连接中&#xff0c;IP地址起着至关重要的作用。其中&#xff0c;静态IP地址因其独特的性质而备受关注。本文将深入探讨静态IP的基础知识、与动态IP的区别、工作原理以及为什么…

Vue-插槽 Slots

文章目录 前言什么叫插槽简单插槽指定默认值多个插槽根据父级别名称指定区域显示(具名插槽)作用域插槽 前言 本篇文章不做过多的讲解与说明&#xff0c;只记录个人实验测试案例。 详见&#xff1a;vue 官方文档 插槽 slots 什么叫插槽 之前的博客中&#xff0c;父级组件可以…

MogoTemplate基本入门(Mongodb数据库基本增删改查)

nosql 因为没有标准的 sql&#xff0c;各有各的操作方式&#xff0c;所以学习成本比较高。实际应用也不会去命令行直接操作&#xff0c;而是用编程语言的 api。 所以我们可以简单了解一下Mongodb&#xff0c;然后用java的Api去操作就行了 没必要花很大功夫在命令行上操作执行…

《大道平渊》· 玖 —— 把高深的道理讲的通俗,这是一门艺术。

《平渊》 玖 "化繁为简, 点石成金。" 把高深的道理讲得通俗&#xff0c;这是一门艺术&#xff01; 讲述者能够站在群众的角度&#xff0c;用尽可能简单通俗的语言来解释复杂的概念。 讲述者需要对概念有深刻的理解&#xff0c;还要有灵活的表达能力。 群众愿意接受…

差分原理+练习

差分的原理和前缀和相似&#xff0c;我们先联想一下前缀和。 前缀和计算下标从0到n的和&#xff0c;记为sum[n1];如果想要求出[l,r]区间的和&#xff0c;可以快速的通过sum[r1]-sum[l]来得到 。 前缀和适用于需要多次获取指定连续区间和的情景 而差分即计算相邻两个元素的差…

pESC-HIS是什么,怎么看?-实验操作系列-2

01 典型的pESC-HIS质粒遗传图谱 02 介绍 质粒类型&#xff1a;酿酒酵母蛋白表达载体 表达水平&#xff1a;高拷贝 诱导方法&#xff1a;半乳糖 启动子&#xff1a;GAL1和GAL10 克隆方法&#xff1a;多克隆位点&#xff0c;限制性内切酶 载体大小&#xff1a;6706bp 5 测…

Ubuntu系统中Apache Web服务器的配置与实战

✨✨ 欢迎大家来访Srlua的博文&#xff08;づ&#xffe3;3&#xffe3;&#xff09;づ╭❤&#xff5e;✨✨ &#x1f31f;&#x1f31f; 欢迎各位亲爱的读者&#xff0c;感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢&#xff0c;在这里我会分享我的知识和经验。&am…