历史上的今天
今天是:2024年09月03日(星期二)
2019年09月03日 | I2C SPI UART串行接口对比分析
2019-09-03 来源:eefocus
0 SPI
SPI:串行外转接口,允许以全双工方式实现数据与各种外围设备高速数据传输。由3根线组成,(串行时钟)SCLK、(串行数据输出)SDO和(串行数据输入)SDI组成,当然对于多个从设备而言,会添加一根SS片选信号。SDO和SDI都是基于时钟脉冲SCLK完成数据,且是一比特比特传输。而且SCLK只能由主设备控制。
特点包括如下几点
l 采用主从方式,且由主设备控制SCLK。
l 全双工的同步方式传输数据,全双工就是指主设备发送数据时也会接收到从设备的数据。而之所以称为同步是因为传输数据必须严格根据时钟,以及时钟极性和时钟相位(CPHA)控制两个SPI设备间何时交换数据。
l 数据交换方式,之所以称为数据交换是因为在发送完一比特数据后也会接收到一比特数据。所以SPI没有读写区分,因为发送完一比特就会接收到一比特。
l 接收方式:只要发生了数据传输完成事件,都要去SPI设备相应的寄存器中读取数据,即使数据没有意义。
重点介绍下SPI的工作模式。虽然是依靠SCLK完成传输,但是由于时钟极性和时钟相位的不同衍生出了四种工作模式,传输时序。
CPOL: 时钟极性, 表示 SPI 在空闲时, 时钟信号是高电平还是低电平. 若 CPOL 被设为 1, 那么该设备在空闲时 SCK 管脚下的时钟信号为高电平。当 CPOL 被设为 0 时则正好相反。
CPHA: 时钟相位, 表示 SPI 设备是在 SCK 管脚上的时钟信号变为上升沿时触发数据采样, 还是在时钟信号变为下降沿时触发数据采样。若 CPHA 被设置为 1, 则 SPI 设备在时钟信号变为下降沿时触发数据采样, 在上升沿时发送数据。当 CPHA 被设为 0 时也正好相反。


写多个寄存器


读多个寄存器

具体以AT24C02为例,讲解其传输逻辑,如下图所示。

2 UART
通用异步传输协议,收发器。较为简单,由两线组成,TxD和RxD,设备交叉连接。由起始们、奇偶校验位、数据位、停止位组成。同时如果使用了RTS、CTS等流控信号线则更为复杂,有待补充。
它使用的电平标准是TTL/CMOS逻辑电平标准,(0~5v、0~3.3v、0~2.5v或0~1.8v)来表示数据,高电平表示1,低电平表示0。为了增强数据的抗干扰能力、提高传输长度,通常将TTL/CMOD逻辑电平转换为RS-232逻辑电平,3~12v表示0,-3~-12v表示1。这也就是UART和RS232的区别和联系。数据传输流程如下:
(1)平时数据线处于空闲状态(1状态)
(2)当要发送数据时,UART改变TxD数据线的状态(变为0状态)并维持1位的时间,这样接收方检测到开始位后,在等待1.5位的时间就开始一位一位地检测数据线的状态得到所传输的数据。
(3)UART一帧中可以有5、6、7或8位的数据,发送方一位一位地改变数据线的状态将他们发送出去,首先发送最低位。
(4)如果使用校验功能,UART在发送完数据后,还要发送1位校验位。有两种校验方法:奇校验、偶校验——数据位连同校验位中,1的数据等于奇数或偶数。
(5)最后,发送停止位,数据线恢复到空闲状态(1状态)。停止位的长度有3种:1位、1.5位、2位。
3 对比
如下表所示。
SPI | I2C | UART | |
电气信号线 | 4线:SS、SCLK、SDO和SDI | 2线:SCL、SDA | 2线:TXD、RXD |
工作模式 | 全双工 | 半双工 | 全双工 |
组网 | 规模有限 | 支持128个设备组成的网络(地址是7位) | |
寻址模式 | 通过片选信号 | 发送具体地址 | |
传输速率2 | 几Mbps但是比I2C快 | 标准速度:100kbps 快速模式:400kbps 高速模式:3.4Mbps | RS232:<20kbps RS422:最高10Mbps RS485:最高10Mbps |
注:关于传输速率,其实SPI应该根据Master芯片能发起的频率以及Slave能接受的频率,但是肯定的是它一般大于I2C传输频率。对于其它总线传输频率,如下。
l USB总线
USB1.1:
-------低速模式(low speed):1.5Mbps
-------全速模式(full speed): 12Mbps
USB2.0:向下兼容。增加了高速模式,最大速率480Mbps。
-------高速模式(high speed): 25~480Mbps
USB3.0:向下兼容。
-------super speed :理论上最高达4.8Gbps,实际中,也就是highspeed 的10倍左右。
l Ethernet,也就是通常的网速。
--------早期的以太网传输速率只有10Mbps。
--------百兆网:理论上最大100Mbps。
--------千兆网:理论上最大1Gbps。
l SD总线:最高能达10Mbps。
l SATA接口:
--------SATA1.0:理论传输速度是150MB/s(或者1.5Gb/s),实际也就30MBps。
--------SATA2.0: 300MBps,即3Gbps。实际也就80MBps。
--------SATA3.0: 600MBps,即6Gbps。
--------eSATA:理论传输速度可达到1.5Gbps或3Gbps。
l PCI总线
--------PCI:32位,33MHz时钟频率,速率是33*4 = 133MBps,即1Gbps。
-------- PCI 2.1:64位,66MHz时钟频率来说:速率是66*8 = 528MBps,即4Gbps。
史海拾趣
|
公司现在有2个产品一个是ARM7的还有个是SyncMOS sm8958A的板子上还有个Atmel ATF1508AS,现在要我接手,我该从哪学起呢?我以前是做Windows下软件开发的会Java和C#,C也会,但很久没用了,重新上手的话,估计时间不长。还望各位解答,谢谢。… 查看全部问答> |
|
最近我在eBox4300上定制了几次WIN CE6.0 操作系统,总是出现错误,错误如下: 错误 1 Catalog Id \"StringTable:MS:Cepc:1041\" duplicated in files \"D:\\WINCE600\\platform\\CEPC\\cat ...… 查看全部问答> |
|
ListCtrlUseDlg.obj : error LNK2005: \"private: void __cdecl CListCtrlUseDlg::FillListCtrl(void)\" (?FillListCtrl@CListCtrlUseDlg@@AAAXXZ) 已经在 ListCtrlUse.obj 中定义 1>ListCtrlUseDlg.obj : error LNK2005: \"private: void __cdecl ...… 查看全部问答> |
|
请教大侠:wavecom CDMA Modem收到的中文短信内容如何解析成真正的中文? 请教各位大侠,我手头有个wavecom CDMA Modem现在想做个短信接收程序。当用手机发送短信内容为“测试。”给Modem后,用AT+CMGR取得的短信内容是“mK嬚0”,我用Hex(Ascw(\"m\"))+Hex(Ascw(\"K\"))=6D4B这个结果刚好和“测”的Unicode ...… 查看全部问答> |
|
另类烤鸡蛋方法!标题要有吸引力,其实是altera CIII starter板的问题 首先要说的是这块板非常漂亮,由于外部接口比较少,而之前对FPGA(ALTERA和XILINX)这块用得比较熟悉,没有拿到板之后没有做什么实验!最近用来调试示波器V2.0,发现板子上主FPGA芯片非常烫(没有上扩展板,关于这个问题之前发过帖子),但是JTAG能 ...… 查看全部问答> |
|
出现 Segment CSTART must be defined ,怎么处理? 出错信息如下: Fatal Error[e72]: Segment CSTART must be defined in a segment definition option (-Z, -b or -P) 该怎么处理呢?是新版的带WorkSpace的IAR编译环境。… 查看全部问答> |
|
高频RFID频率是13.56MHz的,以最常用的RC500为例,射频输出两个脚TX1,TX2,接收一个脚RX,另外一个是RX的偏置电压VMID,让RX信号偏置到1/2电源电压位置,保证接收性能最好。 电路如下: TX1和TX2输出13.56MHz的方波,分别通过L200、C2 ...… 查看全部问答> |
|
spi_loopback_interrupts例子中的中断断过程 1、点我也不清楚,在初始化SPIFFRX时,bit12~8(RXFFST)=0,bit4~0(RXFFIL)=8,而按资料上说,当RXFFST 》=RXFFIL时发生接收中断,而又是在接收中断服务程序中接收数据,那岂不是不发生中断就接收不了数据,不接收数据,RXFFST 就不会大于RXFFIL,同 ...… 查看全部问答> |




