1. 概述
S32K144芯片配置3个LPSPI模块,分别为LPSPI0、LPSPI1、LPSPI2,并带有4个字深度的发送和接收缓存。
LPSPI是一种低功耗串行外设接口(SPI)模块,支持与SPI总线的高效接口,可以作为主设备和/或从设备。
- LPSPI 旨在使用少量的 CPU 开销,通过 FIFO的DMA卸载寄存器访问。
- 如果有合适的时钟可用,LPSPI 可以在停止模式下继续运行。
- LPSPI 支持 DMA 访问并生成 DMA 请求。
1.1 模块特性
- 字长 = 32 位
- 可配置的时钟极性和时钟相位
- 主模式操作,支持最多 4 个外设芯片选择信号
- 从模式操作
- 4 字的命令/发送 FIFO
- 4 字的接收 FIFO
- 主模式下的灵活时序参数,包括 SCK 频率和 PCS 与 SCK 边沿之间的延迟
- 支持全双工传输,在每个时钟边沿支持 1 位发送和接收
- 支持半双工传输,在每个时钟边沿支持 1 位发送或接收
- 支持半双工传输,在每个时钟边沿支持 2 位发送或接收(仅主模式)
- 支持半双工传输,在每个时钟边沿支持 4 位发送或接收(仅主模式)
- 主机请求可用于控制 SPI 总线传输的开始(仅主模式)
- 接收数据匹配逻辑支持在数据匹配时唤醒
1.2 模块框图
1.3 不同模式下的操作
芯片模式 | 操作 |
---|---|
Run | 正常操作 |
Stop | 如果休眠使能位(CR[DOZEN])被清除,且 LPSPI 正在使用在停止模式期间仍保持运行的外部或内部时钟源,则可以在停止模式下继续运行。 |
Debug | 如果调试使能位(CR[DBGEN])被设置,则可以在调试模式下继续运行。 |
2. 功能描述
2.1 时钟和复位
时钟描述:
时钟 | 描述 |
---|---|
功能时钟 | • LPSPI 功能时钟与总线时钟异步。 • 如果 LPSPI 功能时钟在低功耗模式下保持启用,则 LPSPI 可以在主模式和从模式下执行 SPI 总线传输以及低功耗唤醒。 • LPSPI 通过预分频器将功能时钟分频;分频后的频率必须至少比 SPI 外部时钟频率(LPSPI_SCK)快 2 倍。 |
外部时钟 | • LPSPI 移位寄存器直接由 LPSPI_SCK 时钟驱动。 • LPSPI_SCK 时钟的生成或供应方式取决于模式(主模式或从模式): • 在主模式下:LPSPI_SCK 时钟在内部生成。 • 在从模式下:LPSPI_SCK 时钟由外部提供。 |
BUS时钟 | BUS时钟仅用于对 LPSPI 控制和配置寄存器的总线访问。总线时钟频率必须足够高,以支持 LPSPI 寄存器(包括 FIFOs)的数据带宽要求。 |
复位描述:
复位源 | 描述 |
---|---|
芯片复位 | 将LPSPI的逻辑和寄存器恢复默认状态。 |
软件复位 | • 将 LPSPI 逻辑和寄存器重置为其默认状态,但控制寄存器除外。 • LPSPI 软件复位位于控制寄存器 CR[RST] 中。 |
FIFO复位 | • 重置发送/命令 FIFO 和接收 FIFO。 • 控制寄存器 CR[RTF](重置发送 FIFO)和 CR[RRF](重置接收 FIFO)是只写位。 • 重置后,FIFO 为空。 |
2.2 主机模式
传输和命令FIFO是一个组合FIFO,包括传输数据字和命令字。
- 通过写发送数据寄存器(TDR),将发送数据字存储到发送/命令 FIFO 中。
- 通过写发送命令寄存器(TCR),将命令字存储到发送/命令 FIFO 中。
当一个命令字位于发送/命令 FIFO 的顶部时,可能发生的操作取决于 LPSPI 模块是处于忙碌状态还是处于帧间,连续传输位(TCR[CONT])以及持续命令位(TCR[CONTC])。
关于连续传输位(CONT)和持续命令位(CONTC):
连续传输位(CONT)=1 用于在帧结束时保持 PCS 的激活状态,从而允许传输继续。
持续命令位(CONTC)=1 用于指示该命令字不应终止当前帧,并且传输可以使用新的命令字继续进行。
持续命令位(CONTC)=1 的使用有一定限制,即新命令必须在帧边界加载。而从帧边界继续传输的唯一方式是前一个命令的连续传输位(CONT)=1。
可以通过读取发送命令寄存器 (TCR) 来读取当前现有命令字的状态。在写入发送命令寄存器后(假设 FIFO 为空),发送命令寄存器需要至少 3 个 LPSPI 功能时钟周期来更新,且 LPSPI 必须处于启用状态(模块使能位 CR[MEN] 已设置)。
写入发送命令寄存器不会启动 SPI 总线传输,除非设置了发送数据屏蔽位(TCR[TXMSK])。当发送数据屏蔽位被设置时,新命令字将不会被加载,直到当前帧结束(基于 FRAMESZ 配置);在传输结束时,TXMSK 位将被清除。
循环 FIFO:发送/命令 FIFO 还支持一种循环 FIFO 功能,该功能使 LPSPI 主设备能够(周期性地)重复一个可以容纳在发送/命令 FIFO 内的短数据传输,而无需额外的 FIFO 访问。当启用循环 FIFO 时,FIFO 读指针的当前状态会被保存,并且状态标志不会更新。在发送/命令 FIFO 被认为为空并且 LPSPI 处于空闲状态后,FIFO 读指针会恢复为保存的版本,因此在循环 FIFO 模式启用期间,发送/命令 FIFO 的内容不会被永久地从 FIFO 中移除。
接收 FIFO 用于在 SPI 总线传输期间存储接收到的数据。当设置了接收数据屏蔽位 TCR[RXMSK] 时,接收数据会被丢弃,而不会存储到接收 FIFO 中。
- 接收数据会在帧结束时写入接收 FIFO。
- 在多字或连续传输期间,接收数据也会在从发送 FIFO 读取新发送数据的同时被写入接收 FIFO。
- 在连续传输期间,如果发送 FIFO 为空,则接收数据仅在发送 FIFO 被写入后,或在写入发送命令寄存器 (TCR) 以结束帧后,才会被写入接收 FIFO。
接收数据支持接收数据匹配功能,该功能可以将接收到的数据与两个字中的一个或一个带掩码的数据字进行匹配。接收数据匹配功能还可以配置为仅比较自帧开始以来接收到的第一个或前两个数据字。
由于接收数据屏蔽位 TCR[RXMSK]而已经被丢弃的接收数据不会导致数据匹配被设置,并且会延迟对第一个接收到的数据字的接收数据匹配,直到所有被丢弃的数据都被接收。
- 接收器数据匹配功能还可以使用接收数据仅匹配配置寄存器 0 CFGR0[RDMO]位进行配置,以丢弃所有接收到的数据,直到检测到数据匹配为止。
- 在接收数据匹配后,为了允许接收所有后续数据,首先清除接收数据仅匹配配置寄存器 0 CFGR0[RDMO]位,然后清除数据匹配标志 SR[DMF]位。
用于所有 SPI 总线传输的时序参数是相对于 LPSPI 功能时钟除以预分频配置而言的。尽管当 LPSPI 模块繁忙时,时钟配置寄存器(CCR)无法更改,但为了支持以不同频率与不同从设备接口,预分频值 TCR[PRESCALE]配置可以在 SPI 总线传输之间使用发送命令寄存器(TCR)进行更改。