嵌入式中的通讯协议——UART、I2C、SPI、DMA

2023-05-16

目录

一、通讯的基本概念

二、USART——串口通讯

三、I2C通讯协议

四、SPI通讯协议

五、DMA——直接存储器存取

六、USART/I2C/SPI比较


一、通讯的基本概念

1、串行通讯与并行通讯(按数据的传送方式)

串行通讯:指设备之间通过少量数据信号线(一般是 8 根以下),地线以及控制信号线,按数据位形式一位一位地传输数据的通讯方式。

并行通讯:指使用 8、16、32 及 64 根或更多的数据线进行传输的通讯方式,同时传输多个数据位的数据。

两者比较:在数据传输速率相同时,并行效率更高,可以传输更多数据量;而串行通讯节省成本。并行传输对同步要求较高,且随着通讯速率的提高,信号干扰的问题会显著影响通讯性能。比较如下:

2、全双工、半双工、单工通讯(按数据通讯方向)

全双工:在同一时刻,两个设备间可以同时收发数据;

半双工:两设备间可以收发数据,但不能在同一时刻进行;

单工:在任何时刻只能进行一个方向的通讯,且固定一方为发送设备,一方为接收设备。

3、同步通讯和异步通讯(数据通讯的同步方式):是否使用时钟信号进行区分

同步通讯:收发设备双方会使用一根信号线表示时钟信号,在时钟信号的驱动下双方进行协调,同步数据。通讯中通常双方会统一规定在时钟信号的上升沿或下降沿对数据线进行采样。

异步通讯:不使用时钟信号进行数据同步,直接在数据信号中穿插一些同步用的信号位,或者把主体数据进行打包,以数据帧的格式传输数据,某些通讯中还需要双方约定数据的传输速率,以便更好地同步。

两者比较:在同步通讯中,数据信号所传输的内容绝大部分就是有效数据,而异步通讯中会包含有帧的各种标识符,所以同步通讯的效率更高,但是同步通讯双方的时钟允许误差较小,而异步通讯双方的时钟允许误差较大。

4、通讯速率:比特率和波特率

比特率(Bitrate):每秒钟传输的二进制位数,单位为比特每秒(bit/s)。

波特率(Baudrate):表示每秒钟传输了多少个码元。

 

二、USART——串口通讯

包括RS232、RS499、RS423、RS422和RS485等接口规范和标准规范。

串口通讯协议的物理层及协议层:

1、物理层:串口通讯的物理层有很多标准及变种,主要有RS-232标准,一般只使用 RXD、TXD 以及 GND 三条信号线,直接传输数据信号。

2、协议层:串口通讯的数据包由发送设备通过自身的 TXD 接口传输到接收设备的 RXD 接口。在串口通讯的协议层中,规定了数据包的内容,它由启始位、主体数据、校验位以及停止位组成,通讯双方的数据包格式要约定一致才能正常收发数据。

数据校验:

奇校验:有效数据和校验位中“1”的个数为奇数;

偶校验:有效数据和校验位中“1”的个数为偶数;

3、USART——通用同步异步收发器(Universal Synchronous Asynchronous Receiver and Transmitter)

RX、TX

串行通信:以帧格式传输数据,即是一帧一帧的传输,每帧包含有起始信号、数据信息、停止信息,可能还有校验信息。

字符帧:一个字符帧发送需要三个部分:起始位+数据帧+停止位。起始位是一个位周期的低电平,位周期就是每一位占用的时间;数据帧就是我们要发送的 8 位或 9 位数据,数据是从最低位开始传输的;停止位是一定时间周期的高电平。

 

三、I2C通讯协议

I2C通讯协议(Inter-Integrated Circuit):由 Phiilps 公司开发的,由于它引脚少,硬件实现简单,可扩展性强,不需要 USART、CAN 等通讯协议的外部收发设备,现在被广泛地使用在系统内多个集成电路(IC)间的通讯。

1、物理层:双向串行数据线(SDA),串行时钟线(SCL)

(1) 它是一个支持设备的总线。“总线”指多个设备共用的信号线。在一个 I2C 通讯总线中,可连接多个 I2C 通讯设备,支持多个通讯主机及多个通讯从机。
(2) 一个 I2C 总线只使用两条总线线路,一条双向串行数据线(SDA) ,一条串行时钟线(SCL)。数据线即用来表示数据,时钟线用于数据收发同步。

(3) 每个连接到总线的设备都有一个独立的地址,主机可以利用这个地址进行不同设备之间的访问。
(4) 总线通过上拉电阻接到电源。当 I2C 设备空闲时,会输出高阻态,而当所有设备都空闲,都输出高阻态时,由上拉电阻把总线拉成高电平。
(5) 多个主机同时使用总线时,为了防止数据冲突,会利用仲裁方式决定由哪个设备占用总线。

2、协议层:定义了通讯的起始和停止信号、数据有效性、响应、仲裁、时钟同步和地址广播等环节。

(1)I2C基本读写过程

S:传输开始信号;SLAVE_ADDRESS: 从机地址;R/W:传输方向选择位,1为读,0为写
A/A:应答(ACK)或非应答(NACK)信号;P:停止传输信号

通讯过程:起始信号产生后,所有从机就开始等待主机紧接下来广播 的从机地址信号(SLAVE_ADDRESS)。在 I2C 总线上,每个设备的地址都是唯一的,当主机广播的地址与某个设备地址相同时,这个设备就被选中了,没被选中的设备将会忽略之后的数据信号。根据 I2C协议,这个从机地址可以是 7位或 10位。在地址位之后,是传输方向的选择位,该位为 0 时,表示后面的数据传输方向是由主机传输至从机,即主机向从机写数据。该位为 1时,则相反,即主机由从机读数据。从机接收到匹配的地址后,主机或从机会返回一个应答(ACK)或非应答(NACK)信号,只有接收到应答信号后,主机才能继续发送或接收数据。

读和写数据:I2C通讯更常用的是复合格式,该传输过程有两次起始信号(S)。一般在第一次传输中,主机通过 SLAVE_ADDRESS 寻找到从设备后,发送一段“数据”,这段数据通常用于表示从设备内部的寄存器或存储器地址(注意区分它与 SLAVE_ADDRESS 的区别);在第二次的传输中,对该地址的内容进行读或写。第一次通讯是告诉从机读写地址,第二次则是读写的实际内容。

(2)通讯的起始和停止信号:起始和停止信号一般由主机产生

起始信号:SCL为高,SDA 高 —>低;

停止信号:SCL为高,SDA 低 —>高;

(3)数据有效性:传输时,SCL 为高电平的时候 SDA 表示的数据有效,即此时的 SDA 为高电平时表示数据“1”,为低电平时表示数据“0”。当 SCL为低电平时,SDA 的数据无效,一般在这个时候 SDA 进行电平切换,为下一次表示数据做好准备。

3、I2C特性及架构

软件模拟协议:直接控制芯片的两个 GPIO 引脚,分别用作 SCL 及 SDA,按照上述信号的时序要求,直接控制引脚的输出(若是接收数据时则读取 SDA 电平),就可以实现 I2C 通讯。由直接控制 GPIO 引脚电平产生通讯时序时,需要由 CPU 控制每个时刻的引脚状态。

硬件协议:STM32 的 I2C 片上外设专门负责实现 I2C 通讯协议,只要配置好该外设,它就会自动根据协议要求产生通讯信号,收发数据并缓存起来,CPU只要检测该外设的状态和访问数据寄存器,就能完成数据收发。

 

四、SPI通讯协议

SPI(Serial Peripheral Interface):串行外围设备接口,是一种高速全双工的通信总线。

1、SPI物理层:3条总线及片选线(SCK、MOSI、MISO、片选线共4根)

(1)片选线:从设备选择信号线,当有多个 SPI 从设备与 SPI 主机相连时,设备的其它信号线 SCK、MOSI及 MISO同时并联到相同的 SPI总线上,即无论有多少个从设备,都共同只使用这 3 条总线;而每个从设备都有独立的这一条 NSS 信号线,本信号线独占主机的一个引脚,即有多少个从设备,就有多少条片选信号线。I2C 协议中通过设备地址来寻址、选中总线上的某个设备并与其进行通讯;而 SPI 协议中没有设备地址,它使用 NSS 信号线来寻址,当主机要选择从设备时,把该从设备的 NSS 信号线设置为低电平,该从设备即被选中片选有效,接着主机开始与被选中的从设备进行 SPI 通讯。所以SPI通讯以 NSS 线置低电平为开始信号,以 NSS 线被拉高作为结束信号。

