【数字ic自整资料】常见串行总线协议

news2024/11/25 12:52:24

参考链接


IIC总线的原理与Verilog实现_iic verilog-CSDN博客


I2C(IIC)的仲裁、时钟同步和时钟扩展_i2c,clock stretch波形-CSDN博客

精解IIC协议_iic写数据-CSDN博客

串行通信——UART总结-CSDN博客

SPI协议详解(图文并茂+超详细)-CSDN博客

目录

1、总线分类

2、IIC

2.1、IIC的时序

2.2、IIC的仲裁机制

3、UART

3.1、UART数据传输

4、SPI

4.1、SPI主从模式

4.2、SPI数据传输

4.3、时钟极性和时钟相位


1、总线分类

同步通信:阻塞通信,发送方发送数据后,接收方响应后才能发送下一个数据包(带时钟线);举例:SPI和IIC

异步通信:非阻塞通信,发送后不考虑接收方是否响应(不带时钟线);举例:UART

单工通信:固定主从,数据只能从主机到从机。

半双工通信:双方均可发送和接收数据,但是同一时间只能一方发送;举例:IIC。

全双工通信:双方可同时发送数据;举例:UART,SPI。

2、IIC

  1. 同步半双工总线,多主多从;

  2. 具有两根信号线:SDA(数据线),SCL(时钟线)。

  3. ‌I2C总线理论最多可以有127个从机。‌这是因为I2C协议使用7位地址,减去广播地址后,理论上可以挂载127个从设备。但实际上I2C协议并没有规定总线上设备的最大数目,而是规定了总线电容不能超过400pF。在实际设计中,经验值通常不超过8个器件。

  4. IIC总线上所有器件的SDA、SCL引脚输出驱动都为开漏(OD) 结构,通过外接上拉电阻实现总线上所有节点SDA、SCL信号的线与逻辑关系;

  5. IIC的ACK应答信号为通过SDA返回一个低电平,这是由于外接上拉电阻,只有低电平时候,才是主动改变的状态。每接收到一字节数据,就要产生一个应答信号。

  6. ‌IIC的传输速率模式包括标准模式、快速模式和高速模式。标准模式‌的传输速率为100kbit/s;快速模式‌的传输速率为400kbit/s;高速模式‌的传输速率可达3.4Mbit/s,但目前大多数I2C设备尚不支持高速模式。

2.1、IIC的时序

1、数据有效性

        IIC 的数据读取动作都在 SCL为高时产生,SCL为低时是数据改变的时期,无论SDA如何变化都不影响读取。所以,传输数据的过程中,当SCL为高时,数据应当保持稳定,避免数据的采集出错。

2、开始和结束信号

        开始信号(START/S):SCL为高时,SDA从高到低的跳变产生开始信号

        结束信号(STOP/P):SCL为高时,SDA从低到高的跳变产生结束信号

        这里是由于在数据有效性中规定了SCL为高的时候,数据必须稳定以方便采样,因此才设置了SDA在SCL为高是变化作为指示信号

3、写时序

4、读时序

        读时序最开始发送第一个设备端口号的时候,发送的是写指令。中间需要STOP一次传输,再重新开启。

5、字节传输与应答

        每一个字节必须保证是8bit长度。数据传送时,先传送最高位(MSB),每一个被传送的字节后面都必须跟随1bit的应答位(即每一帧数据一共有9bit),ACK为低电平应答信号,

2.2、IIC的仲裁机制

        (这部分我看的时候觉得很有意思,IIC的仲裁不像是之前APB那样靠的是仲裁器提前设置优先级,而是单纯凭借它的硬件电路结构)

        发生仲裁的前提是,一条总线上挂载了多个主机,并且这些主机都支持多主机模式,即每一个主机都可以实时监测SDA以及SCL的情况,从而通过start和stop位来确定总线的情况(被占用还是空闲)。当多个主机检测到当前总线处于空闲状态时(这里以2个主机为例),可能会同时发出启动标志位(发出的时间间隔很短,因此无法检测到其他节点产生的电平变化,误认为总线是空闲的),这时候仲裁机制开始生效。

        总线归属权的仲裁是通过SDA线完成的。由于IIC的总线设计是线与(wired-AND),因此低电平是显性电平。只要有一个节点将SDA拉低,那么整条总线都会拉至低电平。在两个主机都认为总线空闲并开始通信之后,当遇到第一个两者发送的不同的位时,会决出总线的归属者。

        设主机1将向address为0b10100111的从机发送数据,主机2将向addres为0x10101000的从机发送数据。两者都占有总线并同时向SDA写入数据。注意IIC发送的顺序是MSB->LSB(先发送高位)。两者的前四位数据相同,而当发送进行到第五个时钟周期时,master1的第五位为0,而master2的第五位为1,此时根据线与特性,SDA总线的电平会被master1拉低。master2会检测到自己要发送的电平和总线的实际电平不符,从而获知有其他主机正在发送,随之停止后续的发送,让出总线的归属权。若两主机向相同的地址写入数据,那么仲裁过程将继续,直到在后续的数据位中决出总线的归属权(仍然是通过上述的方法)。

        IIC的仲裁是通过采样SDA完成的,因此不会破坏数据的有效性,通信不会停止,也不会有数据帧丢失。但是IIC不具有主机优先级的设定,因为总线的归属权是根据主机发送的数据确定的,因此无法提前为每个主机设定发送或接收的优先级。

3、UART

  1. UART是异步,全双工串口总线,一对一,不支持多主多从结构。

  2. TXD用于发送数据,RXD用于接收数据。UART的串行数据传输不需要使用时钟信号来同步传输,而是依赖于发送设备和接收设备之间预定义的配置。

  3. UART负责处理数据总线和串行口之间的串/并、并/串转换,并规定了帧格式;通信双方只要采用相同的帧格式和波特率,就能在未共享时钟信号的情况下,仅用两根信号线(RX 和TX)就可以完成通信过程。

3.1、UART数据传输

        数据传送速率用波特率来表示,即每秒钟传送的二进制位数。例如数据传送速率为120字符/秒,而每一个字符为10位(1个起始位,7个数据位,1个校验位,1个结束位),则其传送的波特率为10×120=1200字符/秒=1200波特。

        比特率和波特率区别:比特率指的是传输的有效位数个数。上面案例中10位数据,其中有效数据只有7个,比特率为7x120=840比特。

        异步通信是按字符传输的,接收设备在收到起始信号之后只要在一个字符的传输时间内能和发送设备保持同步就能正确接收。下一个字符起始位的到来又使同步重新校准(依靠检测起始位来实现发送与接收方的时钟自同步的)。

        由于UART是异步传输,没有传输同步时钟,为了保证数据的正确性,UART采用16倍数据波特率的时钟进行采样。每个数据有16个时钟采样,取中间的采样值,以保证采样不会滑码或误码。一般UART一帧的数据位数为8,这样即使每个数据有一个时钟的误差,接收端也能正确地采样到数据。

        UART的接收数据时序为:当检测到数据的下降沿时,表明线路上有数据进行传输,这是计数器CNT开始计数,当计数器为24=16+8时,采样的值为第0位数据;当计数器的值为40时,采样的值为第一位数据,依次类推,进行后面6个数据的采样。如果需要进行奇偶校验,则当计数器的值为152时,采样的值即为奇偶位;当计数器的值为168时,采样的值为“1”表示停止位,数据接收完成。

        尽管UART在某些方面效率较低,但其优点是通信线路简单,利用简单的线缆就可实现通信,降低成本,适用于远距离通信。此外,由于其设计简单和易于实现,UART在嵌入式系统中仍然广泛使用。

4、SPI

  1. 同步,全双工串口总线,一对多,不支持多主机。(正好这三种串行总线在主从数量上都完全不一样)。

  2. 产生时钟信号的器件称为主机,主机和从机之间传输的数据与主机产生的时钟同步。同I2C接口相比,SPI器件支持更高的时钟频率。

  3. 灵活的数据传输方法,不限于8位,可以是任意大小的字。从机不需要唯一的地址。

  4. 没有硬件从机应答信号,没有只能支持比较短的距离。

4.1、SPI主从模式

SPI单从机模式:

SPI多从机模式:

https://i-blog.csdnimg.cn/blog_migrate/b9409f3f6dada5d5b5188235c3caf8c4.jpeg

        片选信号CS通常是一个低电平有效的信号;如果要和特定的从机进行通讯,可以将相应的 CS信号线拉低,并保持其他 CS信号线的状态为高电平:如果同时将两个CS信号线拉低,则可能会出现乱码,因为从机可能都试图在同一条 MIS0 线上传输数据,最终导致接收数据乱码。

4.2、SPI数据传输

        开始信号:主机发送时钟信号,并通过使能CS信号选择从机。

        SPI是全双工接口,主机和从机可以分别通过MOSI和MISO线路同时发送数据。在SPI通信期间,数据的发送(串行移出到MOSI/SDO总线上)和接收(采样或读入总线(MISO/SDI)上的数据)同时进行。

        在每个SPI时钟周期内,都会发生全双工数据传输。

        主机在MOSI 线上发送一位数据,从机读取它,而从机在 MIS0 线上发送一位数据,主机读取它就算只进行单向的数据传输,也要保持这样的顺序。这就意味着无论接收任何数据,必须实际发送些东西!在这种情况下,我们称其为虚拟数据。

4.3、时钟极性和时钟相位

        在 SPI 中,主机可以选择时钟极性和时钟相位。在空闲状态期间,CPOL为设置时钟信号的极性。空闲状态是指传输开始时 CS为高电平且在向低电平转变的期间,以及传输结束时 CS 为低电平且在向高电平转变的期间。CPHA 为选择时钟相位。

        根据CPHA位的状态,使用时钟上升沿或下降沿来采样和/或移位数据。主机必须根据从机的要求选择时钟极性和时钟相位。根据 CPOL 和 CPHA 位的选择,有四种SPI 模式可用。

        数据传输举例,CPOL=0,CPHA=0:

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

java.lang.IllegalAccessError: class lombok.javac.apt.LombokProcessor

更换JDK java.lang.IllegalAccessError: class lombok.javac.apt.LombokProcessor (in unnamed module 0x3302035b) cannot access class com.sun.tools.javac.processing.JavacProcessingEnvironment (in module jdk.compiler) because module jdk.compiler does not export …

【大模型推理】大模型前向推理过程详解

文章目录 前期准备环境安装下载模型Qwen2-7b模型架构vscode配置launch.json文件 前向推理debug深入分析预测第一个next_token预测第二个next_token 为了搞清楚,大模型前向推理的具体流程,本文以Qwen2-7B-Instruct为例,通过直接debug官方推理示…

战外网配置——光猫桥接+路由器PPPoE拨号+防火墙外网链路健康检查+外网流量负载均衡

一、适用场景: 1、企业规模较大时,1条公网带宽流量可能不足,需要用到多条公网出口时。 2、企业有业务需要静态ip映射,但是因静态ip专线价格较高,所以需要拨号光纤承载较多的下行流量。 3、当公网出口有多条链路&#…

最大矩阵和

题目描述 给定一个二维整数矩阵&#xff0c;要在这个矩阵中选出一个子矩阵. 使得这个子矩阵内所有的数字和尽量大&#xff0c;我们把这个子矩阵称为和最大子矩阵 子矩阵的选取原则是原矩阵中一块相互连续的矩形区域。 输入描述 输入的第一行包含2个整数n,m(1< n,m< 10…

C++设计模式——Interpreter解释器模式

一&#xff0c;解释器模式的定义 解释器模式是一种行为型设计模式&#xff0c;它用于定义一个语言的文法并解析语言中的表达式&#xff0c;使开发者可以实现自定义语言&#xff0c;并通过解释器对语言中的表达式进行解析和执行。 解释器模式主要用于解决对特定表达式的解析与…

python-游戏自动化(三)(实战-豆腐女孩)

前提准备 特别注意&#xff1a; 本节教程所演示的模拟器分辨率设置为 720x1080&#xff08;手机版&#xff09;&#xff0c;电脑分辨率设置大720x1080并且没有设置放大。 今天的课程开始之前我们来回顾一下昨天所学的知识内容&#xff0c;因为今天要学的内容和昨天内容…

CogView-3-Plus:深度解锁智谱AI的图像生成新力量

一、引言&#xff1a;AI助力创意与效率的全面提升 在如今这个瞬息万变的科技时代&#xff0c;AI大模型早就不是实验室里的“神秘武器”&#xff0c;它们已经实实在在地融入到我们的日常工作中了&#xff0c;尤其是在图像生成和内容创作这块儿&#xff0c;简直是效率神器。只要几…

Leetcode3270. 求出数字答案

Every day a Leetcode 题目来源&#xff1a;3270. 求出数字答案 解法1&#xff1a;模拟 按题意模拟。 代码&#xff1a; /** lc appleetcode.cn id3270 langcpp** [3270] 求出数字答案*/// lc codestart class Solution { public:int generateKey(int num1, int num2, int…

