• 【入门-09】队列SPI(QSPI)


    编辑:CrazyRabbit
    日期:2022年8月3日

    本文是英飞凌官方培训的笔记摘录,入门篇第九节课。

    1. 总述

    QSPI是一种主从的通讯接口,主机一般是MCU,从机可以是各种外设驱动芯片(也可以是MCU)。通过片选信号的激活,主机可以实现和不同从机之间的QSPI通讯。值得注意的是,QSPI的通讯协议本身并没有国际标准,需要主机和从机之间自行协商,一般需要阅读从机的芯片手册,了解他的通讯协议,并编写相应的驱动程序,从而实现主机和从机的双向通讯。
    image.png
    左上角是QSPI的系统框图,首先有一个时钟控制单元,其次通过四根线和外部进行通讯,所以涉及到端口的配置,需要配置四根线的输入、输出以及相应的属性。QSPI在通讯过程中,可能产生各种中断,需要CPU或DMA对中断进行处理。
    值得注意的是,QSPI通过四根线与外部进行通信,这四根线分别是:时钟、数据输入、数据输出以及片选信号。其支持MASTER和SLAVE的全双工操作方式,当然也支持半双工和单工的收发方式。
    支持最大50Mb/s的比特率
    关键特性

    • 对于队列的支持,客户可以将配置参数和数据通过同一个队列放到我们的Tx和Rx的FIFO中。这样做的好处是,可以快速的实现对不同通道下各种数据帧的读写
    • 灵活的帧格式,可以配置转换方向,时钟极性和相位

    2. 队列支持

    下图右下角的框图是QSPI的内核和用户接口,包括16路的片选信号输出,4x32位的Tx FIFO和Rx FIFO,一些操作寄存器,全局控制寄存器,ECON、BACON寄存器,数据转换寄存器等等。
    image.png
    它对于队列的支持主要体现在:不仅可以把数据放到Tx FIFO里发送,还可以将配置参数(数据长度,LSB/MSB转换方向,时钟极性和相位,可变的比特率和延迟,校验类型,帧长度)放到Tx FIFO中进行配置。系统会自动识别哪些是配置参数,哪些是数据。将其分别移送到BACON寄存器和数据转换寄存器当中进行发送。
    对于Rx而言,也是同样的道理。接收到的数据会自动存放到Rx FIFO里,包括状态和数据。可以根据自己的需求通过DMA或其他方式读取数据和状态进行解析。
    这样做的好处是,可以将SPI的数据帧和配置参数实现在不同通道之间灵活的动态转换。

    3. 灵活的帧格式

    QSPI另外一个关键的特性是灵活的帧格式配置,包括:数据位数,波特率,转换方向,时钟极性、相位…
    image.png
    image.png
    如上图重点介绍下QSPI Timing的时序图,从上图可以看到整个过程可以分为若干个阶段:

    • idle:区分为idle A和idle B,它们的时间长度是相同的,idle A到idle B的电平转换表征的是在下一个片选信号使能的发送周期内时钟极性的转换
    • leading delay:表征片选信号使能到第一个时钟上升沿之间的延时
    • data:紧接着就是数据的转换,数据的长度取决于DAL(数据宽度)和波特率
    • trailing delay:接着是traling delay,在整个QSPI发送过程中,会出现No Data Mode,即在两个一连串数据之间的间隔就叫trailing delay。直到最后一个trailing delay帧结束之后,片选信号会置高
    • wait:wait的时间是不固定的,根据下一次新数据帧发送时间

    波特率、idle、trailing和leading的延迟都可以灵活配置。

    4. 系统集成

    下图是第一张简略的系统框图的详细版本。
    image.png
    可以看到,QSPI作为完整的模块,也是挂在SPB总线上的。内部有两个模块,分别是User Interface(用户接口模块)和Shift Engine(转换引擎),它们的时钟来源是不同的。
    用户接口模块里有TxFIFO、RxFIFO以及SFR(特殊功能寄存器)。对于FIFO的操作,可以通过DMA进行,特别是在数据较多的情况下,通过DMA能有效降低CPU的负荷。可以通过DMA来将需要发送的数据搬运到TxFIFO里进行发送,也可以通过RxFIFO产生的中断通过DMA搬运出来进行数据的解析。
    关于中断,包括Tx/Rx FIFO的事件中断,以及错误中断,因为TxFIFO和R小FIFO本身可以设置阈值,当超过某个阈值时,会触发中断。也包括一些Phase中断。
    图片右边是其端口的配置,取决于我们QSPI工作时处在MASTER还是SLAVE模式。在Master模式下,它支持16个可选的片选信号选择;在Slave模式下,只有七种。

    5. 例子-SPI Master

    这里是SPI作为MASTER的应用实例。可以看到,SPI作为MASTER,最典型的应用也是一个4线的例子。需要注意的是,谁是MASTER,它的时钟和片选信号就由谁产生。可以看到,如果是MASTER的话,左上角的SCLKO和SLSO都是输出模式,另外两根线就是输入和输出。

    MTSR表示Master Transmitte,Slave Receive
    MRST表示Master Receive,Slave Transmitte

    image.png
    需要注意的是,对于半双工以及单工,并不需要额外的寄存器配置或驱动修改,可以通过外部,比如说将MTSR和MRST两线短接起来,即同一时刻只有一个数据在上面传输。对于单工而言,可以将MRST这根线断掉,只发不收。

    6. 例子-Slave

    最后一个例子是SPI作为Slave,也是四线模式,只是方向相反。如:SCLKI和SLSI是作为输入的
    image.png

  • 相关阅读:
    Apollo7.0系统概述
    【Java】UnsupportedClassVersionError错误
    算法day30|复习
    前端面试题集锦(2)
    什么是浅拷贝和深拷贝,如何用 js 代码实现?
    k8s集群调度
    Linux系统操作MySql常用命令
    网络割接用VRRP替换HSRP
    【面试题】集合并发问题
    传统考勤太复杂怎么办?这个小技巧,我必须吹爆!
  • 原文地址:https://blog.csdn.net/CrazyRabbit1989/article/details/126143427