2149180_zh-CN

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

2149180_zh-CN

2149180_zh-CN

S32K3xx Flexio I2C 主波特率计算问题

恩智浦专家,您好:

我最近将项目中的 MCU 从 S32K118 更改为 S32K312EVB-Q172(使用 SDK RTD 5.0.0)。HF01)。它们都在 FIRC 48Mhz 上运行。

但是,我在使用 Flexio 模块设置 I2C 主站时卡住了,目标波特率是 400 kHz。

但我发现了以下问题

1.波特率计算公式与 K1 系列和 K3 系列不同。

在 K3 系列中,波特率通过两个参数(I2c 定时器比较值和 I2c FlexIO 预分频器)计算,而在 K1 系列中,SDK 使用波特率来计算参数。

我参考了使用 InputCloc k 和 分频器 作为参数计算波特率的 SDK 代码

在 S32K3xx 中:BaudRate = (InputClock + 分频器 + 2U)/(2U * ((uint32_t) 分频器 + 2U));

acnhyxgxl1_3-1754652341006.png

在 S32K1xx 中:波特率由开发人员分配,并使用波特率来计算分频器值和分频器值。

tmpDiv = (((int32_t)inputClock + (int32_t)baudRate) / (2 * (int32_t)baudRate)) - 2;

acnhyxgxl1_1-1754651534078.png

因此,我的问题是,这些公式似乎互不相等,如何才能获得所需的波特率?

我试着将 cmpvalue 设置为 58,将预分频器设置为FLEXIO_TMR_DECREMENT_ON_FLEXIO_CLK_DIV_1,这样应该能产生 400 kHZ,但我的 LA 测量结果却停留在 295 kHZ 左右。

acnhyxgxl1_4-1754652723423.png

2.S32 Design Studio 外围图形用户界面的波特率计算不准确。

我更改了 I2c 定时器比较值,但 GUI 和 Flexio_I2c_Ip_PBcfg.c 中自动生成的波特率值没有变化

acnhyxgxl1_5-1754652807021.png

acnhyxgxl1_6-1754652822207.png


预先感谢您的答复!




S32K1系列的S32SDK用于 S32V 的 S32 SDKRe: S32K3xx Flexio I2C Master Baudrate Calculation Issue

你好@acnhyxgxl1

我认为根据 RTD_I2C_UM pdf 计算波特率更简单(因为工具就是这样计算波特率的):

Snag_91a4d9.png

您可以像这样求解比较值:

波特率 = CLK / (2 * (CMP + 9))
CMP = (CLK / (BR * 2)) - 9

对于 400kHz 波特率,FIRC 为 48MHz,假设 CORE_CLK 为 div = 2:

Snag_a4d3dc.png

Snag_a4f3f7.png

CMP = (24MHz / (400kHz * 2)) - 9
CMP = 21

Snag_a52661.png

这将在 Flexio_I2c_Ip_CS_0_PBcfg.c 文件中生成正确的值:

Snag_109bf6e.png

请记住,上拉电阻值会影响上升时间和速度。在这种情况下,我建议使用 4k7 欧姆电阻。您也可以参考这些资料,通过计算来确定数值的大小:

最后,关于图形用户界面和波特率不变的问题,这肯定是配置工具的错误。实际波特率可能需要手动计算或测量。我们将向内部团队报告这个工具错误。感谢您通知我们。

致以最诚挚的问候,
Julián

Tags (1)
No ratings
Version history
Last update:
‎11-21-2025 01:00 AM
Updated by: