总线的完整定义:计算机各种功能部件之间传送信息的公共通信干线,它是由导线组成的传输线束。
总线是一种内部结构,它是cpu、内存、输入、输出设备传递信息的公用通道,主机的各个部件通过总线相连接,外部设备通过相应的接口电路再与总线相连接,从而形成了计算机硬件系统。
1、按照功能和规范,计算机总线可以被分为数据总线、地址总线、控制总线、扩展总线和局部总线,其中数据总线DB、地址总线AB和控制总线CB统称为系统总线。
数据总线用于传输数据信息,是双向三态形式的总线。常见的数据总线有ISA/EISA(Extended Industry Standard Architecture)总线,VESA(Video Electronics Standard Association)局部总线、PCI(Peripheral Component Interconnect)总线等。
地址总线用于传送数据的地址,是单向(CPU传向外部存储器或I/O接口)三态的。
控制总线用来传送控制信号和时序信号,传送方向由具体控制信号而定,一般是双向的。
2、按照传输数据的方式划分,可以分为串行总线和并行总线。串行总线中,二进制数据通过一根数据线逐位发送到目的器件;并行总线的数据线通常超过2根。常见的串行总线有SPI、I2C、UART、USB及RS232等。常见的并行总线有STD、PC总线和IEEE488总线等。
3、按照时钟信号是否独立,可以分为同步总线和异步总线。同步总线的时钟信号独立于数据,互联的部件或设备通过统一的时钟进行同步,而异步总线的时钟信号是从数据中提取出来的,依靠各部件或设备内部定时操作,所有部件或设备是以(请求和应答)信号握手的方式进行。SPI、I2C是同步串行总线,RS232是异步串行总线。
4、按照距离芯片远近等级,可以分为内部总线、系统总线和外部总线。内部总线是外设与处理器之间的总线,用于芯片的一级互连,比如I2C、SCI、I2S、SPI、UART、JTAG、CAN、SDIO、GPIO等。系统总线是各插件板与主板之间的总线,用于插件板的一级互连,通俗来说就是组装电脑时看到的各种排线,比如显卡、声卡、存储卡等和主板进行连接的ISA、AGP、PCI、SCSI、SATA等。外部总线是微机和外部其他设备之间的总线,用于设备的一级互连,比如串口(RS232、RS422)、并口、USB接口、音频接口等。
下面是一些常用的通信总线介绍
I2C(Inter-Integrated Circuit)总线:半双工同步串行总线,只需要SDA(数据线)和SCL(时钟线)两根线进行信息传送。
数据传输以字节为单位,传输过程中大端传输(先传高位,后传低位)。
I2C器件内部采用开漏输出的方法,且总线接上拉电阻,空闲状态默认高电平。
连接到相同总线的设备数量受到总线的最大负载电容限制。
具体的通信协议和时序问题可参考嵌入式常用技术概览之IIC(I2C)_C_XianRen的博客-CSDN博客
SPI(Serial Peripheral Interface)总线:高速全双工同步串行总线,需要4根线,分别是MOSI(主器件数据输出从器件数据输入)、MISO(主器件数据输入从器件数据输出)、SCLK(时钟信号,主器件产生)、CS(片选,从器件使能信号,由主器件控制)
数据按位传输,一个(SCLK)时钟信号传送一位数据,且在主器件移位脉冲下,传输过程高位在前,低位在后。
SPI根据CPOL(时钟极性,空闲时时钟状态为高电平还是低电平)和CPHA(时钟相位,数据采集是在时钟上升沿还是下降沿)的选择共有四种模式。
具体使用可参考SPI主从通信原理及使用_去学点东西吧的博客-CSDN博客_spi 主从
UART(Universal Asynchronous Receiver Transmitter):全双工异步串行总线。由波特率发生器(时钟分频器)、接收器(接收缓冲区、接收移位器)、发送器(发送缓冲区、发送移位器)组成,具有RXD(接收)、TXD(发送)和GND三条信号线。
数据以数据帧的形式进行传输,主要包括起始位(低电平表示开始),数据位(5到8位,先发送最低有效位)、奇偶校验位(1位,可有可无)、停止位(高电平表示结束,可以是1、1.5、2位)和空闲位(高电平表示空闲)。
CAN(Controller Area Network):半双工异步串行总线,国际上应用最广的现场总线之一。通信由CAN_High和CAN_Low两根5V差分信号线实现。
总线空闲时,所有节点都可以发送消息(多主控制),多个节点同时发送的情况下通过标识符(ID)进行仲裁决定优先级。
CAN总线通信过程没有地址的概念,在总线上增加节点时,其他节点的软硬件及应用层不需要改变。可连接的单元总数理论上没有限制,但实际上会受总线上的时间延迟及电气负载的限制。
具有错误检测、错误通知和错误恢复功能。所有单元都可以检测错误(错误检测功能),检测出错误的单元会立即同时通知其他所有单元(错误通知功能),正在发送消息的单元一旦检测出错误,会强制结束当前的发送。强制结束发送的单元会不断反复地重新发送此消息直到成功发送为止(错误恢复功能)。
具有故障封闭功能。CAN 可以判断出错误的类型是总线上暂时的数据错误(如外部噪声等)还是持续的数据错误(如单元内部故障、驱动器故障、断线等),并将引起持续数据错误故障的单元从总线上隔离出去。
具体的通信过程可以参考CAN总线重点总结_去学点东西吧的博客-CSDN博客
LIN(Local Interconnect Network)总线:半双工异步串行总线,是一种低成本的辅助总线网络。基于SCI(UART)数据格式,采用单主多从的模式(无需仲裁)。仅需使用一根12V信号总线和一个无固定时间基准的节点同步时钟线(无需晶振或陶瓷振荡器就能实现自同步)。
LIN总线的一帧由报文头(Header)和报文响应(Response)两部分组成。报文头由主机节点的主机任务发出,包括同步间隔场(13个显性位0)、同步场(1个字节,固定0x55)和被保护标识符场(PID场,一个字节)。报文响应由一个主机节点或从机节点的从机任务发出,包括数据场(2/4/8个字节)和校验和场(1个字节)。报文头和响应之间有一个帧内空间间隔(可为0)。
传输过程中除同步间隔场外均满足字节场格式(1位起始位+8位数据位+1位终止位),且低位在前(小端传输)。
详细学习可参考:
RS232:全双工异步串行总线,仅需一条发送线、一条接收线和一条地线即可实现通信。传输距离受负载电容影响,并且属于单端信号传送,存在共地噪声和共模干扰问题,因此一般用于短距离通信。
RS485:半双工异步串行总线,采用平衡发送和差分接收,具有抑制共模干扰的能力,通信距离几十米到上千米。