跳转至内容
  • 版块
  • 最新
  • 标签
  • 热门
折叠
品牌标识

YunTu Forum

YTMicro.com
  1. 主页
  2. Discussion & Question
  3. YT MCAL
  4. MCAL2.3.0 MD14 Cortst + flstst + LIN 导致 LIN 出现 checksum 的问题

MCAL2.3.0 MD14 Cortst + flstst + LIN 导致 LIN 出现 checksum 的问题

已定时 已固定 已锁定 已移动 YT MCAL
2 帖子 1 发布者 357 浏览
  • 从旧到新
  • 从新到旧
  • 最多赞同
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • quanfengQ 离线
    quanfengQ 离线
    quanfeng YunTu
    写于 最后由 编辑
    #1

    1. 基于 MD14 开发板对问题进行复现

    FlsTst_Demo.zip

    1.1 问题背景

    1. 软件:MCAL2.3.0 Flstst Demo + LIN
    2. 硬件:MD14
    3. 问题描述:
    4. Flstst 后台测试,GPT 10ms 中断回调函数中调用 FlsTst_MainFunction
    5. MD14 LIN 采用从机模式
    6. 使用 TSMaster 循环发送 0x3C(经典校验) 主机写 和 0x0D(增强校验) 主机读报文
    7. 上位机发送 0x0D 主机读报文,MCU 在正常情况下回复:0xFF 0x7F 0x00 0x00 0xE0 0xFF 0xFF 0xFF,当出现 checksum 后,MCU 会回复:0xFF 0xFF 0x00 0x00 0xE0 0xFF 0xFF 0xFF
    8. 由于 FlsTst_MainFunction 中会调用 SchM_Enter_FlsTst_FLSTST_EXCLUSIVE_AREA_02 和 SchM_Exit_FlsTst_FLSTST_EXCLUSIVE_AREA_02 函数开关全局中断,会导致 LIN 功能开启后,即便尚未填入接收所需的数据,只要收到报头,硬件就会自动接收数据并将其写入寄存器。此时若已收到报头,但后续被其他中断或线程打断,导致接收配置尚未完全填入寄存器,就会触发 CheckSum 错误。

    1.2 问题复现

    1.2.1 时间测试

    1. 验证 GPT 10ms 定时是否准确,使用逻辑分析仪抓取 IO 反转波形,是 10ms
      e3984b65-4876-4699-a998-c2670c8e2bcd-image.png
      2e6db159-496e-42ec-a832-b8e7f94d1b3f-image.png
    2. 计算 FlsTst_MainFunction 中 SchM_Enter_FlsTst_FLSTST_EXCLUSIVE_AREA_02 和 SchM_Exit_FlsTst_FLSTST_EXCLUSIVE_AREA_02 函数的时间是 57.75us
      abb48f50-82ed-4f85-8167-78690f2274db-image.png
      8afeee00-e9b4-4a3a-b63e-6e18afdd1dbd-image.png
    3. 一次 FlsTst_MainFunction 计算 64Byte 大小的数据, 每次 SchM 保护阶段计算 8Byte 数据
      43d15c4f-f48d-4d99-a863-6bd844bf1a9f-image.png

    1.2.2 测试方式 1

    1. TSMaster 发送 0x3C(经典校验,主机响应) 和 0x0D(增强校验,从机响应) 两种报文,周期都为 20ms
      4fdb6641-547d-48a8-bff6-11cb7f2b9914-image.png
    2. TSMaster 发送一段时间后会触发 LIN Checksum Error,asd_test 是出现 Checksum Error 时 LINCFR 寄存器的值,此时是 0x57。TSMaster 0x3C 报文的校验和就是 0x57
      94f7b2b9-1331-4911-b463-ad27bff26d7b-image.png
      1b61ffee-40ed-41bc-85d3-1f4821884854-image.png
    3. 下图为逻辑分析仪抓取出现 LIN Checksum Error 时的波形图,多次测试发现只有在 LIN 总线(Channel 2)数据段第一个 Byte 的起始位和停止之间触发 LIN 中断并执行 Lin_Lld_HandleHeaderRecInt (Channel 1),且此时还处于 FlsTst_MainFunction(Channel 0)函数执行期间,就会触发 LIN Checksum Error
    • Channel 0:高电平持续时间为 FlsTst_MainFunction SchM 保护的时间
    • Channel 1:高电平持续时间为 Lin_Lld_HandleHeaderRecInt 函数的执行时间
    • Channel 2:LIN 总线波形
      468cab1a-810c-4d2e-a4a8-0728de61f37c-image.png

    1.2.3 测试方式 2

    1. TSMaster 发送 0x3C(经典校验,主机响应) 和 0x0A(增强校验,主机响应) 两种报文,周期都为 20ms
      5199373a-6a28-48ae-8b5d-aaddd36e8e56-image.png
    2. TSMaster 发送一段时间后会触发 LIN Checksum Error,asd_test 是出现 Checksum Error 时 LINCFR 寄存器的值。
    • 此时是 0x57。TSMaster 0x3C(经典校验) 报文的校验和就是 0x57
    • 此时是 0x67。TSMaster 0x0A (增强校验)报文的校验和就是 0x67
      a5c2a0b0-ddfd-449e-863c-f0743f847f77-image.png
      4c305071-c255-47ec-89a9-407ba6379fce-image.png
    1. 下图为逻辑分析仪抓取出现 LIN Checksum Error 时的波形图,多次测试发现只有在 LIN 总线(Channel 2)数据段第一个 Byte 的起始位和停止之间触发 LIN 中断并执行 Lin_Lld_HandleHeaderRecInt (Channel 1),且此时还处于 FlsTst_MainFunction(Channel 0)函数执行期间,就会触发 LIN Checksum Error
    • Channel 0:高电平持续时间为 FlsTst_MainFunction SchM 保护的时间
    • Channel 1:高电平持续时间为 Lin_Lld_HandleHeaderRecInt 函数的执行时间
    • Channel 2:LIN 总线波形
      c40229ee-cd2d-4287-abca-21495aad3840-image.png
      945379ac-2728-4a4a-a906-c2cea1f87ee8-image.png

    1.2.4 测试方案 3

    1. TSMaster 发送 0x3C(经典校验,主机响应) 和 0x3D(经典校验,主机响应) 两种报文,周期都为 20ms,压测 12 小时左右,未出现 Checksum 错误
      137f1ebd-ad58-4106-b8d6-5b6761039fd1-image.png

    1.2.5 测试方案 4

    1. TSMaster 发送 0x3D 或 0x3C(经典校验,主机响应)和 0x0D(经典校验,从机响应)两种报文,周期都为 20ms,若上位机发送为 ID 为 0x3D,代码里需要修改 0x3D 的 dir 为 PDU_RX
      08caf9c8-b4bb-4222-a55c-df768b28dd47-image.png
    • 发送 0x3D(经典校验,主机响应)和 0x0D(经典校验,从机响应)
      5ad5c8be-a3db-41b1-b335-16b6c03eb018-image.png
    • 发送 0x3C(经典校验,主机响应)和 0x0D(经典校验,从机响应)
      1c9f8e79-b929-4cae-b4a8-e4405f07e5b7-image.png
    1. TSMaster 发送一段时间后会触发 LIN Checksum Error,asd_test 是出现 Checksum Error 时 LINCFR 寄存器的值。
    • 此时是 0xC7。TSMaster 0x3D(经典校验)报文的校验和就是 0xC7
    • 此时是 0x57。TSMaster 0x3C(经典校验) 报文的校验和就是 0x57
      9cc71498-ed12-4903-ae3f-4046d0e5a733-image.png
      12f01a8d-286a-42d6-81aa-45af0a760dbb-image.png
    1. 下图为逻辑分析仪抓取出现 LIN Checksum Error 时的波形图,多次测试发现只有在 LIN 总线(Channel 2)数据段第一个 Byte 的起始位和停止之间触发 LIN 中断并执行 Lin_Lld_HandleHeaderRecInt (Channel 1),且此时还处于 FlsTst_MainFunction(Channel 0)函数执行期间,就会触发 LIN Checksum Error
    • Channel 0:高电平持续时间为 FlsTst_MainFunction SchM 保护的时间
    • Channel 1:高电平持续时间为 Lin_Lld_HandleHeaderRecInt 函数的执行时间
    • Channel 2:LIN 总线波形
      4f9e6957-f4de-4852-96a9-c3f3b294117e-image.png
      6d868073-1537-4164-8184-6820493f2af5-image.png

    1.2.6 测试方案 5

    1. TSMaster 发送 0x3D 和 0x3C(经典校验,主机响应)两种报文,单帧发送,但是接收到 0x3C 报文时,会启动定时器,在 LIN 中断里做一个延时,让中断执行时间拉长到数据段第一个 Byte 的起始位中间再结束,此时 0x3C 报文必触发 Checksum Error
      52a19b7d-1962-4f13-87c6-0ed8a5d8105e-image.png
      6b8fda91-56c6-419d-97ed-2257f4b1fdbe-image.png
    2. 下图为逻辑分析仪抓取出现 LIN Checksum Error 时 0x3C 报文的波形图,当 LIN 中断处理时间超过数据段第一个 Byte 的起始位到达的中间时,就会触发 Checksum Error
      7aa071a2-8a0b-457c-999c-77a91387da48-image.png

    1.2.7 测试总结

    87919fb3-1b12-4d5e-9693-71259c89ab0a-image.png

    1.3 根因分析

    1.3.1 全局中断开关导致 LIN 配置延迟(核心诱因)

    1. FlsTst_MainFunction 函数会调用 SchM_Enter_FlsTst_FLSTST_EXCLUSIVE_AREA_02 与 SchM_Exit 函数,该过程会开关全局中断(耗时 57.75us),且函数单次处理 64Byte 数据(SchM 保护阶段每次处理 8Byte)。当 LIN 硬件收到报头后,会自动开始接收数据并写入寄存器,但此时若被 SchM 的全局中断保护打断,LIN 接收配置(如 BIDR 寄存器参数)无法及时、完整填入寄存器,导致后续数据接收的校验逻辑异常。

    1.3.2 BIDR 寄存器写入时机限制(硬件约束)

    1. 根据 BIDR 寄存器(LINFlexD 模块关键配置寄存器)的功能特性及测试验证:
    • 寄存器需在LIN 收到报头后、数据段第一个 Byte 起始位前完成写入,否则硬件判定为 “数据接收阶段已启动”,拒绝后续配置写入(如 DIR 字段 “方向控制” 在接收开始后无法修改);
    • 若延迟至数据段第一个 Byte 起始位后再写入 BIDR(如测试中通过软件延时模拟),配置无效且必触发 Checksum 错误,印证了 “配置时机窗口过短” 的硬件约束。

    1.3.3 Checksum 错误判定逻辑的实际映射

    1. 从硬件逻辑代码可知,Checksum 错误的理论判定条件是 “在数据 Byte 的 STOP 位,满足stop_sample_data_pulse=1、ccd=0、chsu_r≠0”,即仅在 STOP 位校验。但实际测试中 “起始位后报错” 的现象,本质是配置延迟导致硬件在 STOP 位校验时,使用了不完整的配置参数计算校验和,最终表现为 “起始位后错误触发”,并非判定逻辑异常。

    1.4 解决方案

    1. 采用软件 Checksum 校验替代硬件校验,可直接避免因硬件配置延迟导致的校验错误,且已通过测试验证有效性。
    2. 将 Lin_Lld.c 文件直接替换即可,注意当前软件方案只是 LIN 做从机的时候用软件 Checksum。
      Lin_Lld.zip
    1 条回复 最后回复
    0
    • quanfengQ 离线
      quanfengQ 离线
      quanfeng YunTu
      写于 最后由 quanfeng 编辑
      #2

      HA、MD、ME 使用 LinflexD IP 的芯片都会存在这个问题。
      《HA MCAL 2_3_0》
      《MD MCAL 2_3_0》
      《ME MCAL 2_3_0》
      以上 MCAL 版本及其之前版本理论上都会出现这个问题

      1 条回复 最后回复
      0
      • yt0069Y yt0069 从 MCAL BUGS 移动了该主题

    • 云途开发生态介绍

      快速上手云途开发生态

    • 云途论坛规则/Yuntu Forum Rules

      发帖前请查看

    • YT CONFIG TOOL调查问卷

      帮助改进和优化YT CONFIG TOOL,有机会抽取YTM32B1ME0 EVB哦...

    • can
      20
      demo
      19
      uds
      13
      lin stack
      10
      md14
      6
      fbl
      5
      yt-link
      5
      adc模块
      4
      Online Users
      • 登录

      • 登录或注册以进行搜索。
      • 第一个帖子
        最后一个帖子
      0
      • 版块
      • 最新
      • 标签
      • 热门