2387682_zh-CN

取消
显示结果 
显示  仅  | 搜索替代 
您的意思是: 

2387682_zh-CN

2387682_zh-CN

S32K388 LPSPI SCKDIV 计算问题 - 为什么 1MHz 波特率下 SCKDIV=38?

NXP社区的各位好,

我正在使用 S32K388,并配置 LPSPI 波特率。我有一个关于 SCKDIV 值计算的问题。

我的理解:
根据 S32K3xx 参考手册,LPSPI 波特率公式为:
```
SCK = LPSPI_CLK / (PRESCALE_DIV × (SCKDIV + 1))
```

我的配置:
- LPSPI 时钟源:AIPS_SLOW_CLK = 40 MHz
目标波特率:1 MHz
- PRESCALE = 0 (÷1)

我的计算结果:
```
SCDKIV = (LPSPI_CLK / 波特率) - 1
SCKDIV = (40 MHz / 1 MHz) - 1 = 39
```

**S32DS 生成的代码:**
但是,当我使用 S32DS 生成配置时,却出现以下错误:
```c
LPSPI_CCR_SCKDIV(38U) // SCKDIV = 38
```

**问题:**
当 SCKDIV=38 时,实际除法系数为 39,这意味着:
```
实际波特率 = 40 MHz / 39 = 1,025,641 Hz ≈ 1.026 MHz
```
与目标 1 MHz 相比,误差约为 2.56%。

为什么 S32DS 使用 SCKDIV=38 而不是 SCKDIV=39?S32DS 配置中是否使用了不同的 LPSPI 时钟频率,或者选择这种频率还有其他原因?

**补充背景信息:**
我使用的是 S32DS 3.5
- S32K388 参考手册 Rev. 6
- 该项目是使用默认时钟配置创建的

感谢您提前提供的任何解释!

顺祝商祺!

Re: S32K388 LPSPI SCKDIV calculation question - why SCKDIV=38 for 1MHz baud rate?

@xlele

首先,请注意,S32K3xx 参考手册的最新可用版本是 Rev. 12。您当前使用的版本包含有关 S32K310、S32K311 和 S32K3x8 设备的初步信息,这些设备在发布该文档时尚未发布。因此,我建议下载并参考RM的最新版本。

关于 LPSPI 波特率的计算,时钟配置寄存器 (CCR) 中 SCKDIV 字段的描述如下:

波特率 = 功能时钟 ÷ (2^预分频 × (SCKSET + SCKHLD + 2))

其中 SCKSET 和 SCKHLD 由 SCKDIV ÷ 2 得出。

考虑到 SCKDIV = 38:

SCKSET = SCKHLD = 38 ÷ 2 = 19

波特率 = 40 MHz ÷ (2^0 × (19 + 19 + 2)) = 1 MHz,与预期值相符。


BR,VaneB

标记 (1)
无评分
版本历史
最后更新:
‎06-30-2026 02:37 AM
更新人: