前言:
旨在快速在大脑形成印象,回忆知识,只有数据发送和接受,至于纠错检错,加密,证书啥的不涉及(后续补充在单片机或者linux的使用的基本方法和精心挑选的典型问题以及从发现以及解决方法,涉及到问题才会提及)。具体的协议请跳转专门的博客学习(后续完善我也会贴)
OSI模型:

(看通信原理课程,虽然也没有意义)但总归建立一个通信,模拟和数字通信,纠错检错,数据压缩的概念了,了解数据表示和传输,,到通信设备,又有带宽,发射功率等等那不属于范畴了,哎,也许wifi协议栈有点用。
0通信基础模型(待更改):
[设备] --[设备]
通信对象通信对象,--,传输媒介
|
|
V
数据加密,压缩(也许没有,单片机这种基本没有了)
|
|
V
传输协议与数据结构 (会话建立 (握手确认| | - 地址 (Identification) | (I2C从机地址, USB地址, IP, Port) | - 数据包/帧格式 (Data Frame) | (字节块, 起始/停止位, 包头) | - 纠错检错 (Error Detection) | (CRC, Checksum) | - 差错控制/流控制 (Flow/Error Control) |
1.看硬件框图2.地址或者如何确认“连接起来”(非物理上)而是逻辑上3.发送和接收数据(之上有数据帧结构)4.通信事件(什么通信,通信中,请求,确认,发送,确认)
(希望随着使用,经验的增加,能建立一个知识压缩,映射,展开的能力吧,我不像局限于日常的使用方法,然后迷失,之后某天又被问到基础概念不懂,但总感觉有些东西,只是用来区分的,记忆这个知识点于使用这个技术毫无帮助)
数据链路层和物理层
I2C:
通信模型:

协议数据格式:
(省率了具体数据了的校验码等等)

通信流程(不会说细节,如总线仲裁):
[主控芯片发送起始信号]-->[发送从机地址,声明写(1)]-->[发送地址] --[总线其他从设备高阻抗,从设备应答]--[主机发送数据]--[从机回应]--[从从机地址读取数据]--[从机回应]--[从机发送数据]--[从机回应] --[结束]
具体应用:
后续补充(或者我新开一章,涉及到传感器手册寄存器阅读):
基本使用方法
I2C控制器编写:
软件模拟:
传感器sensor数据手册阅读:
问题:初始化,那就查看数据寄存器和状态寄存器。其他,……
一句话应对面试:
I2C是一种两线、同步、多主从串行通信协议。它主要用于板级(On-board)短距离通信,连接微控制器与各种低速外设,比如EEPROM、传感器、显示驱动器等。
它的核心特点是仅使用两根线(SDA用于数据,SCL用于时钟),并支持多主设备和多从设备。每个从设备都有一个唯一的地址,主设备通过发送地址来选择目标从设备进行通信。数据传输是基于字节的,并且包含起始/停止条件和应答(ACK)机制。
I2C的优势在于布线简单,能挂载多个设备,但速度相对SPI较慢
SPI:
通信模型:

协议数据格式(其实没有):

通信流程(不会说细节):
[NSS拉低选择设备] --[然后根据选中的模式,极性和相位,如图,”休闲"是低电平,下降沿采集电平]--[之后通信停止(拉高片选引脚)]
具体应用:
后续补充(或者我新开一章,涉及到传感器手册寄存器阅读):
基本使用方法
SPI控制器编写:
软件模拟:
传感器sensor数据手册阅读:
问题:初始化,那就查看数据寄存器和状态寄存器。其他,……
一句话应对面试:(其实我觉得协议就是物理模型,接口,数据格式和时序)
“SPI是一种四线、同步、全双工串行通信协议,通常用于板级高速通信,例如连接微控制器与Flash存储器、AD/DA转换器或LCD控制器等。
它的核心特点是使用四根独立的线(MOSI用于主发从收,MISO用于从发主收,SCLK用于时钟,SS/CS用于片选)。它允许全双工通信(同时发送和接收数据),并且由于有独立的时钟线和片选线,省去了地址寻址的开销,使得其传输速度通常比I2C更快。
SPI的优势是高速和全双工,但每个从设备需要独立的片选线,布线可能比I2C稍复杂。”
UART:
通信模型:

协议数据格式(其实没有):

如何提高UART的稳定性:
1.硬件上:切换电平标准,使用差分信号
2.软件增加校验位,重传机制
通信流程:
[预设波特率]--[发送方准备]--[接收方接收]--[持续通信]
具体应用:
后续补充(或者我新开一章,涉及到传感器手册寄存器阅读):
基本使用方法
UART控制器编写:
软件模拟:
传感器sensor数据手册阅读:
问题:初始化,那就查看数据寄存器和状态寄存器。其他,……
“UART是一种两线、异步串行通信协议,主要用于点对点数据交换,例如微控制器与PC进行调试、与GPS模块或蓝牙模块通信等。
它的核心特点是不使用单独的时钟线,发送和接收双方通过预设的波特率(传输速率)来同步。数据以帧的形式传输,每帧包含起始位、数据位、可选的校验位和停止位。
USB(知识和图直取自百问网教程):
通信模型:

通信模型

硬件拓扑结构

协议数据格式:
* BIT组成域(Field)
* 域组成包(Packet)
* 包组成事务(Transaction)
* 事务组成传输(Transfer)
包

包类型,由PID标识:


建立通信的令牌包:包含地址和端点号

数据包

其余不介绍,因为本篇文章中通信模型详细介绍只有建立通信和数据传输的,其余的不知道。
通信流程:
看图:

传输事务建立:
令牌包、数据包、握手包
[发出IN令牌包 地址 发出OUT令牌包/地址]--[发送/读取数据]--[有握手包]
看图,读,写,高速传输三个阶段的图

协议包

具体应用:
后续补充(我新开一章,涉及到手册描述符,太复杂了,还有gadget):
基本使用方法

略:
传感器sensor数据手册阅读:
问题:初始化,那就查看数据寄存器和状态寄存器。其他,……
一句话:
USB采用树形拓扑结构,以主机为中心,通过集线器(Hub)扩展连接设备。通信是主机驱动和轮询的,所有数据传输都由主机发起。设备通过描述符向主机报告自身功能
应用层协议:
MQTT:
模型:
[发布者]--[broker]--[订阅者]
协议格式:

至于每部分我不会介绍了,遇到问题再说
建立链接:
Broker 地址
Broker 端口 (Broker Port)
客户端 ID (Client ID)
用户名和密码 (Username & Password)
保持连接 (Keep Alive)
……
方法:
再说
发布:
再说
订阅:
移植:
依赖一个TCP/IP的接口实现,esp8266,用串口AT指令的话,提供串口的发送和接受,略
HTTP:
模型:
数据帧格式:


使用方法:
发送:
GET方法:
Post方法:
接受:
解析数据
流程:
数据是层层加表头,比如mac地址等等
[从缓存中或者DNS服务器获取域名对应的IP地址]--[访问服务器获取数据]
使用:
参考博客,移植openssl和支持http的库到开发板 即可。
Modbus: