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.

[参考译文] TMS320F28P550SJ:MCAN 过滤器元件不工作

Guru**** 2796425 points

Other Parts Discussed in Thread: SYSCONFIG

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1620078/tms320f28p550sj-mcan-filter-element-not-working

器件型号: TMS320F28P550SJ
主题: test2Sysconfig 中讨论的其他器件

尊敬的专家:

客户正在使用 syscfg 开发 mcan 函数。 它们使用自己的板、CAN H/L 连接到连接 PC 的 CAN 调试器。 我们使用 CAN 调试器向 F28P55 发送和接收帧。

我们使用传统 CAN、并已正确设置 CAN TX 功能。 我们能够将帧发送到调试器、这样就可以排除任何硬件/波特率问题。

我们在使用过滤器元件测试接收函数时遇到问题。  

我们设置了三个过滤器元素、如下所示、它们应该涵盖任何 ID、所有帧都进入 FIFO0。

image.png但是、C2000 不会接收这些帧。 从不进入中断、我们正在从调试器看到错误帧、这可能是由于 C2000 未发送 ACK 导致的。

接下来、我们开启了对 FIFO0 不匹配帧的接受、如下所示:

image.png

然后可以正确接收帧、使用正确的 ID 和数据测试标准 ID 和扩展 ID。 此结果应该可以排除中断配置中的问题。 问题将是过滤器元素未能匹配后续帧的原因  

我想象一下下面的屏幕截图中的问题。  

左侧是 ISR 中的代码、我使用 IF 语句来判断过滤器元素是否与传入帧匹配。 如果任何元素匹配、变量 test2 将添加一个元素。 如果非过滤器元素匹配、则 test3 加一。

在表达式窗口中、您可以看到 rxMsg 结构正确显示了接收的数据和 ID、但是它来自“不匹配“路由、因为只有 test3 不为零、test2 为零。

image.png

过滤器元素为什么不匹配?

我也会在这里添加一些相关的配置。 所有配置均通过 syscfg 完成。

image.png

 

image.png

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

    您好、

    1. RX FIFO0 元素的数量 (200) 太大, FIFO1 的起始地址也不正确。 MSG RAM 总大小为 0xFFF (4KB)。 它最多支持 64 个元素用于 RX FIFO0。 请检查“计算起始地址“以重新计算 FIFO1 的起始地址。

    3.标准过滤器用于您的配置。 对于标准过滤器、消息 ID 为 11 位 (0~0x3FF)。 但在配置中、ID2 为 0xFFFFFFFF。 您的消息 ID (0x568 02B4) 超出标准 ID (0x0~0x3FF) 范围。 请使用扩展 ID 和扩展 ID 过滤器。 SysConfig 没有扩展 ID 过滤器、请手动配置它。

    2.您是否为所选中断线路 (0 或 1) 选择了正确的中断源?

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

    尊敬的 QJ:

    我们已经修复了地址、现在我们可以使用过滤器元素。

    但是、我们可以看到表示元素编号与配置的元素不匹配的变量。

    这是我们运行的测试。 我们为缓冲区设置 2 个过滤器元素(见下图)、并发送标准 ID 帧。 不匹配帧已设置为“拒绝“、因此所有标准帧都应通过过滤器。

    当 ID=0x1 时、Elemnent 1 应接收帧、statusLow 保存 0x0002。

    当 ID=0x123 时、帧应由元素 2 接收、但 statusLow 保持 0x8000。

    我不知道 0x2 和 0x8000 如何 映射到元素 1 和元素 2。

    (看起来我无法在 E2E 上上传文件,我会在内部发送图片)

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

    再添加一个问题。

    如果 ID1 = 0x123 和 ID2 = 0xF、则过滤器 2 设置为接收到缓冲器。 由于 ID2 是掩码、因此它应该能够接收 ID 0x[XX3]、因为只 关心最后四位。 但是、我们已经经历了所有标准 ID、但它只能接收 ID=0x123、不会接收像 0x133 或 0x143 这样的其他 ID。 这是什么原因?

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

    您好 Hang、

    根据您的配置、ID=1 的消息(在过滤器元素 1 中)存储在一个地址偏移为 0x1(缓冲器 1)的 RX 缓冲器中、而 ID=0x123 的消息(在过滤器元素 2 中)存储到一个地址偏移为 15 (SPID2[5:0]) 的 RX 缓冲器中、即 RX 缓冲器 15。

    这就是 newDAT 寄存器中设置位 1 和位 15 的原因。