写在前面:上一小节介绍了SPI的基本工作原理与极性相位等知识,这一小结介绍波形
由于我实际用到的IP是ARM PrimeCell SSP(PL022),所以会以这个IP为主,也会对比《SPI Block Guide V04.01》
一.PL022支持的三种帧格式介绍
一共有三种帧格式可选:TI/SPI/NSM,一般用SPI很多(这里不关注NSM),简单介绍一下TI模式:
SSI(Synchronous Serial Interface)由TI公司定义的接口协议标准
SPI(Serial Peripheral Interface)是由Motorola公司定义的接口协议标准,两者的用法有类似的地方
SPI串行帧同步SSIFss为低电平有效,在整个帧传输期间生效(拉低)。
SSI串行帧同步SSIFss在发送每个帧之前产生宽度为个时钟周期的高脉冲。SSI 模块和片外从设备都在SSIClk 的上升沿驱动输出数据,在SSIClk 的下降沿锁存另一端的输入数据
参考博客:
https://blog.youkuaiyun.com/wowo004/article/details/103469128
https://e2echina.ti.com/question_answer/analog/interface_and_clocks/f/59/p/46369/101699
https://www.cnblogs.com/adylee/p/5399742.html
根据以上这段话的描述,有以下几点总结出来:
- 在三种帧格式模式下,时钟的波形并不是一直存在,时钟波形只在数据传输的时候出现
- SPI模式和NSM模式下的片选信号都是拉低有效,而TI模式下片选信号会在数据传输之前拉高一个时钟周期
- SPI模式和TI模式都是全双工(full-duplex),而NSM模式是半双工(half-duplex)
二.TI模式帧格式
单帧模式:
连续帧模式:
根据这段话的描述,有以下几点总结出来:
- TI模式下时钟和片选在idle时是默认为低
- 在数据传输之前,片选会被拉高一个时钟周期,在拉高期间,完成将传输数据从FIFO转移到移位寄存器的工作
- 数据总是在时钟的上升沿发送,数据总是在时钟的下降沿采样和接收(我理解latch/clock就是采样的意思)
- 需要注意的是在连续帧模式下,在前一帧的LSB一开始片选就会拉高,前一帧的LSB结束紧接着就是后一帧MSB的开始
三.Motorola SPI模式帧格式
由于极性CPOL和相位CPHA的两两组合,导致SPI帧格式有四种,这里只详细介绍CPOL=0 CPHA=0这一种
首先免不了还是要提一下极性和相位,在PL022中用SPO表示极性,用SPH表示相位
MODE0单帧模式:
根据上面这段话的描述,TX与RX数据的生成与以前的理解有些不同,总结如下:
- MODE0下,数据开始传输的标志是片选信号SS被由高拉低
- SS一旦拉低,slave的数据立刻被传输到MISO引脚
- 半个时钟周期以后,TX数据被传输到MOSI引脚
- 再过半个时钟周期,时钟迎来上升沿,数据在上升沿被采样,下降沿被发送(接收)
- 单帧传输模式下每传完一帧,SS会被重新拉高,拉高的时机在前一帧LSB被采样的一个时钟周期以后
这里参考一个博客:https://www.cnblogs.com/adylee/p/5399742.html
博客作者正好做了这个实验,引用一番:
我们来关注SCK的第一个时钟周期,在时钟的前沿采样数据(上升沿,第一个时钟沿),
在时钟的后沿输出数据(下降沿,第二个时钟沿)。首先来看主器件,主器件的输出口(MOSI)输出的数据bit1,
在时钟的前沿被从器件采样,那主器件是在何时刻输出bit1的呢?bit1的输出时刻实际上在SCK信号有效以前,
比 SCK的上升沿还要早半个时钟周期。bit1的输出时刻与SSEL信号没有关系。再来看从器件,
主器件的输入口MISO同样是在时钟的前沿采样从器件输出的bit1的,那从器件又是在何时刻输出bit1的呢。
从器件是在SSEL信号有效后,立即输出bit1,尽管此时SCK信号还没有起效。关于上面的主器件
和从器件输出bit1位的时刻,可以从图3、4中得到验证
图3:
注意图3中,CS信号有效后(低电平有效,注意CS下降沿后发生的情况),故意用延时程序
延时了一段时间,之后再向数据寄存器写入了要发送的数据,来观察主器件输出bit1的情况(MOSI)。
可以看出,bit1(值为1)是在SCK信号有效之前的半个时钟周期的时刻开始输出的(与CS信号无关),
到了SCK的第一个时钟周期的上升沿正好被从器件采样
图4:
图4中,注意看CS和MISO信号。我们可以看出,CS信号有效后,从器件立刻输出了bit1(值为1)
MODE0连续帧模式:
PL022有一个特征,就是当SPH为0时(SPO=0,SPH=0或者SPO=1,SPH=0),在连续帧传输时,每帧的间隔SS信号都会被拉高半个周期
而在SPH为1时(SPO=0,SPH=1或者SPO=1,SPH=1),SS在传输过程中都是低,有的客户不明白这个特征,误以为是波形有问题,会提出疑问
四.NSM帧格式(National Semiconductor Microwire)
单帧模式:
根据上面这段话,有总结如下:
- NSM不同于TI模式与SPI模式,它是半双工的(half-duplex)
- NSM的工作模式是:前半程主机发送控制字到从机,后半程主机接收从机的响应
- 主机发送与主机接收期间有一个时钟周期的间隔,从机利用此间隔解析主机的控制字
- 数据在下降沿被驱动到相应的管脚(TX/RX),在上升沿采样和接收
- 单帧模式下,在接收LSB被采样后的一个周期,SS被拉高,接收的数据从移位寄存器传输到接收FIFO
连续帧模式:
根据上面这段话,总结如下:
- NSM的单帧和连续帧并没有特别大的区别
- 连续帧模式下SS一直为低
- 连续帧模式下下一帧的控制字与上一帧的接收帧之间没有间隔
最后再解释一下手册中的术语是什么意思
SSPCLKOUT:
SSPFSSOUT:
SSPTXD:
SSPRXD: