【通信接口】UART、IIC、SPI

article/2025/11/7 2:41:09

目录

一、预备知识

1、串行与并行

2、单工与双工

3、波特率

二、UART 

三、IIC

四、SPI (一对一、一对多)

五、IIC、SPI异同点


参考文章:这些单片机接口,一定要熟悉:UART、I2C、SPI、TTL、RS232、RS422、RS485、CAN、USB、SD卡


一、预备知识

1、串行与并行

根据每次发送的二进制位数,可以分为串行、并行。串行只有一根总线,而并行一般有多根总线。总线数目的不同直接影响到每次传递的数据量。以传递一个字节为例。

串行每次只能传递 1 bit,所以要传输 8 次才能传递一个字节。

并行有 8 根总线,所以一次就可以传递一个字节(8 bit)。

2、单工与双工

根据数据传输的方向可以分为单工、双工通信,而双工通信又可以根据总线数目分为半双工、全双工通信。

  • 单工通信:数据的传输是单向的,发送器只负责发送,接收器只负责接收
  • 双工通信:
    • 半双工:一根总线,双方的发送和接收用的同一根总线
    • 全双工:两根总线,双方的发送和接收各有一根总线

3、波特率

用于描述串口的通信速度,单位bps(bit per second),即每秒传输的比特数

二、UART 

1、概念

UART 是一种通用的串行异步通信总线,该总线有两条数据线,TXD 用于发送数据,RXD用于接收数据,可以实现全双工的发送和接收,在嵌入式系统中常用于主机与辅助设备之间的通信。

2、帧格式

UART帧格式如下:

空闲时刻:默认维持在高电平

起始位:表示要开始发送数据了,此时会变为低电平

数据位:一般有8位,代表一个字节。

校验位:方便接收方核对数据是否被篡改(可有可无)

停止位:表示一帧数据的结束。相当于告知对方数据发送完毕,重新回到高电平(空闲状态)

三、IIC

1、概念

I2C总线是一种同步半双工双向的两线式串口总线。它由两条总线组成:串行时钟线SCL和串行数据线SDA。

  • SCL:负责产生时钟脉冲。一方可以在时钟脉冲的上升沿发送数据;另一方在下降沿接收数据
  • SDA:负责数据的传输

2、通信过程

主设备和从设备都可以作为发送设备或接收设备。无论主设备是作为发送设备还是接收设备,同步时钟信号都只能由主设备产生,主设备控制通信的开始与结束

主从设备建立连接

(1) 主设备发送一个起始信号启用总线

(2)主设备发送一个字节的数据指明要和哪个从设备通信,以及数据的传递方向(即主设备给从设备发数据,还是从设备给主设备发数据)

(3)被指名的从设备发送应答信号回应主设备

主从设备开始通信

建立连接以后,主从设备之外的设备,不可以发送数据。接下来就是主从设备的通信时间了。

(4)发送器发送一个字节的数据

(5)接收器收到数据以后发送应答信号,回应发送器

(6)... ...  循环步骤4、5

主从设备结束通信

(7)主设备发送停止信号中止本次通信

四、SPI (一对一、一对多)

1、概念

SPI总线是同步全双工双向的4线式串行接口总线。SPI采用主从的方式工作,可以一个主设备对应一个从设备,也可以一个主设备对应多个从设备。虽然是一个主设备对多个从设备的关系,但是每次通信依然是一个主设备和一个从设备通信。

  • MOSI(Master Out Slave In):主设备 ==》从设备(主设备发送,从设备接收)
  • MISO(Master In Slave Out):从设备 ==》主设备(主设备接收,从设备发送)
  • SCLK(Serial Clock):传输时钟信号,用于主从设备的同步
  • CS(chip select):选择从设备。

2、通信过程

主设备选择从设备

当主设备要和某个从设备进行通信时,主设备需要先向对应从设备的CS线上发送使能信号(高电平或者低电平,根据从机而定),表示选中该从设备。

数据传输

SPI 总线在进行数据传输的时候,先传送高位,后传送低位。比如要传送数字3,转换成二进制就是 0000 0011,因为是串行通信,每次只能传 1bit,所以需要决定先传送高位还是低位。

发送端发送信号:当时钟脉冲达到下降沿的时候,这段时间是发送数据的时间。

接收端接收信号:当时钟脉冲到达上升沿的时候,这段时间是接收数据的时间。

因此,SPI 可以在一个时钟周期内就完成数据的收发,可以无限制的连续发送和接收数据。

传输完毕或者继续传输

一个字节传输完成后无需应答,可以直接开始下一个字节的传递,也可以就此中止传输。SPI总线没有起始或者结束信号。

3、极性和相位

极性(CPOL)指的是时钟脉冲在空闲时刻的状态。

相位(CPHA)指的是采样时刻。比如是选择下降沿发送数据,还是上升沿发送数据。

对于特定的从设备来说,出厂时的工作模式就已经决定了,即极性和相位就已经决定好了。主设备的 CPOL 和 CPHA是可以手动配置的。在使用设备时,必须保证主设备的工作模式和从设备保持一致。

五、IIC、SPI异同点

相同点

1、都使用了时钟线

2、采用了TTL电平,这就限制了应用场景,传输距离不会很长,一般用于同一板卡上芯片之间的通信

3、都采用主从方式工作,主机可以管理和控制总线,从机只能被呼叫。

不同点

1、IIC有应答机制,SPI无需应答机制

2、IIC通过向总线广播从机地址来寻址,SPI通过向对应从机发送使能信号来选择从机

3、IIC的时钟极性和相位固定,SPI的时钟极性和相位可调


http://chatgpt.dhexx.cn/article/sE6qh9MQ.shtml

相关文章

基于FPGA的UART接口设计

一、顶层设计思路: UART即通用异步收发传输接口(Universal Asynchronous Receiver/Transmitter),简称串口,是一种常用的通信接口,其协议原理就不赘述了,不了解的可以自己查阅资料。(…

单片机通信接口:UART、I2C、SPI、TTL、RS232、RS422、RS485、CAN、USB

参考资料: 这些单片机接口,一定要熟悉:UART、I2C、SPI、TTL、RS232、RS422、RS485、CAN、USB、SD卡 秒懂所有USB接口类型,USB接口大全 1. UART UART(通用异步收发器)指的是一种物理接口形式(硬件)。 UART是异步,全双…

通信接口:UART、I2C、SPI、TTL、RS232、RS422、RS485、CAN、USB

1. UART UART(通用异步收发器)指的是一种物理接口形式(硬件)。 UART是异步,全双工串口总线。它比同步串口复杂很多。有两根线,一根TXD用于发送,一根RXD用于接收。 UART的串行数据传输不需要使用时钟信号来同步传输,而是依赖于发送…

USB,串口(RS232、RS485),UART接口

USB转串口即实现计算机USB接口到通用串口之间的转换。为没有串口的计算机提供快速的通道,而且,使用USB转串口设备等于将传统的串口设备变成了即插即用的USB设备。作为应用最广泛的USB接口,每台电脑必不可少的通讯接口之一,它的最大…

Uart接口的详细解释

我面试的时候一般喜欢问应聘者一个问题:UART与RS232/RS485的区别与联系?很多人对于这个问题答得都不是很好。还有些人压根就没有想过这个问题,一直认为他们是同一个东西,就是咱们俗称的串口。 我刚入嵌入式的大门时,对…

UART接口说明

逼近年关事情多,少了更新。今天冒个泡。说下UART通信接口。 UART扫盲 前面做了SPI和I2C,前两者一个是摩托,一个是飞利浦背书,简单好理解。这个UART就相对复杂一点,全称universal Asynchronous Receiver/Transmitter …

UART接口详解

文章目录 简介硬件接线RS232RS485RS232和RS485比较 通信原理uart和usart的区别实例针对STM32的串口数据位特点,改成对应PC的串口数据校验当使用9600波特率的时候,通讯稳定,当使用115200波特率的时候,通讯变得不稳定。 简介 UART全…

UART接口介绍

0 Preface/Foreword UART是Universal Asynchronous Receiver and Transmitter简称,中文为 通用异步接收和发送器,是常用的串行通讯接口。 RS-232:RS-232标准接口(aka. EIA RS-232)是常用的串行通信接口标准之一&#…

一文理解UART通信

还记得当年的打印机,鼠标和调制解调器吗?他们都有巨大笨重的连接器和粗电缆,并且必须拧到你的电脑上。这些设备正是使用UART协议与计算机进行通信。虽然USB几乎完全取代了旧的电缆和连接器,但UART绝对没有过时。您会发现目前许多项目中使用U…

Ajax传json对象(jQuery)

Ajax传json对象 相信很多小伙伴想要通过Ajax传输json数据给后端,本来直接发送一个data: JSON.stringify(obj)就可以了,但是发现后端的请求参数中有一个参数需要int类型,这个时候就需要用到对象了。 封装对象 首先得到数据并封装对象 &…

十分钟搞懂JSON(JSON对象---JSON字符串---对象 之间的区别)

好记性不如烂笔头&#xff0c;相信我&#xff0c;看了之后你会彻底搞懂JSON 前言&#xff1a;前天被JSON对象&#xff0c;JSON字符串&#xff0c;JAVA对象搞混了&#xff0c;不知道各自代表的意思&#xff0c;我就查了资料&#xff0c;总结为一篇博文。 另外我想List<User&g…

【python】将json字符串转化为json对象

首先导入python自带的json模块 import json loads方法将json<key,value>字符串转化为dict形式 info {"name":"Lucy","age":22,"addr": "China"} print(type(info)) info_dict json.loads(info) print(info_dict)…

将js对象转化为json对象

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title><script type"text/javascript">//编写 一个JavaScript对象&#xff0c;var user {name: "asdas",age…

Mysql JSON对象和JSON数组查询

文章目录 1. 函数说明2. JSON对象3. 字符串JSON数组3.1 AND关系3.2 OR关系 4. 对象数组5. 集成 Mybatis plus6. 模糊查询7. json_table7.1 分组计算总数7.2 对象去重 file_type可以是 varchar&#xff0c;也可以是 json类型 1. 函数说明 JSON_CONTAINS(json_doc, val[, path…

Json对象和Json字符串的区别

Json对象和Json字符串的区别 </h1><div class"clear"></div><div class"postBody"><div id"cnblogs_post_body" class"blogpost-body blogpost-body-html">1、Json概念 概念&#xff1a;JSON (JavaSc…

获取json对象的key

获取json对象的key值 我有一个json对象&#xff0c;我想获取每一个学生的信息&#xff0c;但是每次拿到的数据最外层的key值是随学生人数增加而变化的&#xff0c;并不是固定的。 所以我的思路为&#xff1a;先获取最外层的key&#xff0c;然后根据key获取value。 实现过程如下…

js操作json对象

工作中做了几款自动化测试工具都是跟日志读取相关&#xff0c;日志格式又大多数都是JSON&#xff0c;所以这里把常用的JS操作JSON的方法做了总结&#xff1a; 一、概念简介 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式&#xff0c;采用完全独立于语言的文本格…

嵌套 JSON 对象中的数组

JSON 对象中数组可以包含另外一个数组&#xff0c;或者另外一个 JSON 对象&#xff1a; var myObj {"name":"网站","num":3,"sites": [{ "name":"Google", "info":[ "Android", "Googl…

Js 给JSON对象排序

众所周知&#xff0c;json对象是没有顺序的。只有数组才有排序功能。 但我们遇到的业务场景里面&#xff0c;不仅仅需要对数组排序&#xff0c;也有需要对对象排序的情况。 例如下面这种数据&#xff1a; let data {zhangsan: {age: 18, height: 189}, lisi: {age: 18, hei…

嵌套 json对象

什么是嵌套json对象&#xff1f; ---- JSON 对象中可以包含另外一个 JSON 对象 你可以使用点号(.)或者中括号([])来访问嵌套的 JSON 对象。 <script>// 嵌套 json对象var myjson {"name":"老李","keywords":[狗,熊,李],"site"…