前言
在硬件传输过程中少不了各模块的通信,就近来学习到的知识做一个简单的梳理与总结
通信的基本概念
通信的方式分为多种,按照数据传送方式可以分为串行通信与并行通信,按照通信的数据同步方式,可以分为异步通信与同步通信,按照数据的传输方向可以分为单工,半双工和全双工通信。
串行通信与并行通信
串行通信
使用一条数据线,一位一位进行传输,适合于远距离通信
传输特点:传输线少,长距离传送成本低,
并行通信
将数据字节的各位用多条数据线同时进行传送,通常是8位,16位,32等数据一起传输
特点:控制简单,传输速度快,长距离传输成本高,抗干扰ability差。
异步通信与同步通信
异步通信
发送与接收设备使用各自的时钟控制数据的发送与接收过程,异步通信以字符为单位进行传输
特点:不要求收发双方时钟严格一致,传输效率不高
同步通信
要建立发送方对于接收方时钟的直接控制,使得双方能够达到完全同步,保持位同步关系,也保持字符同步关系,实现方式有两种:外同步与自同步
单工,半双工与全工
单工通信
是指数据传输只能沿一个方向,不能反传输,只能由发送向接收传输
半双工通信
半双工是指数据传输可以沿两个方向,但需要分时进行
全双工通信
数据可以同时进行双向传输
串口通信(RS232)
全双工点对点通信
RS232C通信协议 通常遵循96-N-8-1格式
“96”表示通信波特率为9600,通常使用的是异步串口通信,没有时钟线,
“N”表示无校验位,用于校验数据防止出现偏差,
“0”表示数据位数为8位
“1”表示1位停止位,可由0.5,1,1.5,或2个逻辑1的数据位表示
串口相关寄存器
(1) 串口控制寄存器SCON
SM0与SM1为工作方式选择位:
SM2:多机通信控制位,主要用于方式 2 和方式 3。当 SM2=1 时可以利用收到的 RB8 来控制是否激活 RI(RB8=0 时不激活 RI,收到的信息丢弃;RB8=1 时收到的数据进入 SBUF,并激活 RI,进而在中断服务中将数据从 SBUF 读走)。当SM2=0 时,不论收到的 RB8 为 0 和1,均可以使收到的数据进入 SBUF,并激活 RI(即此时 RB8 不具有控制 RI 激活的功能)通过控制 SM2,可以实现多机通信。
REN:允许串行接收位。由软件置 REN=1,则启动串行口接收数据;若软件置REN=0,则禁止接收。
TB8:在方式 2 或方式 3 中,是发送数据的第 9 位,可以用软件规定其作用。
可以用作数据的奇偶校验位,或在多机通信中,作为地址帧/数据帧的标志位。
在方式 0 和方式 1 中,该位未用到。
RB8:在方式 2 或方式 3 中,是接收到数据的第 9 位,作为奇偶校验位或地址帧/数据帧的标志位。在方式 1 时,若 SM2=0,则 RB8 是接收到的停止位。
TI:发送中断标志位。在方式 0 时,当串行发送第 8 位数据结束时,或在其它方式,串行发送停止位的开始时,由内部硬件使 TI 置 1,向 CPU 发中断申请。在中断服务程序中,必须用软件将其清 0,取消此中断申请。
RI:接收中断标志位。在方式 0 时,当串行接收第 8 位数据结束时,或在其它方式,串行接收停止位的中间时,由内部硬件使 RI 置 1,向 CPU 发中断申请。也必须在中断服务程序中,用软件将其清 0,取消此中断申请
(2)电源控制寄存器 PCON
SMOD:波特率倍增位。在串口方式 1、方式 2、方式 3 时,波特率与 SMOD 有关,当SMOD=1 时,波特率提高一倍。复位时,SMOD=0。
串口工作方式
(1)方式0
串行口为同步移位寄存器的输入输出方式,主要用于扩展并行输入或输出口。
(2)方式1
为10位异步通信口,1位起始位,8位数据位,1位停止位。
(3)方式2和方式3
11位数据的异步通信口,TXD为数据发送引脚,RXD为数据接收引脚,
串口的使用方法
1,计算波特率
方式0=fosc/12
方式2=(2SMOD/64)*fosc
方式 1 的波特率 =(2SMOD/32)·(T1 溢出率)
方式 3 的波特率 =(2SMOD/32)·(T1 溢出率)
其中 T1 溢出率 = fosc /{12×[256 -(TH1)]}
2,串口初始化的步骤:
- 确定T1的工作方式(TMOD 寄存器)
- 确定串口的工作方式(SCON寄存器)
- 计算T1的初值(设定波特率),装载TH1,TL1;
- 启动T1(TCON中的TR1位)
- 如果使用中断,需开启串口中断控制位(IE寄存器)
RS485通信
为半双工通信,两线制,可以一对多点进行组网
RS485通信特点:
(1)接口电平低,不易损坏芯片。RS485 的电气特性:逻辑“1”以两线间的电压差为+(2~6)V 表示;逻辑“0”以两线间的电压差为(2~6)V 表示。接口信号电平比 RS232 降低了,不易损坏接口电路的芯片,且该电平与 TTL 电平兼容,可方便与 TTL 电路连接。
(2)传输速率高。10 米时,RS485 的数据最高传输速率可达 35Mbps,在1200m 时,传输速度可达 100Kbps。
(3)抗干扰能力强。RS485 接口是采用平衡驱动器和差分接收器的组合,抗共模干扰能力增强,即抗噪声干扰性好。
(4)传输距离远,支持节点多。RS485 总线最长可以传输 1200m 以上(速率≤100Kbps)一般最大支持 32 个节点,如果使用特制的 485 芯片,可以达到128 个或者 256 个节点,最大的可以支持到 400 个节点
i2c通信
I2C(Inter-Integrated Circuit)总线是由 PHILIPS 公司开发的两线式串行总线,用于连接微控制器及其外围设备。是微电子通信控制领域广泛采用的
一种总线标准。它是同步通信的一种特殊形式,具有接口线少,控制方式简单,器件封装形式小,通信速率较高等优点。I2C 总线只有两根双向信号线。一根是数据线 SDA,另一根是时钟线 SCL。由于其管脚少,硬件实现简单,可扩展性强等特点,因此被广泛的使用在各大集成芯片内。
I2c物理层
物理层特点:
(1)支持多设备总线,支持多个通讯主机及通讯从机
(2)只使用两条总线线路,一条双向串行数据线(SDA).一条串行时钟线(SCL) 数据线用来表示数据,时钟线用于数据收发同步
(3)每个连接到总线的设备都有一个独立的地址,主机可以利用这个地址进行不同设备之间的访问。
(4)总线通过上拉电阻接到电源,当I2C设备空闲时,会输出高阻态,当所有设备都空闲输出高阻态,上拉电阻把总线拉成高电平
(5)当多个主机使用总线时,防止数据冲突,会利用仲裁的方式决定哪个设备占用总线
(6)具有三种传输模式,标准模式传输速率为 100kbit/s,快速模式为400kbit/s,高速模式下可达 3.4Mbit/s,但目前大多 I2C 设备尚不支持高速模式
(7)连接到相同总线的 数量收到最大电容400pf的限制
常用的一些术语:
主机:启动数据传送并产生时钟信号的设备
从机:被主机寻址的器件
多主机:同时有多于一个主机尝试控制总线但不破坏传输,
主模式:用 I2CNDAT 支持自动字节计数的模式; 位 I2CRM,I2CSTT,I2CSTP控制数据的接收和发送
从模式:发送与接收操作都是由I2C模块自动控制的
仲裁:是一个在有多个主机同时尝试控制总线但只允许其中一个控制总线并使传输不被破坏的过程
同步:两个或多个器件同步时钟信号的过程;
发送器:发送数据到总线的器件
接收器:从总线接收数据的器件
I2C协议层
定义了通信的起始和停止信号,数据有效性,响应,仲裁,时钟同步和地址广播等环节
(1)数据有效性
I2C总线在进行数据传送时,时钟信号为高电平期间,数据线上的数据必须保持稳定,只有在时钟线上的信号为低电平期间,数据线上的高电平与低电平状态才允许变化
数据传输以字节为单位,传输字节数不受限制
(2)起始和停止信号
SCL线为高电平期间,SDA由高电平向低电平的变化表示为起始信号,SCL线为高电平期间,SDA线由低电平向高电平的变化表示为终止信号
(3)应答响应
在发送器件传输完一个字节的数据后,后边必须跟一个校验位,校验位是接收端通过控制SDA(数据线)来实现,以提醒发送端数据我这边已经
接收完成,数据传送可以继续进行。这个校验位其实就是数据或地址传输过程中
的响应。响应包括“应答(ACK)”和“非应答(NACK)”两种信号。作为数据接收端时,当设备(无论主从机)接收到 I2C 传输的一个字节数据或地址后,若希望对方继续发送数据,则需要向对方发送“应答(ACK)”信号即特定的低电平脉冲,发送方会继续发送下一个数据;若接收端希望结束数据传输,则向对方发送“非应答(NACK)”信号即特定的高电平脉冲,发送方接收到该信号后会产生一个停止信号,结束信号传输。
每一个字节必须保证是 8 位长度。数据传送时,先传送最高位(MSB),每一个被传送的字节后面都必须跟随一位应答位(即一帧共有 9 位)。
这些信号中,起始信号是必须的,结束语应答信号可以不要
总线的寻址方式
7位寻址与10位寻址
10 位寻址和 7 位寻址兼容,而且可以结合使用。10 位寻址不会影响已有的 7 位寻址,有 7 位和 10 位地址的器件可以连接到相同的 I2C 总线。以 7 位寻址为例进行介绍。
当主机发送了一个地址后,总线上的每个器件都将头 7 位与它自己的地址比较,如果一样,器件会判定它被主机寻址,其他地址不同的器件将被忽略后面的数据信号。至于是从机接收器还是从机发送器,都由 R/W 位决定的。从机的地址由固定部分和可编程部分组成。在一个系统中可能希望接入多个相同的从机,从机地址中可编程部分决定了可接入总线该类器件的最大数目。如一个从机的 7 位寻址位有 4 位是固定位,3 位是可编程位,这时仅能寻址 8 个同样的器件,即可以有 8 个同样的器件接入到该 I2C 总线系统中。
SPI通信
SPI是串行外设接口,是 Motorola 公司推出的一种同步串行接口技术,是一种高速的,全双工,同步的通信总线。
SPI优点:支持全双工通信 通信简单 数据传输速率快
缺点:没有指定的流控制,没有应答机制确认是否接受到数据,所以与IIC总线协议比较在数据可靠性上有一定的缺陷
特点:
(1):高速,同步,全双工 非差分,总线式
(2):主从式通信模式(一个SPI通讯系统需要包含一个(只有一个)主设备,一个或多个从设备,SPI的接口读写操作,都是由主设备发起,当存在多个从设备时,通过各自的片选信号进行管理)
SPI的物理层
以主从方式工作,通常有一个主设备和一个或多个从设备,需要至少四根线,MISO,MOSI,SCLK,CS
SPI通信模式
SPI的四种通信模式,不同从设备在出厂时就配置为某种模式,只能改变主设备的SPI并进行配置,通过CPOL(时钟极性)和CPHA(时钟相位)来控制我们主设备的通信模式
时钟极性CPOL用来配置SCLK的电平处于何种状态(空闲态还是有效态),时钟相位CPHA用来配置数据采样是在第几个边沿;
CPOL=0,表示当SCLK=0时处于空闲态,所以有效状态就是SCLK处于高电平时;
CPOL=1,表示当SCLK=1时处于空闲态,所以有效状态就是SCLK处于低电平时;
CPHA=0,表示数据采样是在第1个边沿,数据发送在第2个边沿;
CPHA=1,表示数据采样是在第2个边沿,数据发送在第1个边沿。
在高电平有效状态时,第一边沿为上升沿,第二边沿为下降沿;在低电平有效状态时,第一边沿为下降沿,第二边为上升沿