This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] SAFETI-HALCOGEN-CSP:CAN1_UT_07:4 — 在数据丢失条件下测试 canGetData API — 失败

Guru**** 2551110 points
Other Parts Discussed in Thread: SAFETI-HALCOGEN-CSP, HALCOGEN

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1557808/safeti-halcogen-csp-can1_ut_07-4---test-cangetdata-api-with-data-loss-condition---fails

部件号:SAFETI-HALCOGEN-CSP
主题中讨论的其他器件:HALCOGEN

工具/软件:

尊敬的:

我无法通过其中一个 HALCoGen 单元测试。 发生在所有三个 CAN 接口上。 失败的测试用例是 CAN1_UT_07:4 — 测试 canGetData API 以及数据丢失情况。

我已经确保根据 xlsx 文件中规定的测试序列要求配置消息框和中断:

1) Enable All CAN Interrupts in VIM Tab
2) Message 1,2,3,4,5,6 are activated
3) Message 1 config - TX, DLC = 8, No Interrupt, ID = 1
4) Message 2 config - RX, DLC = 8,  Low Priority Interrupt Enabled, ID = 1
5) Message 3 config - TX, DLC = 8, No Interrupt, ID = 3
6) Message 4 config - RX, DLC = 8,   High Priority Interrupt Enabled, ID = 3
7) Message 5 config - TX, DLC = 8, No Interrupt, ID = 5, Enable RTR
8) Message 6 config - RX, DLC = 8,  High Priority Interrupt Enabled, ID = 5.

我已进一步确保所有其他消息框均已停用、以便测试消息不会被其他消息框窃取。

测试用例启动代码如下所示:

canTransmit(canREG1, canMESSAGE_BOX3, tx_data);
while(!canIsRxMessageArrived(canREG1, canMESSAGE_BOX4));
canTransmit(canREG1, canMESSAGE_BOX3, tx_data);

因此、代码发送到消息框 4、等待消息到达、但不收集数据、然后发送另一条消息以强制消息丢失指示。 显然,信息丢失的指示没有得到设置,我是出于想法为什么。  所有其他测试用例都可以通过、但每个 CAN 接口的测试用例都无法通过。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Julia:

    如果接收到 ID 相同的邮件、邮箱中的未读邮件将被覆盖。 由于启用了 RX 中断、CAN ISR 是否会将消息从邮箱 4 移动到数据寄存器?  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    不可以、notification.c 中的 ISR 在由 HALCoGen 生成时为空白、我也看不到 xlsx 文件添加 ISR 实现。 如何使用 CSP:从应用程序复制 HCG 和 DIL 文件、更改消息框的配置和中断、禁用 CCM 和 CPU 自检选项以允许连接调试器。 然后生成代码并运行测试。  

    一切都正常、但这一个测试用例没有。 现在、我知道测试序列中存在相互依赖关系、因此我不应该最多禁用测试用例、因为它可能无法通过下面的测试用例。 但对于这个测试用例故障、我已启用所有测试用例。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Julian:

    如果 canMessageNotification() 为空、则 CPU 不会从消息 RAM 读取消息、并且 NewDAT 位不会被清除。 如果出现新消息、MsgLst 将被设置为指示前一条消息丢失。

    您是否在重新传输消息之前检查了 NewDAT 是否已设置?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    是的、测试用例已使用上面显示的 while 语句执行了该操作。 它调用 canIsRxMessageArrived 来检查 newdat、直到它被设置。 现在、我将添加一个打印件、其中列出了在重新传输后设置了该标志的所有消息框、以查明是否有其他一些框窃取了该信息框并返回报告。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    好的、我的打印实验显示了消息框 4 和 7 的一个 newdat 指示。 因此、即使 MB7 保留为默认配置、它也会窃取重新传输。 我做了另一个测试,其中我明确将 MB7 配置为 RX 并启用它,但由于其配置的 ID 7 不匹配,它不会采取重新传输。 到目前为止一切顺利。 不幸的是、测试现在仅显示 MB4 的 newdat(预期)、但仍然失败、因为 canGetData 返回 1 而不是预期的 3 (msglost)。

    ****************************************************************************************
    *
    *在序列 CAN1_UT 中执行现有的测试用例 19
    *文件: C:\test\unit\halcogen\source\can.c
    *程序: canGetData
    *
    ****************************************************************************************
    以 MB 为单位的 newdat 4.                       <----- 添加的打印现在可以
    节点的输入=(canbase_t*) canREG1
    MessageBox 的输入=(Uint32) canMESSAGE_BOX4
    DATA =(uint8* const) rx_data 的输入

    调用 canGetData
    没有出现任何例外情况
    输出 for = 1 失败:预期 (Uint32) 3  <------- 仍然没有 msglost 标志
    ****************************************************************************************

    所以我自然想知道:

    • 为什么 MB7 在未配置时会显示该消息? 我已经检查了 CSP 中的示例工程、MB7 配置完全相同(每个未使用的 MB 都默认使用 HALCoGen)。
    • 为什么即使我已确保消息不会在任何其他 MB 中结束、我仍然没有得到 msglost 指示?

    最后一点对我来说有点令人惊讶,因为我认为 MB7 窃取信息是第一个原因。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    另一个数据点:我尝试在测试用例开始时全局禁用 IRQ、并在结束时重新启用 IRQ 这没有影响。 因此、它绝对不是 ISR 清除 newdat 导致不会设置 msglost。 我得到的感觉,不管出于什么原因, CAN 控制器确实没有设置 msglost 当它有一个新的帧,它看到 newdat 已经设置。 我不认为这是一个普遍的问题,但我是出于想法什么可能导致在我的情况下。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Julian:

    今天上午我运行一些 CAN TX/RX 测试、遇到相同的问题:MsgLst 位未设置。 我在消息 RAM 的消息对象中看不到 newDAT 位。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    所以你根本看不到 newcat 吗? 我确实看到 newcat、因为测试用例等待它、当我打印时、我使用驱动程序 API 进行检查。 只有 msglost 从不发生。

    那么、这可能是什么原因呢? 我的想法:

    • 考虑到设计年限、CAN IP 的一般问题极不可能出现
    • 内部环回的问题也会令人惊讶、因为 CSP 测试案例的创建者会发现该问题
    • 也许有些 HALCoGen 生成的代码在最初的 CSP 版本和今天之间发生了变化、这一变化就揭示了问题。

    我们如何继续? 有什么想法我们可以尝试? 我已经禁用了另外两个 CAN 驱动程序、以在生成的代码中排除一些„cross-pollination “。 没有影响。

    在我的特定情况下,我可以禁用失败的测试用例,并提供一个冗长的理由,说明 msglost 指示没有安全影响。 但我宁愿走到底。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    那么您根本看不到 newDAT 吗? [/报价]

    我在消息 RAM 中看不到 newcat 消息对象。 我在 CCS 内存浏览器中手动读取该消息(直接 RAM 访问)。  

    我们如何继续? 有什么想法我们可以尝试? [/报价]

    实际上、许多客户使用 HalCoGen CSP 进行外围设备测试、我以前没有收到此类问题的报告。 想知道是否漏掉了配置中的内容。

    [/quote]
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我现在已经尝试了 1224PGE 的新和 vanlla HALCoGen 配置。 我只更改了所需的 VIM、可以根据 xlsx 中的要求进行配置。 问题仍然存在。 未设置 msglost。 我还能尝试什么?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Julian:

    文件夹“..\SafeTI-HALCoGen-CSP\TMS570LS12x_11x_v04.07.01\HALCoGen\TMS570LS12x\cSP\Test\Reports\Regression Reports“中的测试报告显示测试通过:

    CAN1_UT.thr.htm

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    是的、我知道。 但我不能重现它,即使用一个香草 HALCoGen 配置。 为了澄清一下、仅带有空处理程序的中断到达就不会清除 newDAT、只会对其进行复位(例如使用 canGetData)。 对吧? 这就是我对测试案例的理解。 我的香草配置如何与 CSP 创建者使用的配置不同? 我将对示例 DIL 文件进行比较、看看这是否显示任何内容。 但我不乐观地找到任何东西,真的想知道在这里发生了什么。 特别是因为你能够在你的最后重现这个问题

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Julian:

    我在 L12x Launchpad 上进行了更多测试。 我无法通过测试。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Julian:

    我使用不同的硬件设置进行了测试:循环 CAN1 到 CAN2。 CAN1 发送消息、CAN2 接收消息。 也未设置 MSGLST。 我注意到第二次传输的数据不会复制到 CAN2 消息 RAM 中。 这个过程会被忽略。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    感谢您发送编修。我们会重新检视您的建议。 我还尝试了一个设置,我只是有一个评估板,一个外部 CAN 接口,一个最小的配置和程序,结果是一致的,你的发现。 我无法说服 CAN IP 提出 MsgLost 指示。

    如果你有任何其他建议可以尝试,我就来这里。 此致

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    在不想分散对主题的注意力的情况下、是否有任何确认可以在 TMS570 上将 MsgLst 寄存器设置为 1(即使在此测试之外)? 我找到此主题是因为我在 TMS570LC4357ZWT 上遇到类似问题(想要测试是否有缺失的消息,无法使其发生)。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的:

    欢迎添加到该主题中。  

    虽然我无法提供不同于„TI 员工在创建 CSP 时通过了测试“的答案、但我打算接下来研究以下因素:

    - HALCoGen 版本:也许在创建 CSP 时使用的版本和最新版本之间引入了一个错误

    -外部的作用 IDs:只是一个镜头在黑暗中,检查是否更改 ID 方案改变情况

    -角色的 HALCoGen 默认配置:也许如果我激活所有其他邮箱并为 TX 配置它们, CAN IP 会决定它是不在第二个帧的选项,最后提高 MsgLost

    -启用的中断的作用:也许禁用所有中断可能会在第二个帧进入时改变 CAN IP 行为

    我会在学习一些东西时返回报告。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Julian:

    感谢您尝试不同的配置。 但我没有其他版本的 HalCoGen。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我使用 HALCoGen 04.07.01、CAN 消息 ID 为 0x199。 我在不使用 HALCoGen 驱动程序的情况下配置邮箱、但我使用它们来初始化 CAN 器件。 我没有尝试测试套件以确保所有功能正常工作(我承认,我只是假设他们这样做)。 我正在移植客户端的应用程序。 我为此特定 ID 配置了单个邮箱、我的当前测试是每 100ms 读取 1 条消息、根据它是否已准备好读取、是否缺失或消息是否丢失(邮箱 MCTL 寄存器的 MsgLst 位)点亮 LED。

    除了 FreeRTOS 的节拍外、不涉及中断。 我使用轮询方法。

    我使用单独的器件以不同的频率发送 CAN 消息。 我目前的小测试涉及用不同的消息 ID 回显数据、除了 MsgLst 之外、一切似乎都正常工作。 即使每 1ms 发送 1 条消息、也无法触发 MsgLst 位。 但是、我还没有检查是否覆盖邮箱的数据。 我希望发现我忘记设置一些寄存器,允许发生这种覆盖,这就是为什么它无法获得 MsgLst 信号,但到目前为止没有这样的运气(调查我是否没有考虑到 MCTL 的 EOB 位目前)。

    编辑:
    我怀疑它可能与缓冲系统有关、事实上、我没有设置邮箱的 EOB 位。 我正在尝试设置它,但显然未能。 根据我的理解、这将解释我与 MsgLst 的问题(EOB 保持在 0 防止覆盖)。 现在正在调查在开始配置邮箱之前、尽管 MsgVal 已重置、但为什么仍然没有设置我的 EOB 位。 希望它与您自己的问题有关。

    第二次编辑:在寄存器的地址 (oops) 上犯了一个错误。 正确设置 EOB 可解决 MsgLst 问题。 Slight smileμ s

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 William、  

    太棒了! 谢谢! 设置 EOB 位解决了问题。  

    1.启用接收消息对象的 EOB、即生成代码

    2.检查 MsgLst 的主函数

    e2e.ti.com/.../TMS570LC43x_5F00_DCAN_5F00_MsgLst.zip

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    是的,这也是对我来说的。 非常感谢。 在展示如何为接收设置单个消息箱时、TRM 也很清楚这一点。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、

    是的、测试现在通过。  

    这是一个很有头绪的人。 我认为 CAN 单元测试的 CSP 测试用例指令应该已将其包含在其消息箱设置指令中、或者更好的是、HALCoGen 应该将该位设置为默认值。

    感谢您的支持。

    此致

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Julian:

    我将添加一个注释和一个常见问题解答来强调这个问题。