SPI通信协议详解,一篇就够
什么是SPI?
SPI的英文全称为Serial Peripheral Interface,顾名思义为串行外设接口。SPI是一种同步串行通信接口规范,主要应用于嵌入式系统中的短距离通信。该接口由摩托罗拉在20世纪80年代中期开发,后发展成了行业规范。
简介
SPI是一种高速的、全双工的、同步的通信总线,并且至多仅需使用4根线,节约了芯片的管脚,SPI主要应用于EEPROM、FLASH、ADC、DAC等芯片,还有数字信号处理器和数字信号解码器之间。
SPI设备之间采用全双工模式通信,是一个主机和一个或者多个从机的主从模式。主机负责初始化帧,这个数据传输帧可以用于读与写两种操作,片选线可以从多个从机选择一个来响应主机的请求。
SPI接口定义如下表:
由上表也可以看出当SPI设备间通信时,数据线应该是MOSI连接MOSI,MISO连接MISO,SCLK与SCLK相连,而不是像串口那样TX、RX进行反接。当只有单一SPI从机设备时,如果从机设备允许的话,可直接将CS/SS线固定在低电平。然而类似于MAX1242这款需要CS/SS线的下降沿来触发的芯片,则必须将CC/SS线与主机相连。如下图,为一主一从连接方式。
对于多个从机设备时,则每个从机都需要一根CS/SS线来于主机相连,从而达到主机能与任一从机通信的目的。如下图,为一主多从的连接方式。
大多数从机设备都有着三态逻辑的特性,因此当设备未被选中时,它们的MISO信号线会变成高阻抗状态(电气断开)。没有三态输出的设备则需外接三态缓冲器才能与其他的从机设备共享SPI总线。
数据传输
在SPI通信中,SPI主机设备以从机设备支持的频率通过SCLK线给到SPI从机设备,这点也意味着从机是无法主动向主机发送数据的,只能主机轮询向从机发或者从机设备主动通过一个IO口来告知主机数据到达。
在SPI每个时钟周期内,都会进行一次全双工数据的传输。主机通过MOSI线上发送1bit时,从机也会在读取到之后通过MISO线发送1bit数据出去。这说明,即使只进行单工通信,也会保持此通信顺序。
SPI传输通常涉及到两个给定了字长的移位寄存器。例如在主机、从机中的8bit的移位寄存器。它们以虚拟环形拓扑连接,数据通常先从最高有效位被移出。在时钟沿,主机和从机都移出1bit数据从传输线上给到对方。在下一个时钟边沿来到时,双方的接收器再对传输线上的该bit进行采样,并将其设置为移位寄存器的新的最低有效位。在寄存器位被移出和移入后,主机和从机交换了寄存器值。如果需要交换更多数据,则重新加载移位寄存器并重复该过程。传输可以持续任意数量的时钟周期。完成后,主机停止切换时钟信号。如下图,为主从机之间的交互时的移位寄存器示意图。
其中上图的通信流程如下:
1.SPI主机首先先将SS或CS线拉低,以此来告知SPI从机通信开始。
2.主机通过发送SCLK时钟信号,来告知从机即将进行的读写操作。这里的SCLK时钟信号是由SPI的模式来决定是高电平还是低电平有效的,这点在稍后会进行介绍。
3.主机(Master)将要发送的数据写到发送数据缓存区(Memory),缓存区经过移位寄存器(0~7),串行移位寄存器通过MOSI信号线将字节一位一位的移出去传送给从机,同时MISO接口接收到的数据经过移位寄存器一位一位的移到接收缓存区。
4.从机(Slave)也将自己的串行移位寄存器(0~7)中的内容通过MISO信号线返回给主机。同时通过MOSI信号线接收主机发送的数据,这样,两个移位寄存器中的内容就被交换。
SPI通信的4种工作模式
SPI通信中有4种不同的操作模式,不同的从机设备可能在出厂时就被设置好了某种模式,并且无法更改。但是SPI通信必须处于同一种模式下才能进行。因此我们应该对自己手里的SPI主机设备进行模式的配置,也就是通过CPOL(时钟极性)和CPHA(时钟相位)来控制SPI主设备的通信模式,具体如下:
时钟极性(CPOL)定义了SCLK时钟线空闲状态时的电平:
1.CPOL=0,即SCLK=0,表示SCLK时钟信号线在空闲状态时的电平为低电平,因此有效状态为高电平。
2.CPOL=1,即SCLK=1,表示SCLK时钟信号线在空闲状态时的电平为高电平,因此有效状态为低电平。
时钟相位(CPHA)定义了数据位相对于时钟线的时序(即相位):
1.CPHA=0,即表示输出(out)端在上一个时钟周期的后沿改变数据,而输入(in)端在时钟周期的前沿(或不久之后)捕获数据。输出端保持数据有效直到当前时钟周期的尾部边缘。对于第一个时钟周期来说,第一位的数据必须在时钟前沿之前出现在MOSI线上。也就是一个CPHA=0的周期包括半个时钟空闲和半个时钟置位的周期。
2.CPHA=1,即表示输出(out)端在当前时钟周期的前沿改变数据,而输入(in)端在时钟周期的后沿(或不久之后)捕获数据。输出端保持数据有效直到下一个时钟周期的前沿。对于最后一个时钟周期来说,从机设备在片选信号消失之前保持MISO信号线有效。也就是一个CHPA=1的周期包括半个时钟置位和半个时钟空闲的周期。
Note:此处的前沿和后沿的意思表示在每个周期中第一个出现的边沿和最后一个出现的边沿。总的来说则为:当时钟为正向时钟时,时钟线的上升沿为前沿,时钟的下降沿为后沿,反之。
如下表,为SPI通信的4种模式:
下图显示了时钟极性和相位的时序图。红线表示时钟的前沿,蓝线表示时钟的后沿。
SPI协议的优缺点
SPI的优点在于它有着比I2C更高的吞吐量,不被最大时钟速度所限制,可实现潜在的高速、极为简单的硬件接口,外围电路使用的上拉电阻是比I2C协议更少的,这意味着它比I2C的功耗更低、从机的时钟来源来自主机设备,无需新增精密振荡器、从机不需要唯一的地址、相对于并行接口而言,使用的引脚数目大大减少等优点。但同时有着一定的缺点,例如SPI没有带内寻址、当使用多个不同模式的从机设备时,主机设备切换模式时重新初始化,会使得访问从机设备速度变慢、SPI从机设备没有硬件流控,只能通过主机自主的延迟下个时钟周期到来的时间、仅能在短距离通信等缺点。但能在避免SPI的缺点的方向来应用SPI的话,SPI的优点让它远远优于其他协议。
CS创世 SD NAND与SPI NAND的对比分析
之前我们写过文章说明了CS创世 SD NAND与eMMC,TF卡,Raw nand等产品的对比。今天给大家聊聊CS创世 SD NAND 与SPI NAND的对比。
这两个产品外观看起来类似孪生兄弟:感兴趣的朋友们可以找雷龙发展申请免费样品测试哦~~~
CS创世 SD NAND 与SPI NAND的对比
都是6*8mm大小,SD NAND是LGA-8封装,SPI NAND是WSON-8封装。它们有哪些异同点呢?
一, 相同点:
1.1 内部材质
主流基本都使用的是SLC NAND Flash晶圆,擦写寿命5~10W次
1.2 封装大小
主流尺寸都是6*8mm,8pin脚
二, 不同点:
2.1接口不同
SD NAND正常接CPU的SDIO使用,有些平台也支持SD NAND接SPI接口(但读写速度可能会变慢); SPI NAND接SPI接口, 接SDIO则无法正常使用。
2.2驱动程序
基本上主流CPU平台都自带SDIO的驱动,因此SD NAND不需要用户额外写驱动;另外SD NAND内置了针对NAND Flash的EDC/ECC,坏块管理,平均读写,垃圾回收等算法。针对NAND Flash的管理完全做好了;而SPI NAND主要是做协议的转换,从并口转为SPI接口,有部分厂商产品内置了EDC/ECC算法,但其他管理机制未包含在内。从而导致了用户在使用SPI NAND时还是要写驱动程序。
2.3读写速度
由于接口和协议的差异,两者的速度差异比较大。SD NAND走的是4-bit传输带宽,读写速度相比SPI NAND要快很多,最高写入速度可以达到Class 10级别;而SPI NAND 主流还是1-bit传输模式,读写速度要慢很多。
2.4稳定度
SD NAND由于内置了全套管理算法,在稳定度方面会好很多。特别是针对掉电保护这块。例如CS创世 SD NAND二代通过了客户10K次的随机掉电测试。而SPI NAND跟Raw NAND 都“继承”了NAND Flash先擦后写机制带来的弊端,在写入数据的时候突然掉电很容易丢失数据。
整体来看SD NAND是一个集成了完整NAND Flash算法的Total Solution,而SPI NAND主要是完成协议的转换,内置的算法并不完整。
亲爱的卡友们,如果看完文章之后还是有疑惑或不懂的地方,请联系我们,自己去理解或猜答案是件很累的事,请把最麻烦的事情交给我们来处理,术业有专攻,闻道有先后,雷龙发展专注存储行业13年,专业提供小容量闪存解决方案。
SD NAND应用领域
相关问答
谁知道 SPI 通信 协议 内容?SPI,是英语SerialPeripheralinterface的缩写,顾名思义就是串行外围设备接口。SPI,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线...
SPI 和IIC是个接口还是一个芯片?还是一个 协议 ?SPI和IIC是接口协议,是用来在两个芯片之间通信的协议。SPI和IIC是接口协议,是用来在两个芯片之间通信的协议。
SPI 是什么意思呢?SPI是串行外设接口(SerialPeripheralInterface)的名称缩写。SPI,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管...
spi 通信是串行还是并行?是串行。SPI是串口外设接口的缩写,是一种高速的、全双工、同步的通信协议,是微处理器与外围IC之间常用的一种通讯方式。SPI是主从式的通信协议,可以一主机一...
iso spi 怎么和labview通讯?ISOSPI和LabVIEW可以通过以下步骤进行通讯:1.ISOSPI可以通过LabVIEW进行通讯。2.LabVIEW是一种图形化编程语言,可以用于控制和监测各种硬件设备。而ISOSPI...
通俗解释下什么是 SPI 总线?控制1602当然不属于总线连接,非要说协议,也算是有吧,对1602的初始化命令字,显示字符的方法,必须按规定的格式才行,这就属于协议。SPI和IIC总线,都是一个...
spi 总线电压?工作电压是根据所用芯片来定的,有的芯片有3.3V电压,有的是5V电压。而两个芯片之间用SPI通信,必须电压一致,如果两芯片一个是3.3一个是5V,那最好加上光耦隔离...
关于调试stm32和stm8的i2c和 spi协议 的之间的区别?其实两种通讯模式都是串行通信,通讯协议可以相同的。但是I2c与spi首先是硬件上的接口就不相同,spi上有个控制的引脚,要拉高或者放低来使能通讯与否,还有data...
SPI 是什么意思?SPI是串行外设接口(SerialPeripheralInterface)的缩写。SPI,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,...S...
miso和mosi的区别?MISO(多功能接口)和MOSI(多合一接口)都是数字显示接口,它们在某些设备上可以用于连接多个接口。MISO接口通常用于连接计算机、服务器和数字显示器等设备,而...