(3) MOSI(Master Output,Slave Input):主设备输出/从设备输入引脚。主机的数据从这条信号线输出,从机由这条信号线读入主机发送的数据,即这条线上数据的方向为主机到从机。
(4) MISO(Master Input,Slave Output):主设备输入/从设备输出引脚。主机从这条信号线读入数据,从机的数据由这条信号线输出到主机,即在这条线上数据的方向为从机到主机。

2、协议层:SPI 协议定义了通讯的起始和停止信号、数据有效性、时钟同步等环节。

SPI通讯时序:

(1)通讯的起始和停止信号:

起始信号:NSS 信号线由高变低,是 SPI 通讯的起始信号。NSS 是每个从机各自独占的信号线,当从机在自己的 NSS 线检测到起始信号后,就知道自己被主机选中了,开始准备与主机通讯。

停止信号:NSS 信号由低变高,是 SPI 通讯的停止信号,表示本次通讯结束,从机的选中状态被取消。

(2)数据有效性:SPI 使用 MOSI 及 MISO 信号线来传输数据,使用 SCK 信号线进行数据同步。MOSI及 MISO 数据线在 SCK 的每个时钟周期传输一位数据,且数据输入输出是同时进行的。MOSI 及 MISO 的数据在 SCK 的上升沿期间变化输出,在 SCK的下降沿时被采样。即在 SCK的下降沿时刻,MOSI及 MISO 的数据有效,高电平时表示数据“1”,为低电平时表示数据“0”。在其它时刻,数据无效,MOSI 及 MISO为下一次表示数据做准备。SPI每次数据传输可以 8 位或 16 位为单位,每次传输的单位数不受限制。

 

五、DMA——直接存储器存取

DMA(Direct Memory Access):是单片机的一个外设,它的主要功能是用来搬数据,但是不需要占用 CPU,即在传输数据的时候,CPU 可以干其他的事情,好像是多线程一样。数据传输支持从外设到存储器或者存储器到存储器

1、DMA请求:如果外设要想通过 DMA 来传输数据,必须先给 DMA 控制器发送 DMA 请求,DMA收到请求信号之后,控制器会给外设一个应答信号,当外设应答后且 DMA 控制器收到应答信号之后,就会启动 DMA的传输,直到传输完毕。

2、通道:DMA 具有 12 个独立可编程的通道,其中 DMA1 有 7 个通道,DMA2 有 5 个通道,每个通道对应不同的外设的 DMA 请求。虽然每个通道可以接收多个外设的请求,但是同一
时间只能接收一个,不能同时接收多个。

3、仲裁器:当发生多个 DMA 通道请求时,就意味着有先后响应处理的顺序问题,这个就由仲裁器理。

4、DMA 数据配置: DMA 传输数据的方向有三个——从外设到存储器,从存储器到外设,从存储器到存储器。

 

六、USART/I2C/SPI比较

1、通信速率比较:

SPI > I2C > UART
(1)同步通信>异步通信;
(2)同步通信时必须有一根时钟线连接传输的两端;
(3)都是串行通信方式,并行通信用于内部存储间的通信,如flash;
(4)适合传输的距离和通信速率成反比关系;

2、连线方式:
SPI:2数据线、1时钟线、1CS(设备片选线),串行同步通信全双工;
I2C:1数据线、1时钟线,串行同步通信半双工,传输距离比UART短;
UART:2数据线、1地线,串行异步通信全双工,传输距离比I2C长些;

(I2C接口是“器件间”接口,是在一块板子之内传输数据)
(UART是 “设备间”接口,更多的是用于两台设备之间传输数据)

 

 

 

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

嵌入式中的通讯协议——UART、I2C、SPI、DMA 的相关文章

  • STM32状态机编程实例——全自动洗衣机(上)

    前面几篇文章 xff0c 以按键功能 xff0c 介绍了状态机的原理与按键状态机实例 xff0c 实现按键单击 双击 长按等状态的检测 本篇 xff0c 继续使用状态机编程 xff0c 来实现一个更有趣的功能 全自动洗衣机 1 全自动洗衣机
  • Keil的stm32工程中一些文件的作用

    stm32工程中有一堆文件如下 xff1a 一直没搞明白他们的作用 xff0c 现整理如下 xff1a 从start文件夹开始 xff0c 第一个文件startup stm32f10x md s 这是启动文件 xff0c 是用汇编语言编写的
  • FreeRTOS消息队列、信号量、事件组、任务通知之间的总结

    转载自 xff1a FreeRTOS消息队列 信号量 事件标志组 任务通知 丨匿名用户丨的博客 CSDN博客 功能及区别列表 消息队列 xff08 需要传递消息时使用 xff09 在任务与任务间 中断和任务间传递信息 xff0c 可以数据传
  • FreeRTOS小项目实战------基于FreeRTOS和stm32的门禁系统

    目录 收获 系统总体框架 程序框架 具体程序实现 工程文件网盘链接 收获 学习freertos的移植与裁剪 xff0c 对任务间通信的认识更加深刻 xff0c 加深了实时操作系统的理解 xff0c 学习了as608指纹模块 xff0c rc
  • 自制操作系统12:移动鼠标 - 中断机制探秘,捕获键盘中断

    参考 xff1a https www bilibili com video BV1VJ41157wq p 61 12 amp spm id from 61 pageDriver https blog csdn net tyler downl
  • 全日制和非全日制的含金量是哪个高啊?

    我们不该拿成人学历去和普通全日制的学历去比较 xff0c 去纠结成人学历的含金量高与低 成人在职人士只是需要学历作为人生进步的敲门砖 不是每个人都有魄力和时间去重新参加全日制高考 xff0c 读完三 四年的全日制学历再去工作
  • c/c++笔试

    1 xff0e 进程和线程的差别 线程是指进程内的一个执行单元 也是进程内的可调度实体 与进程的区别 1 调度 xff1a 线程作为调度和分配的基本单位 xff0c 进程作为拥有资源的基本单位 2 并发性 xff1a 不仅进程之间可以并发执
  • Linux摄像头驱动1——vivid

    CSDN仅用于增加百度收录权重 xff0c 排版未优化 xff0c 日常不维护 请访问 xff1a www hceng cn 查看 评论 本博文对应地址 https hceng cn 2018 03 08 Linux摄像头驱动1 vivid
  • webrtc 百亿流媒体服务器开发(1)-服务器编程基础

    webrtc 百亿流媒体服务器开发 xff08 1 xff09 网络编程基础 xff08 1 xff09 文章目录 如何开发以一个简单服务器 信号什么是信号信号的处理方式都有哪些信号 几个重要的信号发送信号signal xff08 xff0
  • 不知道怎么开发VR游戏?Unity5.3官方VR教程重磅登场-系列3 VR中的交互方式

    不知道怎么开发VR游戏 xff1f Unity5 3官方VR教程重磅登场 系列3 VR中的交互方式 王寒 4 个月前 https zhuanlan zhihu com p 20505470 概览 xff1a 在VR项目中 xff0c 我们需
  • md5.pro.js前端MD5加密插件

    下载地址 例如我们对abc进行md5加密 xff0c 则只需要调用hex md5 34 md5 34 xff0c 方法则会返回加密后的字符串900150983cd24fb0d6963f7d28e17f72 dd
  • 【项目经验】Jetson xavier nx开发板-从裸机到深度学习环境配置

    Jetson xavier nx 开发板 一 镜像安装 参考博文Jetson Xavier NX 烧写系统镜像 1 镜像下载 到英伟达官方下载地址https developer nvidia com zh cn embedded downl
  • ROS探索总结(十五)——amcl(导航与定位)

    在理解了move base的基础上 xff0c 我们开始机器人的定位与导航 gmaping包是用来生成地图的 xff0c 需要使用实际的机器人获取激光或者深度数据 xff0c 所以我们先在已有的地图上进行导航与定位的仿真 amcl是移动机器
  • 关于ROS学习的一些反思

    距离发布上一篇ROS的博客已经过去两年了 xff0c 才发现原来自己已经这么久可没有写过关于ROS的文章 xff0c 想来很是惭愧 这两年时间 xff0c 自己怀着程序员的梦想 xff0c 研究过RTOS xff0c 探索过Linux xf
  • ROS探索总结(十八)——重读tf

    在之前的博客中 xff0c 有讲解tf的相关内容 xff0c 本篇博客重新整理了tf的介绍和学习内容 xff0c 对tf的认识会更加系统 1 tf简介 1 1 什么是tf tf是一个让用户随时间跟踪多个参考系的功能包 xff0c 它使用一种
  • ROS探索总结(十二)——坐标系统

    在机器人的控制中 xff0c 坐标系统是非常重要的 xff0c 在ROS使用tf软件库进行坐标转换 相关链接 xff1a http www ros org wiki tf Tutorials Learning tf 一 tf简介 我们通过一
  • qt切换设置多个ui界面的两种方式

    qt切换多个ui界面的两种方式 这是本人写的第一篇问文章 xff0c 有什么问题请大家多多批评指正 话不多说 xff0c 进入正文 xff1a 老师最近接了一个自来水管检漏的项目 xff0c 需要制作上位机来接收传感器传来的数据 于是果断选
  • firebird数据库安装连接的一些常见错误及解决方法

    firebird数据库安装连接的一些常见错误及解决方法 最近有一个需求是把数据库里面的数据提取出来 xff0c 这个数据库的后缀是 fdb xff0c 查阅资料可知应该是firebird数据库的文件 xff0c 可是firebird数据库是
  • PX4与Gazebo、ROS/MAVROS以及QGC地面站之间的通信

    PX4与Gazebo ROS MAVROS以及QGC地面站之间的通信 一 整体框架 ROS xff08 机器人操作系统 xff09 可用于PX4和Gazebo模拟器 它使用MAVROS MAVLink节点与PX4通信 ROS Gazebo与
  • 四旋翼飞行器控制模型公式推导

    四旋翼飞行器控制模型 为便于建立模型 xff0c 现对四旋翼飞行器进行以下假设 xff1a 1 四旋翼飞行器是均匀对称的刚体 2 四旋翼飞行器的质量和转动惯量不发生改变 3 四旋翼飞行器的几何中心与其重心重合 4 四旋翼飞行器只受重力和螺旋

