嵌入式通信协议总结

news2024/12/28 6:04:45

1.并行通信与串行通信
并行通信通常为8根,一次传送多位,串行通信为一根线,一次传送一位数据,依次传送。
很明显,前者速度更快,但是消耗资源,后者资源消耗少,但速度慢。
请添加图片描述
请添加图片描述

2.单工与双工
单工通信分发送与接收方,数据传输方向固定。半双工可以双向转输,但是在一个时刻只能有一个方向。
全双工,在同一个时刻能同时发送与接收两个方向。
请添加图片描述
3.波特率
串口的通信速率,单位bps(每S传送多少位)

4.UART
全名为通用异步收发器,是一种通用的串行,异步通信总线,该总线有两条数据线,可以实现全双工的发送与接收。在嵌入式可以说是使用最多的一种通信协议。
请添加图片描述
空闲位为高,起始位拉低为0,就告知了对方开始通信,以此来区分空闲位的高电平与传输数据1的高电平。
开始通信后,从低位开始一位一位发,可以发5-8位数据,但通常发送8位,后进行校验(通常不用),后进入停止位(高电平)进入空闲。
即使发送很多个字节也必须尊重上规则,即每发送8位前后必须有起始位和停止位。

为什么,因为假设有00110011,0是拉低电平,1是拉高电平。那么两个0是不是就会一直拉为低电平,接收方如何区分是一个0还是两个0,就用到了上面的波特率。就双方波特率一致,就可以确定每一位信号的获取时间。
那么假设我们一次发送太多位的话,很容易导致倍波特率时间误差,故每次发8位能尽力保证数据的正确。
(注意,UART通信双方波特率必须一致)
硬件连接
请添加图片描述
5.RS232,RS485协议
其实都是UART上电气协议上的改变。
前面UART可以知道,高电平表示1,低电平表示0。但是并没有说什么是高电平,什么是低电平,两块不同的处理器可能定义不同,可能一块是3.3V为高,另外一块是5V为高。故引出了第一个缺点,电气接口不统一。高低电平会导致抗干扰能力差,从而导致距离传输距离短。
根据上面缺点,故提出了RS232与RS485的串行通信的标准。
6.RS232
RS232接口有9根线,但通常只使用RXD与TXD与GND三根线。
RS232为负逻辑
-5V到-15V为1
+5到+15V为0
提高了干扰能力,增大通信距离
又提出一个问题,为什么处理器能发出-15V到+15V的信号,很简单,有专门的RS232信号转换芯片,一个芯片发送给另外一块芯片,需先经过RS232信号转换后在发送,接收同样需要转换回来。
缺点,通信速度低,而且高低电平数值高,容易损坏接口芯片
7.RS485
相对RS232,转输距离长与抗干扰能力强。而且能接多个收发器。但UART与RS232只能点对点通信。
请添加图片描述
RS485使用差分信号,+2V到+6V为1,-2V到6V为0。什么是差分信号,UART与RS232都是一根线上的高低表示1或0,而RS485是两根线上表示,用两根线上的差值来表示,两根线就是同时衰减,在转输的过程中差值变化不大。
同样需要RS485电平转换芯片。
8.IIC
串行半双工总线。IIC通常用于近距离,低速的芯片之间传输。IIC有两根线,一根数据SDA用于收发数据吗,SCL时钟线用于通信双方时间同步。
也是多主机总线协议,与RS485一样。
IIC总线上的设备分为主机与从机,只有主机能发起呼叫通信,从机只能被呼叫。可如果IIC总线上有多个主机,IIC上有冲突检测和仲裁的功能确认谁是主机(IIC总线上谁都可以当主机,但是一个时刻只能有一个主机)。
连接上IIC总线上的器件都有自己的7位地址。请添加图片描述
9.IIC通信流程
宏观上
1.主机发送起始信号启动总线
2.主机发送一个字节数据指命从机地址和后续字节传输方向
3.被寻址的从机发送应答信号回应主机
4.发送器发送一个字节数据
5.接收器发送应答信号回应发送器
6.循环45
7.通信完成后,主机发送停止信号释放总线

10.IIC总线寻址方式
就是第9个知识点的第二步,这个发送的字节,高7位是从机地址,最低位是传输方向,0表示主机发送数据,1是从机发送数据,那么怎么改表方向,可以再发一次起始信号,在改变方向。

11.IIC各信号实现
首先IIC总线空闲的时候两根线都是高电平
1.起始信号与停止信号
SCL为高电平时候 ,SDA由高变低表示起始信号
SCL为高电平时候 ,SDA由低变高表示停止信号
请添加图片描述

2.字节发送与应答
IIC总线每次发送8位,数据传输时候,先发送高位,后传输低位。(与串口相反)。发送后,接收方会放回一个应答
请添加图片描述
3.同步信号
如何区分和获取数据0或1
利用SCL时钟线,SCl为低电平器件,发送器会发送数据,会改变SDA线上的电平。
SCL为高电平时间,接收器就会读取SDA上的电平(这个期间,发送方不能改变SDA线上数据)。
循环8次即可发送一个字节。
12.SPI
全名串行外设接口。全双工同步通信总线。
SPI采用主从方式,一般有一个主设备,多个从设备。SPI通常需要4根线,风暴是MOSI(主设备输出,从设备输入),MISO(主设备输入,从设备输出),SOCLK(时钟),OS(片选)。

13.SPI寻址方式
CS片选控制。主设备要控制从设备,会从CS1或CS2控制线发送使能信号(可能高电平,有可能低电平),把不通信的从设备禁止。
请添加图片描述
14.SPI通信流程
先发高位,后发低位,和IIC一样,和UART不一样。同样高电平为1,低电平为0。
SPI相对IIC,发送一个字节无需等待应答,可直接在发送一个字节数据。也无需起始和停止信号。
在时钟SCL上升或下降的时候发送器发送数据,紧接下一个上升或下降沿接收器读取数据。为什么是上升或下降都可能发送与接收,是因为上升与下降表示发送或接收是可以控制的。涉及到了底下的极性与相位。
15.SPI的极性与相位
CPOL极性
CPHA相位
请添加图片描述
16.IIC与SPI区别
请添加图片描述

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

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

相关文章

堆栈指针的介绍

目录 单片机堆栈指针的介绍 引用 一、堆栈指针sp的简介 1、堆栈的两种方式(向上模型与向下模型) 2、两种模型的优缺点 二、堆栈的实现方法 深入理解ARM三个寄存器 三级流水线 三个寄存器 栈的整体作用 1. 保护现场 2. 传递参数 3. 临时变量…

最新版Android13使用Notification,Notification的基本使用和进阶使用

一、使用Notification 1、创建一个通知 1.1 注册一个渠道 在Android13,版本通知的使用发生了新的变化。 首先我们需要创建一个NotificationManager用于管理通知。 //创建notificationManager对通知进行管理 NotificationManager notificationManager getSyste…

Mr. Cappuccino的第57杯咖啡——简单手写Mybatis大致原理

简单手写Mybatis大致原理 大致原理项目结构项目代码代码测试 大致原理 底层基于JDK动态代理技术实现 项目结构 项目代码 pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns…

在 TDosCommand 组件中执行多个命令

在 TDosCommand 组件中执行多个命令可以通过在命令行中使用“&&”或“&”符号来实现。其中&#xff0c;“&&”符号表示前一个命令执行成功后才会执行下一个命令&#xff0c;“&”符号表示前一个命令执行完成后立即执行下一个命令。下面是一个示例程序&…

首页和图表的定制

首页就是刚刚那些在静态资源扫描文件下叫 index.html 的文件 头像

Netty+springboot开发即时通讯系统笔记(一)

业务部分从sql开始&#xff1a; /*Navicat Premium Data TransferSource Server : localhostSource Server Type : MySQLSource Server Version : 50740Source Host : localhost:3306Source Schema : im-coreTarget Server Type : MySQLTarge…

代码随想录算法训练营之JAVA|第十八天| 235. 二叉搜索树的最近公共祖先

今天是第 天刷leetcode&#xff0c;立个flag&#xff0c;打卡60天&#xff0c;如果做不到&#xff0c;完成一件评论区点赞最高的挑战。 算法挑战链接 235. 二叉搜索树的最近公共祖先https://leetcode.cn/problems/lowest-common-ancestor-of-a-binary-search-tree/descriptio…

P9-CNN学习1.1-VggNet

目录 一.Abstract 二.Introduction 三.ConvNet Configuration 3.1Architecture 3.2Configuration 3.3Discussion 四.Classification Framework 4.1Training 4.2Testing 4.3Implementation Detail 五.Classification Experiments 5.1Single Scale Evaluation 5.2Mul…

【Java】Spring Boot的创建和使用,以及配置文件(.properties和.yml)和日志文件(LoggerFactory和lombok)

什么是Spring BootSpring Boot的优点创建Spring Boot项目Spring Boot的配置文件配置文件的作用配置文件的格式properties 配置文件说明properties的基本语法读取配置文件properties的缺点 yml 配置文件说明基本语法yml 连接数据库读取配置文件yml进阶yml 配置不同数据类型及 nu…

IO进程线程第五天(8.2)进程函数+XMind(守护进程(幽灵进程),输出一个时钟,终端输入quit时退出时钟)

1.守护进程&#xff08;幽灵进程&#xff09; #include<stdio.h> #include<head.h> int main(int argc, const char *argv[]) {pid_t cpid fork();if(0cpid){ //创建新的会话pid_t sidsetsid();printf("sid%d\n",sid);//修改运行目录为不可卸载的文件…

蓝牙资讯|三星Galaxy SmartTag 2亮相FCC,智能防丢市场持续火爆

三星的 Galaxy SmartTag 2 已经现身美国联邦通信委员会&#xff08;FCC&#xff09;网站&#xff0c;外观设计也随之曝光&#xff0c;该设备呈扁平的椭圆形&#xff0c;顶部有一个巨大的钥匙环孔&#xff0c;看起来有点像雪茄切割器。如果这是一个普通的钥匙环大小的孔&#xf…

UG\NX 二次开发 选择相切面、相邻面的选择面控件

文章作者&#xff1a;里海 来源网站&#xff1a;https://blog.csdn.net/WangPaiFeiXingYuan 简介&#xff1a; 有群友问“UFUN多选功能过滤面不能选择相切面或相邻面之类的吗&#xff1f;” 这个用Block UI的"面收集器"就可以&#xff0c;ufun函数是不行的。 效果&am…

基于text2vec和faiss开发实现文档查询系统初体验

最近接触到了一些文本向量化的预训练模型&#xff0c;感觉相比较自己去基于gensim去训练词向量来说&#xff0c;使用预训练模型可能是更高效的方式了&#xff0c;正好有一个想法一直在想能够以什么样的形式间接的实现问答&#xff0c;说白了这里的问答跟我们理解的chatGPT类型的…

iOS——Block one

块类似于匿名函数或闭包&#xff0c;在许多其他编程语言中也存在类似的概念。 可以访问上下文&#xff0c;运行效率高 Block 以下是块的一些基本知识&#xff1a; 块的定义&#xff1a;块是由一对花括号 {} 包围的代码片段&#xff0c;可以包含一段可执行的代码。块的定义使…

125.验证回文串

目录 一、题目 二、代码 一、题目 125. 验证回文串 - 力扣&#xff08;LeetCode&#xff09; 二、代码 class Solution { public: bool ABC(char& s) {if (s > 65 && s < 90){s 32;return true;}if (s > 97 && s < 122){return true;}if …

FPGA开发:音乐播放器

FPGA开发板上的蜂鸣器可以用来播放音乐&#xff0c;只需要控制蜂鸣器信号的方波频率、占空比和持续时间即可。 1、简谱原理 简谱上的4/4表示该简谱以4分音符为一拍&#xff0c;每小节4拍&#xff0c;简谱上应该也会标注每分钟多少拍。音符时值对照表如下图所示&#xff0c;这表…

无涯教程-Lua - while语句函数

只要给定条件为真&#xff0c;Lua编程语言中的 while 循环语句就会重复执行目标语句。 while loop - 语法 Lua编程语言中 while 循环的语法如下- while(condition) dostatement(s) end while loop - 流程图 在这里&#xff0c;需要注意的关键是 while 循环可能根本不执行。…

Go语音介绍

Go语言介绍 Go 即Golang&#xff0c;是Google公司2009年11月正式对外公开的一门编程语言。 Go是静态强类型语言&#xff0c;是区别于解析型语言的编译型语言。 解析型语言——源代码是先翻译为中间代码&#xff0c;然后由解析器对代码进行解释执行。 编译型语言——源代码编…

【树形DP+换根思想】2022牛客多校加赛 H

登录—专业IT笔试面试备考平台_牛客网 题意&#xff1a; 思路&#xff1a; 这个虽然是树形DP&#xff0c;却用了换根的思想.... 首先&#xff0c;后缀0的个数可以转化成min(cnt2,cnt5)&#xff0c;其中cnt2为2的因子个数&#xff0c;cnt5为5的因子个数 然后进行DP 设dp[u]…

面试之多线程(三)

1.进程和线程的区别 根本区别&#xff1a;进程是操作系统分配资源的最小单位&#xff1b;线程是CPU调度的最小单位所属关系&#xff1a;一个进程包含了多个线程&#xff0c;至少拥有一个主线程&#xff1b;线程所属于进程开销不同&#xff1a;进程的创建&#xff0c;销毁&…