S32K144入门笔记(二十一):LPSPI解读


1. 概述

S32K144芯片配置3个LPSPI模块,分别为LPSPI0、LPSPI1、LPSPI2,并带有4个字深度的发送和接收缓存。
LPSPI是一种低功耗串行外设接口(SPI)模块,支持与SPI总线的高效接口,可以作为主设备和/或从设备。

  1. LPSPI 旨在使用少量的 CPU 开销,通过 FIFO的DMA卸载寄存器访问。
  2. 如果有合适的时钟可用,LPSPI 可以在停止模式下继续运行。
  3. 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)进行更改。

资源下载链接为: https://pan.quark.cn/s/1bfadf00ae14 S32K144 是 NXP 公司推出的车规级 ARM 架构 MCU,具备 ASIL B 功能安全等级。我虽对 SDK 使用经验不足,但此次计划深入研究其开发技巧,除了掌握驱动开发,还希望熟悉 FreeRTOS 在该平台的应用。维护者邮箱为 greyzhang@126.com。研究内容如下: MCU 资料收集:已完成,收集了 S32K144 的详细技术资料,包括其架构、功能特性等,为后续开发奠定基础。 开发板资料收集:已完成,整理了开发板的相关文档,包括硬件接口、引脚定义等信息,以便更好地利用开发板进行实践。 开发工具选择:已完成,挑选了适合 S32K144 开发的工具链,包括编译器、调试器等,确保开发过程顺利。 工程创建及开发环境配置:已完成,成功创建了开发工程,并配置好了开发环境,包括 SDK 的集成等,使开发工作能够顺利开展。 软件调试方式:已完成,掌握了多种调试方法,如断点调试、日志输出等,能够快速定位和解决问题。 逐步驱动开发:已完成,按照逐步推进的方式,完成了部分驱动的开发工作,为硬件功能的实现提供了支持。 GPIO 开发:已完成,熟悉了 GPIO 的配置和使用方法,能够通过 GPIO 实现简单的输入输出功能。 时钟配置:已完成,掌握了时钟系统的配置技巧,确保 MCU 的时钟能够满足不同模块的需求。 线束开发:已完成,完成了线束相关的开发工作,实现了硬件之间的连接和通信。 CAN 总线开发:已完成,实现了 CAN 总线的通信功能,能够与其他设备进行数据交互。 ADC 开发:已完成,熟悉了 ADC 模块的使用,能够采集模拟信号并进行处理。 SPI 开发:已完成,实现了 SPI 总线的通信功能,能够与外部设备进行高速数据传输。 IIC 开发:待完成,计划研究 IIC 总线的通信机
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值