随机推荐

  • java中几种读取配置文件的方法

    java读取 properties配置文件的几种方法 xff08 1 xff09 Properties类读取 Properties类继承自Hashtable类并且实现了Map接口 xff0c 也是使用一种键值对的形式来保存属性集 不过Pro
  • Java项目分层

    MVC模式 在实际的开发中有一种项目的程序组织架构方案叫做MVC模式 xff0c 按照程序 的功能将他们分成三个层 xff0c 如下图 xff1a Modle层 xff08 模型层 xff09 View层 xff08 显示层 xff09 C
  • 简单介绍控制理论(经典、现代)

    1 经典和现代的区别和联系 xff08 1 xff09 区别 研究对象 经典控制系统一般局限于单输入单输出 线性定常系统 主要分为开环控制系统和闭环控制系统 严格的说 xff0c 理想的线性系统在实际中并不存在 实际的物理系统 xff0c
  • 框架中<include>**/*.xml</include>配置解释

    在mybatis Spring SpringMVC SpringBoot等框架的配置文件中经常会使用到如下代码 xff1a lt resource gt lt directory gt src main java lt directory
  • 反转单链表的几种方式对比(包括双指针法和递归)

    需求 xff1a 给你单链表的头节点 head xff0c 请你反转链表 xff0c 并返回反转后的链表 方式一 xff1a 双指针法 建立一个虚拟节点 class Solution public ListNode reverseList
  • 正则表达式 ^$ 同时出现代表什么

    与 同时出现在正则前后表示什么 xff1f 脱字符 xff1a 匹配开头 xff0c 若存在多行匹配多行的行头 美元符 xff1a 匹配尾部 xff0c 若存在多行匹配多行的尾部 同时写时只是限制字符的起点与终点 xff0c 比如 xff1
  • 设置虚拟机为固定IP,避免每次启动虚拟机都会分配新的IP地址

    采用一种最简单的方式 xff0c 通过修改配置文件来指定IP xff0c 并可以连接到外网 要求 xff1a 将IP地址配置为静态的 xff0c 比如设固定IP地址为192 168 117 131 打开文件 etc sysconfig ne
  • 我的2014--众人皆醉我独醒

    转眼间大学两年过去了 xff0c 舍友们还在撸游戏 xff0c 有的也找到了另一半的归属 我是我宿舍唯一一个不玩电脑游戏的人 xff0c 当然 xff0c 不是不玩游戏就代表着成绩很好 xff0c 也不代表玩游戏就不好 xff0c 但意味着
  • Java多线程通信-利用传统的线程通信wait(),notify()方法实现“生产者消费者模式”

    想利用传统的线程通信wait notify xff0c notifyAll 方法 xff0c 必须依赖于同步监听器的存在 xff0c 也就是说 xff0c 对于synchronized修饰的同步方法 xff0c 因为该类的默认实例 xff0
  • java TCP/IP实现简单的多人聊天功能

    TCP IP是可靠的网络协议 xff0c 数据的传输需要服务端和客户端之间三次 握手 xff0c 比较适合文本等一些可靠性要求高的数据传输 xff0c 但是它的效率较UDP低 下面通过一张图来简要说明使用 ServerSocket 创建 T
  • 死锁面试题(什么是死锁,产生死锁的原因及必要条件)

    什么是死锁 xff1f 所谓死锁 xff0c 是指多个进程在运行过程中因争夺资源而造成的一种僵局 xff0c 当进程处于这种僵持状态时 xff0c 若无外力作用 xff0c 它们都将无法再向前推进 因此我们举个例子来描述 xff0c 如果此
  • 标准模板库-容器

    标准模板库STL Standard Template Libarary 是一个标准类与函数模板的库 STL包含容器 容器适配器 迭代器 算法 函数对象和函数适配器 容器 用来存储和组织其他对象的对象 T是存储在容器中的元素类型的模板类型形参
  • Ubuntu18.04安装PX4踩坑、报错及解决方案整理

    笔者最近需要跑无人机巡检大坝的仿真 xff0c 于是在自己的Ubuntu2018 04中开始安装PX4 xff0c 问过不少之前已经装过PX4的师兄和同学 xff0c 都曾在PX4安装过程中踩过许多坑 xff0c 耗费了不少时间 xff0c
  • 初识ROS文件结构:以阿木实验室Prometheus项目为例

    ROS的工作空间是一个存放工程开发相关文件的文件夹 xff0c Fuerte版本之后的ROS默认使用的是Catkin编译系统 功能包是ROS软件中的基本单元 xff0c 包含ROS节点 库 配置文件等 一个文件夹是功能包的标志是该文件夹中有
  • 六轴无人机装配问题小结(Pixhawk飞控、APM固件、电机装配、电调校准)

    笔者近期需要组装一架六轴无人机供超声波避障模块 单点激光雷达等传感器的测试使用 由于是第一次碰真机 xff0c 面对散落一箱的部件还是非常的头大的 xff0c 不过好在实验室有经验的大佬能提供一些指导 xff0c 并且还能够参考 创客智造
  • 测试API接口,返回404。

    报错 xff1a 34 timestamp 34 34 2020 06 02T12 40 53 125 43 00 00 34 34 status 34 404 34 error 34 34 Not Found 34 34 message
  • 再谈STM32的CAN过滤器-bxCAN的过滤器的4种工作模式以及使用方法总结

    转自 xff1a http blog csdn net flydream0 article details 52317532 1 前言 bxCAN是STM32系列最稳定的IP核之一 xff0c 无论有哪个新型号出来 xff0c 这个IP核基
  • NVIDIA TX2自制底板的USB口无法使用的一种解决方法

    这是由于官方的底板上采用INA3221芯片做了电源监控电路 xff0c 只有确保5V电源达到要求的情况下才会使能USB口 而自制的底板上将上述电路省略了 xff0c 所以导致了USB口无法使用 解决办法就是要给TX2更新设备树 在网上找到一
  • Benchmark(基准测试)初相识

    一 benchmark概念 在计算中 xff0c 基准是运行一个计算机程序 一组程序或其他操作的行为 xff0c 以评估一个对象的相对性能 xff0c 通常是通过对它运行一些标准测试和试验 基准测试一词也通常用于精心设计的基准测试程序本身
  • 嵌入式中的通讯协议——UART、I2C、SPI、DMA

    目录 一 通讯的基本概念 二 USART 串口通讯 三 I2C通讯协议 四 SPI通讯协议 五 DMA 直接存储器存取 六 USART I2C SPI比较 一 通讯的基本概念 1 串行通讯与并行通讯 xff08 按数据的传送方式 xff09