常见的协议汇总(小白个人理解,大佬勿喷)

article/2025/9/27 1:10:40

背景

 接触了一些芯片,发现所有的芯片而言,库和API接口随着芯片,开发环境甚至开发情况,公司都有着明显的区别。基于这种情况的话,了解协议的底层个人觉得是十分必要的,同时也是找工作的必备选项。所以对常见的嵌入式协议做一个个人的总结。

本章节仅仅用于个人的学习和记录。

常见的协议类型

常用的协议(必备):SPI、IIC、USART、FSMC、8086
相比较少一点协议(特定):485、CAN、I2S

协议如何学习?

个人学习了多家的嵌入式视频,觉得有一个方法觉得比较清楚:就是一个协议的话,一定是分为协议层和物理层的,所以物理层就是他的接线方式和电器特性,协议层的话就是他的时序。这个说法不一定准确,应为部分协议无所谓接线方式,都能用。

串口

用处:
1.用作打印功能,调试 2.部分的模块的话适用串口,如有名的ESP8266 等
基本知识(自行了解):
可以看这个
https://blog.csdn.net/weixin_46468790/article/details/107198486
RS-232 标准的COM口(电脑后面的COM口)
电平转换芯片,比较有名的CH340
物理层:
接线比较简单,分为RX和TX,两个IO,其中RX用于接收,TX用于发送数据。
在这里插入图片描述
这里提一个小技巧,串口作为作为比较简单的总线,排查很简答:1.接线有问题 2.波特率有问题 3.挂载的总线时钟设置有问题 4.串口调试软件出问题

协议层:在这里插入图片描述

  1. 波特率(我觉得可以理解为解码方式,双方约定的)
    用虚线分开的每一格就是代表一个码元。
  2. 通讯的起始和停止信号
    数据包的起始信号由一个逻辑0 的数据位表示,而数据包的停止信号可由0.5、1、1.5 或2 个逻辑1 的数据位表示
  3. 有效数据
    有效数据的长度常被约定为5、6、7 或8 位长。
  4. 数据校验
    奇校验(odd)、偶校验(even)、0 校验(space)、1 校验(mark)以及无校验(noparity),它
    奇校验(odd)就是有效数据1的个数+校验位 =奇数 同理
    偶校验(even)为有效数据1的个数+校验位 =偶数
    0 校验(space)始终为0 01校验(space)始终为1 在无校验的情况下,数据包中不包含校验位。

IIC

用处:作为常见的通信协议,常用于控制传感器和外设
基本知识(自行了解):
硬件IIC
软件IIC
硬件IIC和软件IIC的区别?为什么常使用软件IIC而不是硬件IIC?
两种方式的区别和优势弱点
物理层:
由于我自己一般都是使用的软件IIC,所以是直接的GPIO控制。这里提一个知识点:IIC可以接多个设备码?答案是可以的。
在这里插入图片描述
一般的话 我们只需要2根线,SDA作为数据线,SCL作为时钟。
协议层:
在这里插入图片描述
S代表的起始信号和停止信号,用电平表示
在这里插入图片描述
有效数据电平表示
在这里插入图片描述
SCL拉高的时候,SDA为有效数据,然后SCL拉低,开始传输。

在这里插入图片描述
这个代表的是读写的设备地址+读写模式选择,R/W为1的话是读,为0的话就是写,你要分辨是谁往谁发,比如我和你说话,那我就是向你写,你和我说话,那我就是读,所以你要确定谁往谁发。

同理这里的设备地址的话,由两种情况,7 位或10 位,所以有个知识点:假如我的写地址是0x48,那我的读地址就是0x48,应为就差1. (有些API提供的地址原本就是7位的,读写区分开了)

在这里插入图片描述
这个代表协议中的A,这里有两个情况:应答,表示我还需要接收,你继续;另外非应答,就是可以停止发送了。

SPI

用处:作为常见的通信协议,常用于控制传感器和外设
基本知识(自行了解):
软件SPI,相比于软件IIC,来说,用的比较少

2021/9/9补充
在这里插入图片描述

物理层:
在这里插入图片描述
MOSI:主输出从输入
MISO:主输入从输出
SCK:时钟
SS:片选引脚,一般对应芯片的CS引脚,低时有效,选中器件,开始。拉高,终止。
协议层:
在这里插入图片描述
通讯的起始和停止信号
NSS拉低作为起始信号,拉高作为停止信号。
数据有效性
在SCK 的下降沿时刻,MOSI 及MISO 的数据有效,高电平时表示数据“1”,为低电平时表示数据“0”。在其它时刻,数据无效,MOSI 及MISO为下一次表示数据做准备。
CPOL/CPHA 及通讯模式
在这里插入图片描述
在这里插入图片描述

FSMC

用处:控制SRAM,用作内存管理;作为8086时序
物理层:
在这里插入图片描述
协议层:
在这里插入图片描述
在这里插入图片描述

    对于FSMC来说,和IIC有一个很大的不同,就是我们不需要实现各个时序的具体逻辑,我们实现具体的物理层接线,Stm32内部会自动实现功能和时序。		

8086

物理层:
在这里插入图片描述
FSMC 的A 地址线根据不同的情况产生对应的电平,那么就完全可以使用FSMC 来产生8080 接口需要的时序了
协议层
该8086时序和FSMC基本保持一致。

485

在这里插入图片描述
物理层
相比于串口通信而言,添加了485收发器,这个是明显的物理层区别,同时有如下的变化:抗干扰能力强、传输距离远。
MAX485 芯片中有“RE”和“DE”两个引脚,用于控制485 芯片的收发工作状态的,当RE 引脚为低电平时,485 芯片处于接收状态,当DE 引脚为高电平时芯片处于发送状态。
协议层
和串口协议类似。

CAN

物理层:
只有两根线:CAN_High 和CAN_Low 两条信号线 同时需要一个CAN收发器
寻址机制: 不同于其它类型的总线,CAN总线不设定节点的地址,而是通过消息的标识符(Identifier)来区别消息。这种机制虽然会增加消息的复杂度(增加标识符),但是节点在此情况下可以无需了解其他节点的状况,而相互间独立工作。在总线上增加节点时仅需关注消息类型,而非系统上其他节点的状况。这种以消息标识符寻址的方式,让总线上增加节点变得更加灵活。
CAN总线具有两种接线方式:
闭环
开环
协议层:

在这里插入图片描述
数据帧以一个显性位(逻辑0)开始,以7 个连续的隐性位(逻辑1)结束,在它们之间,
分别有仲裁段、控制段、数据段、CRC 段和ACK 段。
. 帧起始
SOF 段(Start Of Frame),译为帧起始,帧起始信号只有一个数据位,是一个显性电平,
它用于通知各个节点将有数据传输,其它节点通过帧起始信号的电平跳变沿来进行硬同步。
. 仲裁段
当同时有两个报文被发送时,总线会根据仲裁段的内容决定哪个数据包能被传输,这也是它名称的由来。
仲裁段的内容主要为本数据帧的ID 信息(标识符),数据帧具有标准格式和扩展格式两
种,区别就在于ID 信息的长度,标准格式的ID 为11 位,扩展格式的ID 为29 位,它在标
准ID 的基础上多出18 位。在CAN 协议中,ID 起着重要的作用,它决定着数据帧发送的
优先级,也决定着其它节点是否会接收这个数据帧。CAN 协议不对挂载在它之上的节点分
配优先级和地址,对总线的占有权是由信息的重要性决定的,即对于重要的信息,我们会
给它打包上一个优先级高的ID,使它能够及时地发送出去。也正因为它这样的优先级分配
原则,使得CAN 的扩展性大大加强,在总线上增加或减少节点并不影响其它设备。
报文的优先级,是通过对ID 的仲裁来确定的。根据前面对物理层的分析我们知道如果
总线上同时出现显性电平和隐性电平,总线的状态会被置为显性电平,CAN 正是利用这个
特性进行仲裁。
若两个节点同时竞争CAN 总线的占有权,当它们发送报文时,若首先出现隐性电平,
则会失去对总线的占有权,进入接收状态。见图 44-10,在开始阶段,两个设备发送的电
平一样,所以它们一直继续发送数据。到了图中箭头所指的时序处,节点单元1 发送的为
RTR 位(Remote Transmission Request Bit),译作远程传输请求位,它是用于区分数据帧
和遥控帧的,当它为显性电平时表示数据帧,隐性电平时表示遥控帧。
IDE 位(Identifier Extension Bit),译作标识符扩展位,它是用于区分标准格式与扩展格
式,当它为显性电平时表示标准格式,隐性电平时表示扩展格式。
SRR 位(Substitute Remote Request Bit),只存在于扩展格式,它用于替代标准格式中的
RTR 位。由于扩展帧中的SRR 位为隐性位,RTR 在数据帧为显性位,所以在两个ID
相同的标准格式报文与扩展格式报文中,标准格式的优先级较高。
. 控制段
在控制段中的r1 和r0 为保留位,默认设置为显性位。它最主要的是DLC 段(Data
Length Code),译为数据长度码,它由4 个数据位组成,用于表示本报文中的数据段含有多
少个字节,DLC 段表示的数字为0~8。
. 数据段
数据段为数据帧的核心内容,它是节点要发送的原始信息,由0~8 个字节组成,MSB
先行。
. CRC 段
为了保证报文的正确传输,CAN 的报文包含了一段15 位的CRC 校验码,一旦接收节
点算出的CRC 码跟接收到的CRC 码不同,则它会向发送节点反馈出错信息,利用错误帧
请求它重新发送。CRC 部分的计算一般由CAN 控制器硬件完成,出错时的处理则由软件
控制最大重发数。
在CRC 校验码之后,有一个CRC 界定符,它为隐性位,主要作用是把CRC 校验码与
后面的ACK 段间隔起来。
ACK 段
ACK 段包括一个ACK 槽位,和ACK 界定符位。类似I2C 总线,在ACK 槽位中,发
送节点发送的是隐性位,而接收节点则在这一位中发送显性位以示应答。在ACK 槽和帧
结束之间由ACK 界定符间隔开。
帧结束
EOF 段(End Of Frame),译为帧结束,帧结束段由发送节点发送的7 个隐性位表示结束。

I2S

用处:作为常见的通信协议,常用于音频
物理层:
I2S有3个主要信号:
I2S 总线接口有3 个主要信号,但只能实现数据半双工传输,后来为实现全双工传输有
些设备增加了扩展数据引脚。STM32f4xx 系列控制器支持扩展的I2S 总线接口。
(1) SD(Serial Data):串行数据线,用于发送或接收两个时分复用的数据通道上的数据(仅
半双工模式),如果是全双工模式,该信号仅用于发送数据。
(2) WS(Word Select):字段选择线,也称帧时钟(LRC)线,表明当前传输数据的声道,不
同标准有不同的定义。WS 线的频率等于采样频率(FS)。
(3) CK(Serial Clock):串行时钟线,也称位时钟(BCLK),数字音频的每一位数据都对应有
一个CK 脉冲,它的频率为:2采样频率量化位数,2 代表左右两个通道数据。
(4) ext_SD(extend Serial Data):扩展串行数据线,用于全双工传输的数据接收。
另外,有时为使系统间更好地同步,还要传输一个主时钟(MCK),STM32F4xx 系列控
制器固定输出为256* FS。
协议层:
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述


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

相关文章

常用协议类型值

Ethertype ( 十六进制 ) 协议 0x0000 - 0x05DC IEEE 802.3 长度 0x0101 – 0x01FF 实验 0x0600 XEROX NS IDP 0x0660 0x0661 DLOG 0x0800 网际协议(IP) 0x0801 X.75 Internet 0x0802 NBS Internet 0x0803 ECMA Internet 0x0804 Chao…

TCP协议格式和特点

文章目录 1.协议格式:2.协议特性:2.1 面向链接2.1.1三次握手建立连接2.1.1四次挥手断开连接相关问题和知识点:1. 握手为啥三次,挥手是四次?2. 三次握手失败两端是如何处理的?3. SYN泛洪攻击是怎么回事?4. …

典型几种协议(协议以及作用)

一 .典型协议: 传输层: 常见的协议有 TCP/UDP 协议 应用层: 常见的协议有 HTTP,FTP 协议 网络层: 常见的协议有 IP 协议,ICMP 协议,IG…

ICMP协议 详解,ICMP协议的功能及实现原理,ICMP协议报文类型。

「作者主页」:士别三日wyx 「作者简介」:CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「专栏简介」:此文章已录入专栏《计算机网络零基础快速入门》 ICMP协议 一、工作原理二、数据报格式三、报文类型 ICMP协议是IP的…

几个的常见基础协议类型数据格式以及协议内容简介

给大家简单梳理一下几种学习中常会出现的协议格式,咋们数通就像交通,各种各样的协议规则来规范大家,制定科学的管理手段来帮助大家快速,安全的到家。 一、 HDLC协议 HDLC叫高级链路控制协议(High Level Data Link Cont…

几种常用协议介绍

几种常见协议介绍 TCP/IP协议,其实是一个协议集合,这个集合里面包含了网络通讯所需的所有协议,里面不仅有TCP(传输控制协议)、IP(网际协议),还有UDP、ICMP、RIP、TELNET、FTP、SMTP、ARP、TFTP等许多协议,还有物联网中…

个人如何申请注册公司邮箱?企业邮箱注册申请流程详解

大部分人可能知道邮箱,但是公司邮箱是什么?企业邮箱注册申请流程?个人如何申请注册公司企业邮箱? 在一家公司实习时人事告诉我使用公司邮箱,用我名字拼音命名的,还是无限容量、单次群发500封、邮件误删可以…

手把手教你申请CCC(City Colleges of Chicago)教育邮箱

如果你还不知道edu教育邮箱的好处,那么你就out了,很多大公司的的优惠福利专门针对学生群体。比如可以利用edu邮箱获得Office365免费使用权限,可以免费扩容Onedrive至1024GB;可以获得AutoCAD、3ds Max、Maya等在内70余款软件的3年免…

工大校园邮箱申请流程

由于pycharm破解日益复制,代理服务器总是被封杀,只好老老实实合法使用,但还是要免费的方法,那就申请学生邮箱,毕竟钱不是问题,穷才是。 第一步打开这个网址,登陆一下 https://cas.bjut.edu.cn…

matlab 柱面投影,matlab练习程序(圆柱投影)

圆柱投影就是将一张二维的图像投影到三维的圆柱体上,不过在显示图像的时候依然是以二维的形式给出。 投影最重要的步骤就是计算投影变换公式,和图像旋转类似,只要得到变换公式,再依照公式进行代码编写就很容易了。 这里就不写投影…

C/C++ 图像处理(8)------图像の柱面投影算法

图像的柱面投影算法,在360环形全景应用中几乎一定会用到。而为何要用该算法,可以参考下图: 从图像中可以看到,該环形全景设备由八个摄像头环形排列而成(需注意环形全景的形态并不固定,摄像头的个数不一定是八个,甚至只有一个摄像头在一直匀速转圈也是可以的)。每个摄…

全景图(二):在Unity3D上实现360°柱面投影

在全景图(一):使用Unity完成水晶球纹理贴图 建立的工程基础之上,做修改。 步骤: 1、把上次创建好的水晶球移走,放到一个不妨碍观察的地方。 2、创建一个圆柱体,位置设为(0,1.5,0&a…

图像拼接(一):柱面投影+模板匹配+渐入渐出融合

这种拼接方法的假设前提是:待拼接的两幅图像之间的变换模型是平移模型,即两幅图像同名点位置之间只相差两个未知量: Δx 和 Δy ,自由度为2,模型收得最紧。所以只有所有图像都是用同一水平线或者同一已知倾斜角的摄像机…

2D射影儿何和变换——柱面投影,图像拼接柱面投影

引入二维空间(以下简称2D) 的射影变换 这些变换发生在用透视摄像机对平面摄像的时候. 该章偏重于入门介绍并为三维空间(以下简称3D) 几何铺路. 大多数的概念在2D 中比3D 中更容易理解和可视化. 本章介绍射影变换,包括它的特殊悄况:仿射和相似变换; 并把注意力…

鱼眼图像与柱面的投影

鱼眼图像到柱面的反投影及柱面到鱼眼图像的投影 https://blog.csdn.net/c20081052/article/details/80999904 鱼眼图像到柱面图像的投影公式推导参考链接,自己照着推导过,应该是没有问题的。这个是平面图像到柱面的投影,我理解的鱼眼图像也是…

【论文笔记】激光点云柱面投影图的显著性检测 LiDAR Imaging-based Attentive Perception

内华达大学里诺分校 在嵌入式处理器设备上(飞行器)达到了毫秒级执行时间, 使用的激光雷达型号 :  OUSTER OS1-64 (图像尺寸204810),OUSTER OS0-128(图像尺寸204810) 这种激光雷达可以提供的信息包括: 距离, 强度, 反射…

图像拼接---图片柱面投影简单实现

算法思想参考:http://blog.csdn.net/weixinhum/article/details/50611750 柱面投影是图片拼接的前期的一部分工作,以下代码只是简单的实现了投影,还可以优化, 柱面半径设置位图片宽度的一半,即 R width/2 代码运算…

2.8 投影柱面

空间曲线 在xOy坐标面上的投影曲线是 投影柱面的参数方程为 例 2.8.1 将以下空间曲线投影到xOy坐标面,试作出投影柱面的图形。 解 输入以下代码: with(plots): x:t->cos(t): y:t->sin(t): z:t->t: S:2: T:6:K:50: quxian:spacecurve([x(t),y(t…