协议层
IIC总线:(inter IC bus)
参考IIC学习链接:
1、两条线:SDA、SCL。所以是同步半双工模式。
SDA:数据线--------------半双工
SCL:时钟信号------------同步
2、IIC总线,何为总线,即IIC协议的这两条线:SDA、SCL上可以挂载其他支持IIC协议的设备。即:支持一主多从、多主多从
此时,就需要引入一个概念:IIC器件地址,每个IIC硬件都会有一个地址信息,(可类比为:MAC地址)。举个例子:EEPROM,前四个地址已经确定了的:1010,后面三个地址有硬件确定的,所以一个IIC总线上只能最多连接8个EEPROM器件。第8位为读写位。
当主机连接从机的时候,从机会将自己的一个地址信息发送到总线上,多个从机就会依次发送。均会被保存到主机上面。
当主机需要给IIC总线上的某个IIC设备发送信息时,均需要先发送一个IIC地址信息,当有IIC从机的地址信息与BUS总线上的信息匹配时,从机会给主机发送一个应答信号。从而建立通讯。
类似于:
上课老师(主机)点名,每个学生(从机)都有唯一的学号信息(地址)。现在老师要开始提问了(主机开始发送数据),“9527,请学号:9527的同学起来回答老师的问题”。(此时9527就是一个IIC从机的地址信息)。此刻,全班的同学都收到了这条消息。只要学号为:9527的同学站了起来,并回答道:老师,我在。(给主机发送应答信号)。老师表示点点头,并开始想该学号为:9527的同学提问。(总计收到从机的应答,并成功建立连接,开始主机和从机间的通讯。)
注意:倘若此时,这个班上的同学,没有学号为:9527的;或该同学今天请假了,那么老师的提问,就不会有同学应答。
那么此刻会出现两者情况:
1、没有同学回答。(忽略该消息)
2、有同学给老师说:该同学请假了(返回一个错误信息响应)
上面的例子是:一主多从,但是IIC也是支持多主多从的。所以如果突然有同学突然说:老师,你不行,让我来。然后这个同学就上去讲了。老师和其余的同学就开始听他讲课了。这个时候呢,老师就变成从机了,这个讲课的同学就变成的主机。
总之呢:谁说话,谁就是主机,但是一个时间段,只能有一个主机
线与:
其中这个“与”,就是与、或、非中的与。表明:主要有一个拉低SDA,那么总线上的SDA线,就一直为低电平。直到所以设备都放手(不拉低)。可理解为:有0全0。
时序流程:
- 起始条件:SCL高电平期间,SDA从高电平到低电平的一个跳变。
- 终止条件:SCL高电平期间,SDA从低电平到高电平的一个跳变。
-
发送一个字节:
SCL低电平期间,主机将数据依次放在SDA线上(高位先行),然后释放SCL(SCL被弱拉高),从机将在SCL高电平期间读取SDA数据位。 注:在SCL高电平期间,SDA的数据必须保持稳定、不变。 否则就产生了终止条件了
-
接受一个字节:
SCL低电平期间,从机将数据依次放在SDA线上(高位先行),然后释放SCL(SCL被弱拉高),主机将在SCL高电平期间读取SDA数据位。 注:在SCL高电平期间,SDA的数据必须保持稳定、不变。 否则就产生了终止条件了
-
指定地址写:对指定设备,在指定地址下,写入指定数据。
起始信号 + 发送7位从机器件地址+读写位(0:写入需要读取的地址) + 发送8位需要读写的地址(移动从机的指针地址) + 发生需要写入的数据。(将data写入到指定指定地址)
-
当前地址读:对指定设备,在当前地址下,读取从机数据。(未指定读取地址,一般默认为0)
起始信号 + 发送7位从机器件地址+读写位(1:读取) + (主机不在发送数据,转换对象。从机开始操作SCL,向SDA中依次放入数据,释放SCL,主机在SCL高电平的时候,就开始读SDA。) + 主机开始接受从机发送的数据
-
指定地址读:对指定设备,在指定地址下,读取数据。(指定地址写 + 当前地址读)
起始信号 + 发送7位从机器件地址+读写位(0:写入需要读取的地址) + 发送8位需要读写的地址(移动从机的指针地址) + 重新发送一个起始信号 + 发送7位从机器件地址+读写位(1:读取) + 主机开始接受从机发送的数据。
特点:谁控制SCL(时钟线),谁就是主设备
-
支持一主多从,多主多从。(IIC器件地址)
期间地址: 分7位或者10位,但是一般采用的是7位,加一位读写位。
-
SCL、SDA都要接上拉电阻(一般是4.7K),保证数据稳定性。
-
为了避免总线信号的混乱,要求各设备连接到总线的输出端均为:漏极开路、或集电极开路
-
标准速度:100K,高速:400K
SPI:
参考视频、博客链接:
四条线:SCK(时钟线)、MOSI(主机输出,从机输入)、MISO(主机输入,从机输出)、NSS(片选)
优势:
- 全双工。两条数据线进行:主从机的数据交换。
- 传输速度快。相比IIC的高速400K而言,要快速很多,都是M起步的。
- 软件代码的配置简单。只要要nss片选,选中从机即可。
- 数据传输灵活。不限制8位(一字节),可以是任意字节的数据。
- 硬件结构简单。就一条SCK时钟线,两个接受、传输线,再加上一个NSS片选线。
不足:
- 无应答信号(ACK)。主机只管发送,交换数据,不管从机是否接受、应答。
- 仅支持一主多从。只能有一个主机,多个从机。
- 需要更多的设备引脚。耗费io资源。
- 传输距离还是相对较短。相对于RS232,RS485而言。
SPI简单的一个通讯流程:
1、主设备开始选择通讯从机设备。将片选信号nss信号拉低。
2、选择合适的通讯模式(四种),发送时钟信号,准备开始通讯。
3、主机将要发送的数据写到数据寄存器。
缓存区通过移位寄存器,在MOSI信号线上,一位一位移出给从机。
同时MISO信号线接受的数据,一位一位的移动到缓冲器。从而实现主、从机数据的交换。
4、从机也同样如此,将自己的串行移位寄存器,通过MISO信号线发送给主机。从而实现主、从机数据的交换。
tips:注意事项:
-
SPI没有主模式、从模式的区别。
-
没有读、写的说法,SPI永远只有数据交换的概念(Swap)
- 对于写:主机直接写,同时在写的过程中,也会接受到从机交换的数据,主机忽略即可。
- 对于读:主机给从机一个无效数据,来抛砖引玉(从机对此数据忽视即可),就会读取到从机对应的数据。
-
总之:收、发是同时、同步进行的。
时钟设备:
- 时钟速率:
- 时钟极性(CPOL):
- CPOL == 0;时钟在空闲时候,为低电平:0
- CPOL == 1;时钟在空闲时候,为高电平:1
- 时钟相位(CPHA):
- CPHA == 0;在时钟的第一个跳变沿采样
- CPHA == 1;在时钟的第二个跳变沿采样
- 四种模式:
- Mode0:CKP=0,CKE =0:当空闲态时,SCK处于低电平,数据采样是在第1个边沿,也就是SCK由低电平到高电平的跳变,所以数据采样是在上升沿(准备数据),(发送数据)数据发送是在下降沿。
- Mode1:CKP=0,CKE=1:当空闲态时,SCK处于低电平,数据发送是在第2个边沿,也就是SCK由低电平到高电平的跳变,所以数据采样是在下降沿,数据发送是在上升沿。
- Mode2:CKP=1,CKE=0:当空闲态时,SCK处于高电平,数据采集是在第1个边沿,也就是SCK由高电平到低电平的跳变,所以数据采集是在下降沿,数据发送是在上升沿。
- Mode3:CKP=1,CKE=1:当空闲态时,SCK处于高电平,数据发送是在第2个边沿,也就是SCK由高电平到低电平的跳变,所以数据采集是在上升沿,数据发送是在下降沿。
多从机:(了解即可,需要用的时候在具体看看。)
目前有两种方式,可以实现多从机:多片选、菊花链。
- 多片选(多NSS):每一个一个从机对应一个nss片选信号线。
- 菊花链(单NSS):一条nss信号线,将主机和所以从机全部串联起来。
UART(通用异步接收机)/USART(通用同步、异步接收机)
参考视频、博客链接:
CSDN—串口通讯UART、RS232、RS485、RS422
关键词:
起始位
数据位
奇偶校验位
停止位
波特率
第一点:UART和USART的通讯方式基本一致,差距不大。唯一区别:是否支持“同步“。
以下仅以UART(异步)通讯模式理解:
- 在异步通讯中,发送方和接受方没有公共时钟,所以必须严格依赖下述的UART帧格式发送、接受数据。
- 名次解释:
- 波特率(bps bit per second):每秒传送的bit的数量。
- 起始位:类似于一个start应答信号,表示数据发送即将开始。
- 数据位:先发低位,在发高位的(低位先行,和IIC不一样,IIC是高位先行)。
- 校验位:一般是一位的奇偶校验位。0:奇数1;1:偶数1。(只能校验,无法修正)
- 停止位:类似于一个stop应答信号,表示数据发送即将结束。
UART和USART之间的区别(UART与USART)
UART | USART |
---|---|
全称是Universal Asynchronous Receiver/Transmitter。 通用异步接收机 | 全称是Universal Synchronous Asynchronous Receiver/Transmitter。 通用同步、异步接收机 |
没有与数据相关的输入时钟信号,因此接收器需要在开始接收之前知道发送器的波特率。 | 其中接收器不需要知道发送器的波特率。它来源于主控提供的时钟信号和数据线。 |
其中只需要数据线。 | 其中需要数据线和时钟线。 |
数据是按字符或逐字节传输的。 | 同步数据以块的形式传输。 |
UART 在微控制器内部生成其数据时钟,并通过使用起始位转换将该时钟与数据流同步。 | 在这种模式下,发送外设将生成一个时钟,接收外设可以从数据流中恢复,而无需提前知道波特率 |
由于与 USART 相比,UART 中的起始位和停止位数据传输速率的开销较低 | 使用外部时钟使 USART 的数据速率远高于标准 UART 的数据速率。 |
UART 很简单,仅提供其基本格式的几个选项,例如停止位的数量以及偶数或奇数,奇偶校验 | USART 更复杂,可以生成与许多不同标准协议相对应的形式的数据,例如 IrDA、LIN、智能卡、RS-485 接口的驱动程序启用和 Modbus,仅举几例。 |
它不能像 USART 那样工作。 | USART 可以像 UART 一样工作。 |
RS232
简述:RS232也是串口通讯的一种,RS232又称为DB9接口。和uart的通讯、接线方式一致,只是这里的RS232是通过Max232芯片,将TTL电平信号,转化为RS232信号。
-
串行、串口通讯。全双工、半双工
-
仅支持一对一,点对点的通讯。
-
负逻辑传输。TTL信号:1 对应-5v-15v,TTL信号:0对应+5v+15v。相对于TTL信号数据传输而言,提高了抗干扰能力,自然就增高了通讯的距离。
-
缺点:
- RS232信号的电平太高,容易损坏接口电路。
- 传输速率较低,传输距离较短。20Kbps,15M
- 无差分线,抗干扰能力弱。
RS485
在串口通讯的基础上,增加了一个485转换芯片(差分信号)
- 将TTL电平信号转为485差分信号,也能转换回去。
- 双绞线形式缠绕,抗干扰能大大增强。传输距离更大(1200M)
- 半双工。即可以实现一主多从的通讯。
总结:
CAN(Control Area Network)
TTL
USB
RS485
在串口通讯的基础上,增加了一个485转换芯片(差分信号)
- 将TTL电平信号转为485差分信号,也能转换回去。
[外链图片转存中…(img-V2HQJrcP-1712646762897)]
- 双绞线形式缠绕,抗干扰能大大增强。传输距离更大(1200M)
- 半双工。即可以实现一主多从的通讯。