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

背景

 接触了一些芯片,发现所有的芯片而言,库和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。
协议层:
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/GongmissYan/article/details/120165703
今日推荐