基于python+django+vue鲜花商城系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 【2025最新】基于pythondjangovueMySQL的线…

反射(java)

一、junit单元测试框架 1、单元测试 就是针对最小的功能单元&#xff08;方法&#xff09;&#xff0c;编写测试代码对其进行正确性测试。 之前的是如何进行单元测试的&#xff1f; 有啥问题&#xff1f; 1、只能在ma方法编写测试代码&#xff0c;去调用其他方法进行测试。…

CCS811二氧化碳传感器详解(STM32)

目录 一、介绍 二、传感器原理 1.原理图 2.引脚描述 3.工作原理介绍 三、程序设计 main.c文件 ccs811.h文件 ccs811.c文件 四、实验效果 五、资料获取 项目分享 一、介绍 CCS811模块是一种气体传感器&#xff0c;可以测量环境中TVOC(总挥发性有机物质)浓度和eCO2…

OPPO 全家桶:Find X8/Pro、Pad3 Pro与Enco X3即将10月登场

随着科技的不断发展&#xff0c;智能手机、平板电脑和耳机等电子产品已经成为我们日常生活中不可或缺的一部分。 作为全球知名的科技企业&#xff0c;OPPO一直致力于为消费者提供优质的产品和服务。 近日&#xff0c;有关OPPO全家桶将在10月份“凑齐”的消息引起了广泛关注。…

Elemnt-UI + 递归组件实现后台管理系统左侧菜单

Elemnt-UI 递归组件实现后台管理系统左侧菜单 在 Vue.js 中&#xff0c;允许你编写一个组件来表示一个节点&#xff0c;而这个节点可以包含多个子节点&#xff0c;每个子节点又可以是同样的组件。这种方式使得组件能够处理无限层级的嵌套结构。 应用场景 递归组件非常适合处…

2013年

B D B C D 分支结点是非叶结点 B 47 C A C C D D C A C

2010-2022年各省乡村振兴新质生产力相关变量数据(40+指标)

2010-2022年各省乡村振兴新质生产力相关变量数据&#xff08;40指标&#xff09; 1、时间&#xff1a;2010-2022年 2、来源&#xff1a;统计年鉴、能源统计年鉴、农村统计年鉴、人口和就业统计年鉴、城乡建设统计年鉴以及各省份统计年鉴 3、指标&#xff1a;省份、年份、分地…

信号量(二值信号量和计数信号量)和互斥量

信号量 信号量&#xff08;Semaphore&#xff09; 是一种实现任务间通信的机制&#xff0c; 可以实现任务之间同步或临界资源的互斥访问&#xff0c; 常用于协助一组相互竞争的任务来访问临界资源。 在多任务系统中&#xff0c; 各任务之间需要同步或互斥实现临界资源的保护&a…

图神经网络介绍3

1. 图同构网络&#xff1a;Weisfeiler-Lehman 测试与图神经网络的表达力 本节介绍一个关于图神经网络表达力的经典工作&#xff0c;以及随之产生的另一个重要的模型——图同构网络。图同构问题指的是验证两个图在拓扑结构上是否相同。Weisfeiler-Lehman 测试是一种有效的检验两…

第二期: 第二节 , 逻辑编程 , gpio

1 首先就是 看原理图&#xff1a; 这里有两个 &#xff2c;&#xff25;&#xff24; 核心板的原理图。 可以看到 是这个脚。 &#xff12; 然后就是 查看数据手册。 从 数据手册可以看出 &#xff0c;一共有这么多的 gpio 组&#xff0c; 但是这些 组 是有复用的&#xf…

多文件编程实现链表创建,插入,输出(上)

linklist.c #include "linklist.h" //创建空的链表&#xff0c;为头结点在堆区分配空间 linklist_t *creat_empty_linklist() {linklist_t *head NULL;head (linklist_t *) malloc(sizeof(linknode_t));if(NULL head){printf("malloc is fail!\n");ret…

网格参数的应用和数学基础

引言 对于任意两个拓扑结构相似的表面&#xff0c;可以计算它们之间的一一对应映射。如果其中一个表面由三角形网格表示&#xff0c;那么计算这种映射的问题被称为网格参数化。映射到的表面通常被称为参数域。表面网格与各种域之间的参数化在计算机图形学和几何处理中有广泛的应…