SPI:SPI(Serial Peripheral Interface)串行外设接口,全双工,同步串行
1、SPI总线由三条信号线组成:串行时钟(SCLK)、串行数据输出(SDO)、串行数据输入(SDI)。SPI 总线可以实现多个SPI设备互相连接。提供SPI串行时钟的SPI设备为SPI主机或主设备(Master),其他设备为SPI从机或从设备(Slave)。主从设备间可以实现全双工通信,当有多个从设备时,还可以增加一条从设备选择线(即CS-片选信号)。如果用通用IO口模拟SPI总线,必须要有一个输出口(SDO),一个输入口(SDI),另一个口则视实现的设备类型而定,如果要实现主从设备,则需输入输出口,若只实现主设备,则需输出口即可,若只实现从设备,则只需输入口即可。
2、要注意的是,SCK信号线只由主设备控制,从设备不能控制信号线。同样,在一个基于SPI的设备中,至少有一个主控设备。传输方式有一个优点,与普通的串行通讯不同,普通的串行通讯一次连续传送至少8位数据,而SPI允许数据一位一位的传送,甚至允许暂停,因为SCK时钟线由主控设备控制,当没有时钟跳变时,从设备不采集或传送数据。也就是说,主设备通过对SCK时钟线的控制可以完成对通讯的控制。其速度要比I2C总线要快,速度可达到几Mbps。
以下为SPI参考时序:
(注:SPI其输出串行同步时钟极性和相位可以进行配置,时钟极性(CPOL)对传输协议没有重大的影响。如果CPOL=0,串行同步时钟的空闲状态为低电平;如果CPOL=1,串行同步时钟的空闲状态为高电平。时钟相位(CPHA)能够配置用于选择两种不同的传输协议之一进行数据传输。如果CPHA=0,在串行同步时钟的第一个跳变沿(上升或下降)数据被采样;如果CPHA=1,在串行同步时钟的第二个跳变沿 (上升或下降)数据被采样。)
I2C:I2C(Inter-Integrated Circuit)国际集成电路-I2C总线,半双工,同步串行
1、I2C总线是双向、两线(SCL、SDA)、串行、多主控(multi-mas ter)接口标准,具有总线仲裁机制,非常适合在器件之间进行近距离、非经常性的数据通信。在它的协议体系中,传输数据时都会带上目的设备的设备地址,因此可以实现设备组网。如果用通用IO口模拟I2C总线,并实现双向传输,则需一个输入输出口(SDA),另外还需一个输出口(SCL)。
2、每个连接到总线的器件都可以通过唯一的地址和一直存在的简单的主机从机关系软件设定地址主机,可以作为主机发送器或主机接收器。它是一个真正的多主机总线如果两个或更多主机同时初始化数据传输可以通过冲突检测和仲裁,防止数据被破坏。串行的8 位双向数据传输位速率在标准模式下可达100kbit/s,快速模式下可达400kbit/s,高速模式下可达3.4Mbit/s。
以下为I2C参考时序:
UART:UART(Universal Asynchronous Receiver Transmitter)通用异步收发器,全双工,异步串行
1、UART总线由三条信号线组成:RX、TX、GND。UART由波特率产生器(产生的波特率等于传输波特率的16倍)、UART接收器、UART发送器组成。其包括RS232、RS499、RS423、RS422和RS485等接口标准规范和总线标准规范,而它们的主要区别在于其各自的电平范围不相同,嵌入式设备中常常使用到的是TTL、TTL转RS232的这种方式。常用来与PC进行通信,包括与监控调试器和其它器件,如EEPROM通信。如果用通用IO口模拟UART总线,则需一个输入口,一个输出口。
2、它是用于控制计算机与串行设备的芯片,将由计算机内部传送过来的并行数据转换为输出的串行数据流。将计算机外部来的串行数据转换为字节,供计算机内部使用并行数据的器件使用 。在输出的串行数据流中加入奇偶校验位,并对从外部接收的数据流进行奇偶校验。在输出数据流中加入启停标记,并从接收数据流中删除启停标记。
3、值得注意的是,它提供了RS-232数据终端设备接口,故计算机就可以和调制解调器(Modem)或其它使用RS-232接口的串行设备通信了 。
以下为UART参考时序:
区别:(可参考下面表格进行纵向对比)
1、I2C线更少,比UART、SPI更为强大,但是技术上也更加麻烦些,因为I2C需要有双向IO的支持,而且使用上拉电阻,抗干扰能力较弱,一般用于同一板卡上芯片之间的通信,较少用于远距离通信;
2、SPI实现要简单一些,UART需要固定的波特率,就是说两位数据的间隔要相等,而SPI则无所谓,因为它是有时钟的协议;
3、I2C的速度比SPI慢一点,协议比SPI复杂一点,但是连线也比标准的SPI要少,当然UART的速度是最慢的;
另:
1、在STM32大容量产品和互联型产品上,SPI接口可以配置为支持SPI协议或者支持I2S音频协议。SPI接口默认工作在SPI方式,可以通过软件把功能从SPI模式切换到I2S模式。在小容量和中容量产品上,不支持I2S音频协议。I2S也是一种3引脚的同步串行接口通讯协议。它支持四种音频标准,包括飞利浦I2S标准,MSB 和LSB对齐标准,以及PCM标准。它在半双工通讯中,可以工作在主和从2种模式下。当它作为主设备时,通过接口向外部的从设备提供时钟信号;
1、I2S(Inter—IC Sound)总线, 又称集成电路内置音频总线,是飞利浦公司为数字音频设备之间的音频数据传输而制定的一种总线标准,该总线专门用于音频设备之间的数据传输,广泛应用于各种多媒体系统;
2、I2S支持全双工/半双工,支持主/从模式,和PCM相比更适合立体声系统。且I2S的变体也支持多通道的时分复用,因此可以支持多声道;
3、I2S主要有三个信号:串行始终SCLK(也称SCK),也叫位始终(BCLK),对应数字音频的每一位数据,SCLK都有一个脉冲。SCLK的频率=2*采样频率*采样位深;帧时钟LRCK(也称WS),用于切换左右声道的数据。LRCK为"1"表示传输右声道数据,为"0”则是左声道。LRCK的频率 = 采样频率;串行数据SDATA(也称SD),就是用二进制补码表示的音频数据,(MSB ---> LSB:数据由高位到低位依次传输);一般还有MCLK,主时钟;
以下为I2S参考时序:
附:此文为本人经STM32实战后总结所得,欢迎大家参考指点,谢谢。