前言:

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

 

OSI模型:

image

 

(看通信原理课程,虽然也没有意义)但总归建立一个通信,模拟和数字通信,纠错检错,数据压缩的概念了,了解数据表示和传输,,到通信设备,又有带宽,发射功率等等那不属于范畴了,哎,也许wifi协议栈有点用。

0通信基础模型(待更改):

[设备] --[设备]  

通信对象通信对象,--,传输媒介    

           |

           |

          V 

数据加密,压缩(也许没有,单片机这种基本没有了)

           |

           |

          V 

传输协议与数据结构  (会话建立 (握手确认| | - 地址 (Identification) | (I2C从机地址, USB地址, IP, Port) | - 数据包/帧格式 (Data Frame) | (字节块, 起始/停止位, 包头) | - 纠错检错 (Error Detection) | (CRC, Checksum) | - 差错控制/流控制 (Flow/Error Control) |

 

1.看硬件框图2.地址或者如何确认“连接起来”(非物理上)而是逻辑上3.发送和接收数据(之上有数据帧结构)4.通信事件(什么通信,通信中,请求,确认,发送,确认)

(希望随着使用,经验的增加,能建立一个知识压缩,映射,展开的能力吧,我不像局限于日常的使用方法,然后迷失,之后某天又被问到基础概念不懂,但总感觉有些东西,只是用来区分的,记忆这个知识点于使用这个技术毫无帮助)


 

数据链路层和物理层

I2C:

通信模型:

image

 

协议数据格式:

(省率了具体数据了的校验码等等)

image

通信流程(不会说细节,如总线仲裁):

[主控芯片发送起始信号]-->[发送从机地址,声明写(1)]-->[发送地址] --[总线其他从设备高阻抗,从设备应答]--[主机发送数据]--[从机回应]--[从从机地址读取数据]--[从机回应]--[从机发送数据]--[从机回应] --[结束]

具体应用:

 

后续补充(或者我新开一章,涉及到传感器手册寄存器阅读):

  基本使用方法

    I2C控制器编写:

    

    软件模拟:

    

    传感器sensor数据手册阅读:

  问题:初始化,那就查看数据寄存器和状态寄存器。其他,……

一句话应对面试:

I2C是一种两线、同步、多主从串行通信协议。它主要用于板级(On-board)短距离通信,连接微控制器与各种低速外设,比如EEPROM、传感器、显示驱动器等。
它的核心特点是仅使用两根线(SDA用于数据,SCL用于时钟),并支持多主设备和多从设备。每个从设备都有一个唯一的地址,主设备通过发送地址来选择目标从设备进行通信。数据传输是基于字节的,并且包含起始/停止条件和应答(ACK)机制。
I2C的优势在于布线简单,能挂载多个设备,但速度相对SPI较慢

SPI:

通信模型:

image

 

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

image

 

通信流程(不会说细节):

[NSS拉低选择设备] --[然后根据选中的模式,极性和相位,如图,”休闲"是低电平,下降沿采集电平]--[之后通信停止(拉高片选引脚)]

 

具体应用:

 

后续补充(或者我新开一章,涉及到传感器手册寄存器阅读):

  基本使用方法

    SPI控制器编写:

    

    软件模拟:

    

    传感器sensor数据手册阅读:

  问题:初始化,那就查看数据寄存器和状态寄存器。其他,……

一句话应对面试:(其实我觉得协议就是物理模型,接口,数据格式和时序)

“SPI是一种四线、同步、全双工串行通信协议,通常用于板级高速通信,例如连接微控制器与Flash存储器、AD/DA转换器或LCD控制器等。
它的核心特点是使用四根独立的线(MOSI用于主发从收,MISO用于从发主收,SCLK用于时钟,SS/CS用于片选)。它允许全双工通信(同时发送和接收数据),并且由于有独立的时钟线和片选线,省去了地址寻址的开销,使得其传输速度通常比I2C更快
SPI的优势是高速和全双工,但每个从设备需要独立的片选线,布线可能比I2C稍复杂。”

UART:

通信模型:

image

 

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

image

 如何提高UART的稳定性:

1.硬件上:切换电平标准,使用差分信号

2.软件增加校验位,重传机制

 

通信流程:

[预设波特率]--[发送方准备]--[接收方接收]--[持续通信]

 

具体应用:

 

后续补充(或者我新开一章,涉及到传感器手册寄存器阅读):

  基本使用方法

    UART控制器编写:

    

    软件模拟:

    

    传感器sensor数据手册阅读:

  问题:初始化,那就查看数据寄存器和状态寄存器。其他,……

 “UART是一种两线、异步串行通信协议,主要用于点对点数据交换,例如微控制器与PC进行调试、与GPS模块或蓝牙模块通信等。
它的核心特点是不使用单独的时钟线,发送和接收双方通过预设的波特率(传输速率)来同步。数据以的形式传输,每帧包含起始位、数据位、可选的校验位和停止位。

USB(知识和图直取自百问网教程):

通信模型:

image

通信模型

image

  硬件拓扑结构

image

 

 

 

协议数据格式:

* BIT组成域(Field)
* 域组成包(Packet)
* 包组成事务(Transaction)
* 事务组成传输(Transfer)

image

包类型,由PID标识:

image

image

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

image

 数据包

image

 

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

通信流程:

看图:

image

传输事务建立:

令牌包、数据包、握手包

[发出IN令牌包 地址 发出OUT令牌包/地址]--[发送/读取数据]--[有握手包]

 

看图,读,写,高速传输三个阶段的图

image

 协议包

 image

具体应用:

 

后续补充(我新开一章,涉及到手册描述符,太复杂了,还有gadget):

  基本使用方法  

image

 略:

   

    传感器sensor数据手册阅读:

  问题:初始化,那就查看数据寄存器和状态寄存器。其他,……

一句话:

USB采用树形拓扑结构,以主机为中心,通过集线器(Hub)扩展连接设备。通信是主机驱动和轮询的,所有数据传输都由主机发起。设备通过描述符向主机报告自身功能


 

应用层协议:

MQTT:

模型:

[发布者]--[broker]--[订阅者]

协议格式:

image

 至于每部分我不会介绍了,遇到问题再说

建立链接:

Broker 地址

Broker 端口 (Broker Port)

客户端 ID (Client ID)

用户名和密码 (Username & Password)

保持连接 (Keep Alive)

……

 

方法:

再说

发布:

再说

订阅:

移植:

依赖一个TCP/IP的接口实现,esp8266,用串口AT指令的话,提供串口的发送和接受,略

 

HTTP:

模型:

 

数据帧格式:

image

image

使用方法:

发送:

GET方法:
Post方法:

 

接受:

解析数据

流程:

数据是层层加表头,比如mac地址等等

[从缓存中或者DNS服务器获取域名对应的IP地址]--[访问服务器获取数据]

使用:

参考博客,移植openssl和支持http的库到开发板 即可。

 

Modbus: