S32K312 LPUART – 波特率为 1 Mbps、时钟频率为 30 MHz 时帧错误 您好,NXP团队: 我正在使用 NXP S32K312 MCU 和 LPUART 外设。通信所需的 UART 波特率为 1 Mbps。 LPUART 6 的功能时钟频率为 30 MHz。 我最初对 UART 的配置如下: 波特率:1,000,000 bps LPUART 时钟:30 MHz SBR 或尾数:2 OSR 或除数:15 数据位:8 奇偶性:无 停止位:1 LSB优先 在这种配置下,我观察到通信过程中出现帧错误。 我理解LPUART波特率计算的原理是: 波特率 = LPUART 时钟频率除以 SBR 乘以 OSR 我还尝试了一种旨在实现精确 1 Mbps 速度的配置: SBR = 2 OSR = 15 波特率 = 30 MHz ÷ 2 × 15 = 1 Mbps 然而,我仍然观察到构图错误。 我还尝试了 921600 波特率,但在这个波特率下也观察到了帧错误。 当前观察 LPUART 时钟:30 MHz 所需通信波特率:1 Mbps UART 配置:8 N 1 在 1 Mbps 速率下观察到帧错误 在 921600 波特率下也观察到帧错误。 通信是通过TI BQ79600桥接器进行的。 使用逻辑分析仪监测TX波形 请问您能否帮忙澄清一下: S32K312 LPUART 能否在 30 MHz LPUART 时钟频率下可靠地支持 1 Mbps UART 通信? 对于 30 MHz 时钟频率,是否有推荐的 OSR 和 SBR 组合可以实现 1 Mbps 的速率? 在 1 Mbps 速率下,OSR 值、SBR 值或波特率精度是否存在任何已知的限制或约束? 是否需要对 LPUART 进行任何额外的配置才能实现可靠的 1 Mbps 通信? 当通信速率为 1 Mbps 时,LPUART 是否有推荐的时钟频率? 帧错误是否与 LPUART 采样配置或时钟容差有关? 如有需要,我可以提供 LPUART 波特率寄存器值、RTD 配置和逻辑分析仪捕获结果。 请提供推荐的配置方案以及任何其他调试步骤。 谢谢。 Re: S32K312 LPUART – Framing Error at 1 Mbps Baud Rate with 30 MHz LPUART Clock 你好@gayathri123 ,
帧错误是接收端错误。因此,临时重新复用用作 LPUART6_TX 的 PTD9 本身不应该设置 LPUART 帧错误标志。帧错误表明接收器在预期为停止位的地方检测到了逻辑 0。
请问BQ79600是否在LPUART6_STAT[FE]中报告了该错误,还是只有逻辑分析仪报告了该错误?
2.75 毫秒的低电平唤醒脉冲比 UART 帧长得多。如果接收器保持使能状态时,S32K312 RX 输入端也存在低电平,则 LPUART 可能会正确地报告帧错误,因为未检测到有效的停止位。因此,该标志可能源自唤醒阶段,并在正常的 UART 通信开始时保持设置状态。
请做个测试:
在更改引脚复用之前,请禁用 LPUART 接收器和发射器。
使用 GPIO 生成唤醒脉冲。
将 GPIO 输出恢复为高电平。
重新封装 PTD9 到 LPUART6_TX。
清除之前所有接收错误标志。
重新启用 LPUART 并等待所需的 BQ79600 唤醒恢复时间。
发送有效的命令帧。
请提供 TX 和 RX 的逻辑分析仪捕获结果,以及唤醒脉冲前后 LPUART6_STAT 的值。确定 STAT[FE] 被设置的确切时刻尤为重要。
顺祝商祺!
帕维尔
Re: S32K312 LPUART – Framing Error at 1 Mbps Baud Rate with 30 MHz LPUART Clock 你好 我们使用S32K312 ,并将LPUART6配置为1 Mbps。PTD9配置为 LPUART6 的 TX 引脚。 当我们临时将 PTD9 配置为 GPIO,然后将其重新复用为 LPUART6 TX 时,我们在 UART 通信期间观察到帧错误。 顺序如下: 将 PTD9 配置为 GPIO,并将其拉低约2.75 毫秒,以产生所需的唤醒脉冲。 将 PTD9 重新封装回LPUART6_TX 。 通过 LPUART6 以 1 Mbps 的速度 传输虚拟数据 。 UART 通信过程中出现帧错误。 Re: S32K312 LPUART – Framing Error at 1 Mbps Baud Rate with 30 MHz LPUART Clock 你好@gayathri123 ,
感谢您提供的详细描述。
首先要澄清的是 LPUART 波特率公式。对于 S32K3 LPUART,有效波特率计算如下:
波特率 = LPUART 功能时钟 / (SBR × (OSR + 1))
因此,如果 BAUD 寄存器包含 SBR = 2 和 OSR = 15,则得到的波特率为:
30 MHz / (2 × 16) = 937,500 波特
因此,它不是 1 Mbps。当通信伙伴以 1 Mbps 的速度运行时,这种偏差足以导致帧错误。
对于 30 MHz LPUART 功能时钟,可以通过以下方式获得精确的 1 Mbps 波特率:
SBR = 2
OSR寄存器值 = 14
有效过采样率 = 15
30 MHz / (2 × 15) = 1,000,000 波特
请注意,某些配置工具可能会显示有效过采样率,而波特率寄存器存储的值则减一。因此,请在初始化后读取完整的 LPUART6_BAUD 寄存器,并验证实际的 OSR 和 SBR 字段。
S32K312 LPUART 可支持 1 Mbps 通信。30 MHz 的功能时钟也适用,因为它能够精确地生成波特率。除了正确的时钟、波特率设置、帧格式、引脚配置和接收器配置之外,通常不需要其他特殊配置。
顺祝商祺!
帕维尔
記事全体を表示