现在大体上网络通讯分为5层和7层的,7层的OSI是理论型,5层的TCP/IP是实践型。现在几乎所有厂商用到的都是TCP/IP协议。
OSI
应用层
表达层
会话层
传输层
网络层
链路层
物理层
TCP/IP
应用层:MODBUS 、HTTP、MQTT 、 、
传输层: TCP、UDP 负责数据的正确传输
网络层 :IP 负责网络中数据包的路由
链路层:MAC地址
物理层:USART 、SPI 、IIC 、8080 、
应用层
MODBUS
是基于RS485的一种请求-响应的协议,用在工控产品上的偏多。
分为
地址+数据+CRC校验
数据又分为 功能码+数据
以03码为例,
HTTP
请求头 响应头 心知天气那个好像只有头部
MQTT
固定报头+可变报头+有效负载
以连接报文为例:
物理层
USART
是一种通用的串行异步通信总线,有两根数据线,一根线发送数据,一根线接收数据,可以实现全双工的发送和接收,在嵌入式中常用于主机和辅助设备(串口助手)或外围设备(外挂模块)进行通信。(电脑中已经舍弃UART了,用USB)
硬件接线
2根线
TX:发送端
RX:接收端
串行异步全双工
软件帧格式
空闲时置高电平,起始位把电平拉低。
校验位分奇校验和偶校验 。
一般都是N81,表示没有校验位,8个数据位,1个停止位
不能直接发送数据,需要在发送数据之前发送一个起始位,连续传输只是没有空闲位了,还是有起始位和停止位的。
串口是这几个里面唯一一个先发低位后发高位的,其他都高位先行。
UART控制器
一般情况下CPU内部会集成UART控制器,控制器内部也会集成发送器和接收器,我们设置对应的寄存器把N81设置好后, 控制器就会按照我们设置的格式进行发送和接收。
Exynos4412烧录程序的时候要用中间的串口。
SPI
SPI是高速的、全双工、同步的串行通信总线,同样的,CPU内部会集成SPI的控制器,进行自动收发
硬件接线
主设备至少4根线,从设备4根线
SS
CS
MISO
MOSI
串行同步全双工
软件帧格式
SPI没有起始信号没有结束信号也没有应答,一个时钟周期发一位bit,一个时钟周期两个沿,上升沿和下降沿,一个沿发数据,一个沿收数据
先传送高位,后传送低位。一个字节传送完成后无需应答即可开始下一个字节的发送(跟IIC不同),但会丢包?
寻址方式
通过片选线来寻址,向对应的从设备发送使能信号。
怎么判断高电平还是低电平使能对应的从机,要看CS上面有没有杠,带杠表示低电平有效,不带杠表示高电平有效,根据从机而定
当主设备想要跟从设备通信的时候,发送使能信号
总线空闲的时候,会把所有从机的使能都关了。
极性和相位
CPOL:极性,表示空闲时的电平状态,0表示低电平,1表示高电平
CPHA:相位,表示采样时刻,0表示第一个沿采集(没有沿的时候就放数据了),1表示第二个沿采集
W25Q64用的是支持工作模式0和3,我们常用到的是模式3。
四种模式是为了满足各种芯片不同场合的需求
需要注意的是:对于一个特定的从设备来说,一般在出厂时就会将其设计为某种特定的工作模式,翻芯片手册可以查到;我们在使用该设备时就必须保证主设备的工作模式和该从设备保持一致,否则无法进行通信。
对于IIC,必须是高电平放,低电平读数据
空闲状态下,IIC的SCL和SDA都是高电平,因为俩都是开漏
IIC
串行半双工通信总线
应用场合:主要用于近距离(几米),低速(传不了视频)的芯片之间的通信
硬件结构简单,成本较低
通信过程
1.主机发送一个起始信号启用总线
2.主机发送一个字节数据指明从机地址和后续字节传输方向。0:写 1:读
0:主机发送,从机接收 1:从机发送,主机接收
3.被寻址的从机发送应答信号回应主机
4.发送器发送一个字节数据,接收器发送应答信号回应发送器(该步骤循环)
5.通信完成后主机发送停止信号释放总线
寻址方式
主机发送起始信号之后,必须要发送一个字节的数据,这个数据的高七位是从机的地址,总线上所有的从机接收到该字节数据后,会把这7位地址,和自己的地址比较,如果相同,会认为自己被主机寻址,再根据第八位将自己定义为接收器或发送器。
字节的传输和应答
IIC总线通信时每个字节是8位的长度,先传送最高位,再传送低位(串口是5-8位的数据,先传低位,再传高位)。发送器发送完一个字节数据后接收器必须发送1位应答位来回应发送,即一帧共有9位。
同步信号
凡是通信,总会遇到的问题:
1.什么时候发送,什么时候接收
2.高电平代表几个一
串口 | IIC |
---|---|
有起始信号和终止信号 | 有起始信号和终止信号 |
波特率 | 时钟线 |
硬件接线
2根线,极致精简
SCK 时钟线
SDA 数据线
串行同步半双工
软件帧格式
IIC和SPI异同
相同点
1.均采用串行同步的方式
2.均采用TTL电平(高电平表示1,低电平表示0),传输距离和应用场景类似。(板子内部)
3.均采用主从方式工作
不同点
1.IIC是半双工,SPI是全双工(SPI土豪线多)
2.IIC有应答机制,SPI无应答机制
3.寻址方式不一样:IIC通过向总线广播从机地址来寻址,SPI通过片选线来寻址,向对应从机发送使能信号(优缺点,SPI占的线多,但通信快,IIC节省资源,但费时间)
4.IIC的时钟极性和相位是固定的,很像是SPI的模式4
不对比的话本质的东西永远不知道
8080
硬件接线
并行接口
并行同步半双工
软件帧格式
不知道
电平接口协议/电气协议
232、485只是在电气层面做了优化,底层还是串口,
那么如果直接使用串口存在什么问题呢?
一般来说做项目的时候很少用串口的。
1.电气接口未统一。UART只是对信号的时序进行了定义,而未定义接口的电气特性;电气特性一般指电平和连接器标准,连接器标准就是说哪根线接哪儿,是什么作用。UART通信时一般直接使用处理器使用的电平。
2.抗干扰能力差。TTL电平来传输就是很容易受到干扰。
3.通信距离极短。一般只用来同一个板子上的芯片之间通信,有个两三米的距离都不行。
TTL
RS232
接口
是个标准,规定了采用标准的连接器 原来是25根线的连接器,后来IBM简化成了DB-9连接器,就9根线,不过我们现在常用的就3根线:接收、发送、地
信号
负逻辑电平,-3V到-15V表示逻辑“1”,+3到+15V表示逻辑“0”,电压升上去之后抗干扰能力就强了,传输距离有15m
电平转换
处理器产生的信号一般都是TTL信号,所以需要电平转换芯片,用MAX232。
另外,232只是在电气层面做了改变,增强了抗干扰能力在软件方面,编程方面跟串口一样,没有区别,232是个纯硬件的东西。
RS485
也是个基于串口的标准
1.传输距离长(1219m)
2.抗干扰能力强
3.可以组个网,232和串口都是点对点,485是一对多
接口
1.485采用两线制,这种接线方式是总线拓扑结构,在统一总线上可以同时存在多个节点
2.半双工,编程时也需要加以处理,发的时候不能收,收的时候不能发。发送使能和接收使能。
信号
差分信号是两根信号线来表述一个0或1。没有共地,是取差值的,两根线受到的干扰是一样的,所以减少了共模干扰。抗干扰能力强,通信距离长。
优势
1.电平值较低,不容易烧毁接口电路的芯片。
2.通信速度快,比232快。
3.抗噪声干扰性强。
4.传输距离远(1219m)
5.可实现多节点组网。
差分信号容易组网。这是电气方面的限制,232不能组网。
数据格式
json
json由大括号