大家好
我正在使用 S32K311 的 SENT 接口接收数据,我遇到了这样一种情况:快通道正常接收数据,但慢通道无法接收任何数据。
我监测了 SENT 错误通知功能,没有发现任何异常。
MCU 型号为 S32K311
RTD 版本:S32DS 3.6.2RTD6.0.0
发送传感器:Sensata 压力传感器增强型慢速消息
首先,我知道 SENT 逻辑是在“Flexio_Sent_Ip_ProcessSerialMsg”函数中处理的,随后,在外层函数中,它会监测“Data->SerialState”和“FastMsgCount”变量,以确定慢通道是否已完成接收数据。
于是,我捕获了相关的比特信息。
bit(x):已发送快速通道状态半字节位
S: " STATUS_SENT_SERIAL_SHORT" 。
E:" STATUS_SENT_SERIAL_ENHANCED"
我发现慢速通道的解析逻辑反复跳转,无法正常解析。
在特定情况下,SENT 的处理逻辑是否存在错误?
谢谢!
SOC端有任何错误日志吗?
你好@khty ,
能否分享一下Sensata传感器的发送配置信息?从你的图片中,我可以看到第 8 位 C 位被设置为 0;我假设使用的是 8 位消息 ID,12 位数据格式。
由于您的快速通道已正确接收,并且没有报告 SENT 错误通知,因此我了解到问题与处理功能有关。
我尚未发现任何关于频道接收速度慢的已知问题;但是,我已经与内部团队展开了讨论,让我尝试获取有关此问题的更多信息。
最后,您能否提供至少 18 个连续的 SENT 帧的完整捕获文件?这样我们就可以进一步检查RTD状态机的行为是否与预期的增强型串行解码序列相匹配。
此致,
朱利安
您好,感谢您快速回复我的问题。
Sensata提供的传感器配置信息如下图所示:
关于您最后一个要求,我需要至少连续 18 个 SENT 帧的完整捕获数据。我已经将其放在“bitChange.xlsx”文件中。文件在附录中。
我在表格中显示了每个捕获的状态半字的第二位和第三位。
表格中,每一列代表一条已发送的消息。每个大的黑色方框内包含一条 slowChannel 消息。蓝色区域为ID区域,绿色区域为CRC校验区域,黄色区域为数据区域。底部的信息为人工分析结果。
如果您需要任何其他信息,请告诉我,我会尽快回复。
发送的快速错误通知和慢速错误通知均未报告任何故障。
您可以读取记录在“bitchange.xlsx”中的数据。用于分析,因为它包含我记录的快速通道的每个状态半字的第 2 位和第 3 位的信息。Bit1 和 Bit0 信息被丢弃,因为它们在慢速信道中没有意义。
同时,我手动解析了慢速频道信息,并用黑色方块进行了标识。
在“bitchange.xlsx”中,“State”行中的数据对应于代码中的“ Flexio_Sent_Ip_axFastData[Instance][ChannelId].SerialState ”。它负责检测和识别慢通道是“短”还是“增强”。“计数”代表“ Flexio_Sent_Ip_axFastData[Instance][ChannelId].FastMsgCount ”,它负责计算慢速通道的接收长度。
我认为我们没有收到任何慢通道数据的原因是代码无法正确识别慢通道是“短”通道还是“增强”通道。您可以阅读“bitchange.xlsx”来发现识别状态在“ STATUS_SENT_SERIAL_IDLE ”、“ STATUS_SENT_SERIAL_SHORT ”和“ STATUS_SENT_SERIAL_ENHANCED ”之间不断跳转。
当识别状态发生转换时,“ Flexio_Sent_Ip_ProcessSerialMsg ()”函数返回“ STATUS_FLEXIO_SENT_IP_ERROR ”,但该返回值仅重置了上层函数“ Flexio_Sent_Ip_DmaDataProcessing ()”中的SerialState和FastMsgCount ,并未调用SentFastErrorNotif ()。因此,我无法通过快速错误通知获取任何错误信息。
在“bitChange.xlsx”中
我们可以从 T 列开始,此时SerialState = STATUS_SENT_SERIAL_IDLE , FastMsgCount = 0。
当我们收到 U 列时, Flexio_Sent_Ip_ProcessSerialMsg()认为 bit3 == 1,因此它将其视为慢通道的开始信号,并将SerialState设置为STATUS_SENT_SERIAL_SHORT , FastMsgCount设置为 1。
当我们收到 V 列时, Flexio_Sent_Ip_ProcessSerialMsg () 认为 bit3 == 0,因此它保持SerialState = STATUS_SENT_SERIAL_SHORT并将FastMsgCount加 2。
当我们收到 W 列时, Flexio_Sent_Ip_ProcessSerialMsg () 认为 bit3 == 1。此时,由于FastMsgCount == 2,不满足跳转到STATUS_SENT_SERIAL_ENHANCED 的条件,只能返回STATUS_FLEXIO_SENT_IP_ERROR 。在Flexio_Sent_Ip_DmaDataProcessing () 中,它会重置SerialState和FastMsgCount 。
顺便说一下,我使用 DMA 接收 SENT 数据,目前只确认了 DMA 接收方式存在问题。目前,我无法确认中断和轮询方法是否也存在同样的问题。
嗨@khty ,
感谢您提供的补充信息。这样就更清楚了。
这似乎表明解析增强型慢消息时可能存在 RTD 问题,但是,由于我没有特定的硬件配置,因此我无法重现该问题。
我已经将此信息转发给内部团队,如有任何新消息,我会及时通知您。
此致,
朱利安