各位NXP专家,大家好!
我目前正在使用 S32G3 上的 LLCE 元器件(作为 LIN 主控运行)进行 LIN 实现。我们正在使用 S32G_LLCE_1_0_10。
我们在 LLCE LIN 固件的帧超时配置方面遇到了奇怪的问题,我想了解一些关于固件黑盒逻辑的内部细节或说明。
问题描述:
配置 LIN 通道时,如果“禁用帧超时”未选中(即启用超时检测),并将响应超时值设置为 14:
LLCE LIN 主站成功将报头(中断 + 同步 + PID)发送到总线。
从节点接收到头部信息后,立即返回正确的数据和校验和。
但是,LLCE LIN 主站会随机或持续地无法捕获/接收数据。表现得好像数据被 LLCE 固件丢失或丢弃了一样。
找到解决方法:
如果我们在配置工具中仅勾选“禁用帧超时”(禁用固件的内部超时逻辑),同时保持所有其他硬件和物理总线环境完全相同:
主设备从不丢失任何数据,并成功接收从设备的每一个响应。
我们的问题:
由于 LLCE_firmware_user_guide.pdf 提供的关于内部状态机的信息非常有限,我们对这种行为感到困惑:
LLCE固件内部是如何精确计算超时值“14”的?值 14 代表的是绝对微秒、比特时间,还是与特定 GPT/定时器时钟源相关的周期?
为什么即使从设备立即回复,主设备也无法获取响应?超时计数器是否有可能启动过早(例如,在报头传输完成之前),或者由于某些内部硬件/固件执行延迟,“14”作为阈值是否太小?
如果我们想在不丢弃有效响应的情况下保持帧超时保护处于活动状态,那么正确计算和设置此超时值的推荐方法是什么?
任何有关 LLCE LIN 固件内部时序逻辑的文档、应用笔记或见解都将不胜感激。
提前感谢!
此致,
cjq
你好, @cjq
谢谢你的解释。
1.如果选中“禁用帧超时”框,则 Lin 驱动程序将接受长度超过最大帧长度的帧。
2. 对于“LinResponseTimeout”,重置值为 0Eh = 14,对应于 T_Response_Maximum = 1.4 x T_Response_Nominal。这是 1 字节的响应超时持续时间(以比特时间为单位)。
BR
陈银
陈银你好,
感谢您的快速回复。以下是对您问题的解答,以及关于固件版本的更正:
硬件:我们使用的是基于 S32G3 的定制电路板,而不是 NXP 的官方参考电路板。
实现方式:我们没有直接运行官方示例。这是我们自行开发的,但它与 NXP 官方示例代码密切相关,并在此基础上进行了开发。
固件版本更正:我意识到我在最初的帖子中关于版本信息有误。我们实际使用的是S32G_LLCE_1_0_09 ,而不是S32G_LLCE_1_0_10。
请问您能否帮忙检查一下 1.0.09 版本中是否存在与 LIN 响应超时相关的已知错误,或者该特定固件版本是如何解释超时值“14”的?
此致敬礼,cjq
你好, @cjq
感谢分享。
1. 请问您使用的是基于 S32G3 的定制板还是 NXP 的参考板?
2. 该问题是在您的自定义实现中发现的,还是在 NXP 配置的任何示例中发现的?
BR
陈银