1. SPI
SPI是串行外设接口( Serial Peripheral Interface)的缩写。 SPI,是一种高速的(之前做学传输比特115200 =112k, 而SPI传输速度为10Mbps),全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便,正是出于这种简单易用的特性,如今越来越多的芯片集成了这种通信协议,如NRF24L01、 VS1053、 SD卡等。
SPI和IIC 的区别和联系:
相同: SPI和IIC都可连接多个设备,但只有一个设备处于运行状态(SPI由片选引脚,高低电平,IIC);
不同 : SPI的传输速率可达到10Mbps, 通常用于大数据凉的吞吐,数据存取;IIC通常的传输速率为100k,通常用于控制,例如视频控制,音频控制;
2. IIC
IIC 即Inter-Integrated Circuit(集成电路总线),这种总线类型是由菲利浦半导体公司在八十年代初设计出来的,主要是用来连接整体电路(ICS) , IIC是一种多向控制总线,也就是说多个芯片可以连接到同一总线结构下,同时每个芯片都可以作为实施数据传输的控制源。这种方式简化了信号传输总线。 I2C串行总线一般有两根信号线,一根是双向的数据线SDA,另一根是时钟线SCL。所有接到I2C总线设备上的串行数据SDA都接到总线的SDA上,各设备的时钟线SCL接到总线的SCL上。
IIC是一种多向控制总线,既可以发送数据,又可以接受数据;
I2C总线的操作模式:主发送模式、从接收模式、从发送模式、从接收模式。
3. CAN通信
CAN根据两根线上电位差来判断总线电平,总线电平分为显性电平和隐形电平,两者必居其一,发送方通过控制总线电平发送信息给接收方。
显性电平对应逻辑0,两根线压差2.5V左右,隐形电平对应逻辑1,压差为0。总线上可以挂很多单元,显性电平具有优先权,一个单元
显性电平,则总线为显性。CAN总线起止断有120R的电阻,用于做阻抗匹配,减少回波反射。
CAN 协议具有一下特点:
- 多主控制。 在总线空闲时,所有单元都可以发送消息(多主控制),而两个以上的单元同时开始发送消息时,根据标识符
(Identifier 以下称为 ID)决定优先级。 ID 并不是表示发送的目的地址,而是表示访问总线的消息的优先级。两个以上的单
元同时开始发送消息时,对各消息 ID 的每个位进行逐个仲裁比较。仲裁获胜(被判定为优先级最高)的单元可继续发送消息,仲裁
失利的单元则立刻停止发送而进行接收工作。 - 系统的柔软性。 与总线相连的单元没有类似于“地址”的信息。因此在总线上增加单元时,连接在总线上的其它单元的软硬件及
应用层都不需要改变。 - 通信速度较快,通信距离远。 最高 1Mbps(距离小于 40M),最远可达 10KM(速率低于 5Kbps)。
- 具有错误检测、错误通知和错误恢复功能。 所有单元都可以检测错误(错误检测功能),检测出错误的单元会立即同时通知其他
所有单元(错误通知功能),正在发送消息的单元一旦检测出错误,会强制结束当前的发送。强制结束发送的单元会不断反复地重新
发送此消息直到成功发送为止(错误恢复功能)。 - 故障封闭功能。 CAN 可以判断出错误的类型是总线上暂时的数据错误(如外部噪声等)还是持续的数据错误(如单元内部故障、
驱动器故障、断线等)。由此功能,当总线上发生持续数据错误时,可将引起此故障的单元从总线上隔离出去。 - 连接节点多。 CAN 总线是可同时连接多个单元的总线。可连接的单元总数理论上是没有限制的。但实际上可连接的单元数受总
线上的时间延迟及电气负载的限制。降低通信速度, 可连接的单元数增加;提高通信速度,则可连接的单元数减少。正是因为 CAN 协
议的这些特点,使得 CAN 特别适合工业过程监控设备的互连,因此,越来越受到工业界的重视,并已公认为最有前途的现场总线之
一。
4. RS485 (半双工) RS232全双工
(使用差分信号,所以坑干扰能力强,传输距离远,最大可传1200m,常用串口线传输距离为15m
)
5. CAN 总线与RS485的比较
1、速度与距离:CAN与RS485以1Mbit/S的高速率传输的距离都不超过100M,可谓高速上的距离差不多。但是低速CAN以5Kbit/S时,距离可达10KM。而增强型RS485收发器在最低的速率时亦能传输超过10KM(都无中继),两者在长距离的传输上也难分伯仲。
2、总线利用率:RS485是单主从结构,就是一个总线上只能有一台主机,通讯都由它发起的,它没有下命令,下面的节点不能发送,而且要发完即答,受到答复后,主机才向下一个节点询问,这样是为了防止多个节点向总线发送数据,而造成数据错乱。而CAN-bus是多主从结构,每个节点都有CAN控制器,多个节点发送时,以发送的ID号自动进行仲裁,这样就可以实现总线数据不错乱,而且一个节点发完,另一个节点可以探测到总线空闲,而马上发送,这样省去了主机的询问,提高了总线利用率,增强了快速性。所以在汽车等实性要求高的系统,都是用CAN总线,或者其他类似的总线。
3、误检测机制:RS485只规定了物理层,而没有数据链路层,所以它对错误是无法识别的,除非一些短路等物理错误。这样容易造成一个节点破坏了,拼命向总线发数据(一直发1)错,这样造成整个总线瘫痪。所以RS485一旦坏一个节点,这个总线网络都挂。而CAN总线有CAN控制器,可以对总线任何错误进行检测,自动转换错误状态,适时关闭总线,进而保护总线。如果检测到其他节点错误或者自身错误,都会向总线发送错误帧,来提示其他节点,这个数据是错误的,大家小心。这样CAN总线一旦有一个节点程序跑飞了,它的控制器自动闭锁,保护总线。所以在安全性要求高的网路,CAN是很强的。
4、器件价格:随着CAN总线迅猛发展,目前CAN隔离收发器单价大有与RS485价格持平的趋势,RS485收发器逐渐失去价格优势。
5、开发难度:CAN具有完善的通信协议,底层机制由CAN控制器芯片及其接口芯片来实现,研发工程师只需要了解面向客户的应用层,从而大大降低了系统的开发难度,缩短了开发周期。而RS-485协议仅仅只有电气协议,客户开发需要自己开发链路层和应用层,开发难度较大。
6. 总结对比
STM32常用通信总线 -----(SPI、I2C、CAN、USART、USB) https://blog.csdn.net/qq_26602023/article/details/77837779