总线
1.总线
总线:连接多个部件的信息传输线 ,是各部件共享的传输介质
芯片内部总线:芯片内部的各个外设通信的总线
芯片外部总线:芯片和芯片之间通信的总线(UART,IIC,SPI,USB,485,CAN等)
2.串行通信及并行通信
2.1串行通信
同一时刻只能收或者发1bit位的信息
数据按位传输 占用引脚资源少 速度相对较慢
UART IIC SPI 485 CAN USB2.0 USB3.0 等
2.2并行通信
同一时刻可以收或者发多个bit位的信息
数据各个位同时传输 占用引脚资源多 速度快
LCD屏 摄像头 内存条 等
3.同步通信及异步通信
3.1同步通信
通信双方根据同步信号进行通信的方式
通信双方有一个共同的时钟信号,根据时钟信号的变换进行通信
一个时钟周期内收发一bit位的数据
3.2异步通信
通信双方约定好通信速度,传输速度依赖于自己独立的系统时钟
异步通信不需要同步时钟信号,要求通信的速度一致,也就是时钟频率一致(每秒发送信号的频率)
4.UART总线
串口使用了三根线:TXD(发送数据线) RXD(接收数据线) GND(共地线)
调用的异步串行全双工总线
5.UART串口通信协议
通信协议:通信双方按照某个特定的格式进行数据收发
起始位:发送数据开始的信号,由发送器产生
数据位:发送的数据位,先发送低位,再发送高位
校验位:判断是否正确
奇校验
数据位和校验位中,1的个数之和位奇数
demo:
发送的数据 0x55---> 0101 0101 --->偶数个1
校验位:自动补1
发送的数据 0x51---> 0101 0001 --->奇数个1
校验位:自动补0
偶校验
数据位和校验位中,1的个数之和位偶数
demo:
发送的数据 0x55---> 0101 0101 --->偶数个1
校验位:自动补0
发送的数据 0x51---> 0101 0001 --->奇数个1
校验位:自动补1
波特率(比特率):串口收发数据的速率,单位是bps(1s发送数据的bit位)
常用的比特率为115200bps,9600bps
8N1协议:8–>8位数据位 N–>没有校验位 1–>1个停止位
6.IIC
1>IIC也叫I2C,是一种同步串行的半双工总线,主要用于连接整体电路
同一个PCB之上,两个芯片之间通常采用IIC
2>I2C总线为两线制,只有两根双向信号线 数据线SDA 时钟线SCL
3>I2C的通信速率在100K-400K之间,一般用于各种传感器中,不需要很快的传输速率
I2C总线必须接两个上拉电阻,保持在空闲状态,I2C总线处于高电平的状态
6.1 I2C总线连接
1> I2C是具备多主机多从机系统所需的高性能串行总线,一般采用的是单主机多从机
2> 每个接到I2C总线的器件都有唯一的从机地址(设备地址,一般为7位)
3> 发送器:总线上发送数据的器件
4> 总线上接收数据的器件
5> 主机:可以主动发起通信或者结束通信的器件,一般为处理器
6> 从机: 只能被动接收数据或者发送数据的器件,一般为传感器
6.2 IIC总线的时间图
时序图: 随着时钟信号的变化,数据在信号线上的信号也随着改变
6.3 起始信号及终止信号
1>SCL线为高电平期间,SDA线由高电平向低电平的变化表示起始信号
2> SCL线为高电平期间,SDA线由低电平向高电平的变化表示终止信号
3> 起始信号以及终止信号都是由主机发出,其中起始信号产生后,总线就处于占用态,终止信号产生后,总线就处于空闲态
6.4 数据信号的时序图
1> I2C总线进行数据传送时,时钟信号为高电平期间,数据线上的数据必须保持稳定,
只有在时钟线上的信号为低电平期间,数据线上的高电平或低电平状态才允许变化。
2> 在时钟为高电平期间,数据线上的数据必须要保持稳定,此时接收器从数据线上读取数据。
3> 在时钟为低电平期间,数据线上的数据可以改变,此时发送器向数据线上写入数据。
4> 一个时钟周期收发一个bit位的数据
6.5 应答信号时序图
1> 每一个字节必须保证是8位长度。数据传送时,先传送最高位(MSB),每一个被传送的字节后面都必须跟随一位应答位(即一帧共有9位)。
2> 应答信号是由接收器产生的,当接收器收到8个bit位的数据之后需要给发送器返回一个应答信号或者非应答信号。
3> 在第九个时钟周期的低电平期间,接收器向数据线上写入数据,
在第九个时钟周期的高电平期间,发送器从数据线上读取数据,
如果读到的是低电平,则认为为应答信号,如果读到的是高电平,则认为为非应答信号。
6.6 I2C总线的从机地址
1> I2C总线上传送的数据信号是广义的,既包括地址信号,又包括真正的数据信号。
2> 主机在起始信号后必须传送一个从机的地址(7位),第8位是数据的传送方向位(R/W),
用“0”表示主机发送数据(W),“1”表示主机接收数据(R)。
总线上的每个从机都将这7位地址码与自己的地址进行比较,
如果相同,则认为自己被主机寻址,根据R/W位将自己定为发送器或接收器。
7. I2C总线的通信协议
7.1 主机给从机发生一个字节数据的通信协议
8位的数据被写到寄存器对应的地址中。
7.2 主机给从机发生连续的多个字节数据的通信协议
第一个8位数据被写到寄存器地址中;
第二个8位数据被写到寄存器地址+1中;
第三个8位数据被写到寄存器地址+2中;
以此类推即可。
7.3 从机给主机发送一个字节数据的通信协议
从机将寄存器地址中的数据发送给主机。
7.4 从机给主机发送连续多个字节数据的通信协议
从机将寄存器地址中的数据发送给主机;
从机将寄存器地址+1中的数据发送给主机;
依次类推类推。
为什么从机给主机发送数据时,最后一个数据时主机给从机的是非应答信号?
从机只能被动的停止发送或者接收数据,如果从机收到的是要给应答信号,则从机认为你想接收下一个数据,从机就会给主机发送下一个字节的数据,如果从机收到的是非应答信号,从机是不会发送下一个字节的数据的。
8. SPI总线
1> SPI接口是全双工四线同步串行外围接口,采用主从模式(Master Slave)架构;
2> 支持多slave模式应用,一般仅支持单Master。
3> 时钟由Master控制,在时钟移位脉冲下,数据按位传输,高位在前,低位在后(MSB first);
4> SPI接口有2根单向数据线,为全双工通信,目前应用中的数据速率可达几Mbps的水平。
5> SPI总线被广泛地使用在FLASH、ADC、LCD等设备与MCU间,要求通讯速率较高的场合
8.1 SPI总线的硬件连接
SPI接口共有4根信号线,分别是:
__ __
设备选择线(片选线) : CS SS NCS NSS SS0 CS0
时钟线 : CLK SCK SCLK
串行输出数据线 : MOSI
串行输入数据线 : MISO
M : Master S : Slave
I : Input O : Output
SPI总线物理·拓扑结构
• (1)MOSI:主器件数据输出,从器件数据输入
• (2)MISO:主器件数据输入,从器件数据输出
• (3)SCLK :时钟信号,由主器件产生
• (4)/SS:从器件使能信号,由主器件控制(片选线)
8.2 4线制SPI总线(单主机多从机/单主机单从机)
8.3 3线制SPI总线(单主机单从机)
8.4 SPI的四种通信模式
在SPI操作中,最重要的两项设置就是时钟极性(CPOL)和时钟相位(CPHA)这两项即是主从设备间数据采样的约定方式。
1>时钟极性CPOL :设置时钟空闲时的电平
当CPOL = 0 ,SCK引脚在空闲状态保持低电平;
当CPOL = 1 ,SCK引脚在空闲状态保持高电平。
2>时钟相位CPHA :设置数据采样时的时钟沿
当 CPHA=0 时,MOSI或 MISO 数据线上的信号将会在 SCK时钟线的奇数边沿被采样
当 CPHA=1时, MOSI或 MISO 数据线上的信号将会在 SCK时钟线的偶数边沿被采样
CPOL)和时钟相位(CPHA)这两项即是主从设备间数据采样的约定方式。
1>时钟极性CPOL :设置时钟空闲时的电平
当CPOL = 0 ,SCK引脚在空闲状态保持低电平;
当CPOL = 1 ,SCK引脚在空闲状态保持高电平。
2>时钟相位CPHA :设置数据采样时的时钟沿
当 CPHA=0 时,MOSI或 MISO 数据线上的信号将会在 SCK时钟线的奇数边沿被采样
当 CPHA=1时, MOSI或 MISO 数据线上的信号将会在 SCK时钟线的偶数边沿被采样