恩智浦专家,您好:
我最近将项目中的 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));
在 S32K1xx 中:波特率由开发人员分配,并使用波特率来计算分频器值和分频器值。
因此,我的问题是,这些公式似乎互不相等,如何才能获得所需的波特率?
我试着将 cmpvalue 设置为 58,将预分频器设置为FLEXIO_TMR_DECREMENT_ON_FLEXIO_CLK_DIV_1,这样应该能产生 400 kHZ,但我的 LA 测量结果却停留在 295 kHZ 左右。
2.S32 Design Studio 外围图形用户界面的波特率计算不准确。
我更改了 I2c 定时器比较值,但 GUI 和 Flexio_I2c_Ip_PBcfg.c 中自动生成的波特率值没有变化
预先感谢您的答复!
我认为根据 RTD_I2C_UM pdf 计算波特率更简单(因为工具就是这样计算波特率的):
您可以像这样求解比较值:
波特率 = CLK / (2 * (CMP + 9))
CMP = (CLK / (BR * 2)) - 9
对于 400kHz 波特率,FIRC 为 48MHz,假设 CORE_CLK 为 div = 2:
CMP = (24MHz / (400kHz * 2)) - 9
CMP = 21
这将在 Flexio_I2c_Ip_CS_0_PBcfg.c 文件中生成正确的值:
请记住,上拉电阻值会影响上升时间和速度。在这种情况下,我建议使用 4k7 欧姆电阻。您也可以参考这些资料,通过计算来确定数值的大小:
最后,关于图形用户界面和波特率不变的问题,这肯定是配置工具的错误。实际波特率可能需要手动计算或测量。我们将向内部团队报告这个工具错误。感谢您通知我们。
致以最诚挚的问候,
Julián