完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
4个回答
|
|
SPI是串行外设接口(Serial Peripheral Interface)的缩写。是 Motorola 公司推出的一 种同步串行接口技术,是一种高速的,全双工,同步的通信总线。
高速和同步可以理解,全双工是什么鬼? 全双工是指host(主设备)与外围从设备之间的发送线和接受线各自独立,发送数据的同时也能够接收数据,两者同步进行。 SPI协议主要用于短距离的通信系统中,特别是嵌入式系统,比如以下芯片: 存储器:RAM,EEPROM,Flash等 数模转换:A/D,D/A转换器等 驱动接口:LED显示驱动器、I/O接口芯片、UART收发器等。 2017年哪类芯片最缺货啊?存储器相关的啊!好吧,就选它了:SPI Flash。SPI Flash的本质就是使用SPI的协议去对Flash 存储器进行各种读写操作。结合Flash有助于我们更好的理解SPI协议。 |
|
|
|
datasheet对应的是一颗存储容量为512M-bit SPI NOR Flash。
从特征介绍可以看出这颗产品支持标准单端口(1IO)、Dual SPI(2IO)、Quad SPI(4IO)模式的SPI协议。 从封装方式可以看到,芯片包含以下输入输出端口:SCLK, CS#, SI, SO, WP#, HOLD# 从datasheet的封装方式可以看到对输入输出pin功能的描述: CS#是一个芯片选择信号,#表示这个pin输入low的时候才会选中当前芯片,其它pin的输入才可能有效;如果为high,则不选中该芯片,其它pin的输入是完全无效的。 SCLK是一个输入时钟,是由外部的主器件输入的; SI是输入信号,也是有外部的主器件输入的; SO是输出信号,是由从器件输出到主器件的; 通常标准SPI协议(1IO)只包含上面4个信号。对于这颗芯片中的Dual SPI (2IO)/Quad SPI(4IO) 模式还会用到另外2个pin:WP#和HOLD#。这里我们可以简单的认为WP#和HOLD#就是跟SI/SO地位平等的2个信号。 接着我们来看看这几个输入输出信号之间的时序关系,如下图所示: 芯片选择信号CS#和时钟信号SCLK有相对关系,用来确定输入SCLK有效和无效。 tSLCH :定义了CS# go low 到第一个CLK go high的时间,只有主器件给的时间大于这个时间,输入的CLK信号才算有效。这个参数在datasheet上要求最小是5n。如果主器件给的时间小于5n,则输入的第一个CLK有可能无效,整个传输过程就有可能发生错误。 tDVCH和tSLCH:定义了输入数据SI和输入时钟CLK之间的setup/hold 时间,这个跟我们数字电路里面的DFF触发器的setup/hold概念是相同的。这2个参数在datasheet上定义的最小值分别是2n/2n。 SPI协议的整个工作过程如下: 当CS# go low之后,输入到从器件的CLK开始有效,全双工的传输过程开始。主器件在信号线SI上输入数据并被从器件读取,从器件输出数据到SO信号线并被主器件读取。当CS# go high之后,从器件不再被选中,结束整个传输过程。 在传输的时候,不管是输入输出,通常都是以一个byte的最高有效位(MSB)开始传输: 比如主器件输入bit7->6->5->4->3->2->1>0,从器件接受每个bit之后再向右shift,最终一个byte传完之后,从器件看到的顺序是bit[0:7]。从器件的输出方式类似。 在datasheet的第9页有这样一句话: SPI总线支持mode 0和3。这里的mode 0和3是指时钟模式,SPI协议通常有4种模式,可以通过CPOL(时钟极性 Clock Polarity)和CPHA(时钟相位 Clock Phase)来定义: Mode0:CPOL=0,CPHA=0 Mode1:CPOL=0,CPHA=1 Mode2:CPOL=1,CPHA=0 Mode3:CPOL=1,CPHA=1 CPOL表示SPI总线空闲的时候时钟的default状态,对于SPI NOR Flash而言就是CS# go high之后 SCLK的值。 如果是Mode0, SCLK 为0; 如果是Mode3 ,SCLK 为1; CPHA表示用第几个边沿去采样数据,0表示第一个,1表示第二个: 对于Mode0而言,SCLK go high的时候去采样数据,就像一个正沿的dffp; 对于Mode3 而言,因为SCLK初始值为1,而采样沿为第二个,所以SCLK必须有1->0, 0->1的过程,同样也是在SCLK上升沿采样输入的数据; 对于Mode1和Mode2,大家可以自行推断总线空闲时CLK的初始值和采样数据的时钟沿。 不得不说SPI Flash的协议支持时钟的模式是精心挑选的,都是CLK的上升沿采样数据,没有坑设计人员。如果所有的时钟模式都支持,设计和验证的工作量可能会大大增加。有时候datasheet上面的随便一句话,对于我们设计人员可能要付出很大的面积和大量的验证时间的代价,更悲剧的是这个功能95%的时间都用不到。 既然上升沿用来采样输出数据,那输出数据只能是下降沿了: 对于SPI Flash而言,有一个参数tCLQV 用来定义在一定的负载电容下 Clock Low 到 Output Valid 的时间,实际应用中你必须大于这个时间来采样数据。如果系统的时钟频率(Host 和SPI Flash都是用的这个频率)比较慢,那你在下一个clk的上升沿就可以采集上一笔数据;如果系统的时钟频率比较快(百Mhz量级),只能在下一个时钟的下降沿去采集数据。 一般SPI的协议比较快的时钟频率可能能到几百Mhz,再快的IC君没见过。相对于I2C的几Mhz速度快了很多,速度越快要求驱动负载loading越轻。 这颗SPI Flash的时钟最快频率是104MHz,在最差的工艺角下仿真结果也要达到这个频率。 举一个读的例子来解释SPI协议在Flash中的应用,CS# go low, 利用SPI的协议输入8 bit的读command code 03H,再输入想读的地址(门牌号),Flash开始输出内容(房间里面有什么东西),输出一段时间后,主器件不再需要数据了, CS# go high 退出这个command。 |
|
|
|
SPI协议可以操作在主器件对单个或者多个从器件的条件下:
这个时候芯片选择信号有多个,但同一个时间只能有一个SS# (CS#)有效,选中一个从器件,从器件的输出信号MISO(SO)端口都是三态驱动的: 输出高电平 "1"; 输出低电平 "0"; 如果SS# (CS# 为high,不选中该从器件 )则输出高阻态; 被选中的从器件驱动MISO端口输出到主器件的时候,其它从器件的输出都是高阻态。 下面是一种CMOS三态驱动门的电路: 可以看到,EN=0的时候输出没有驱动能力,处于高阻状态。 |
|
|
|
SPI协议的优缺点:
优点
|
|
|
|
只有小组成员才能发言,加入小组>>
923 浏览 1 评论
1082 浏览 1 评论
12505 浏览 0 评论
5921 浏览 3 评论
17714 浏览 6 评论
1020浏览 1评论
1010浏览 1评论
923浏览 1评论
4610浏览 1评论
1082浏览 1评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-18 12:06 , Processed in 1.325902 second(s), Total 85, Slave 67 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号