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.
工具与软件:
Linux 驱动程序上似乎没有 id 过滤器实现、您能否指导如何仅过滤 EFF id 0x18a 并丢弃所有其他消息、因为我在平台上收到 msg 丢失问题。
根据数据表、
GFC: 0x3c、拒绝、处理与过滤器列表中的任何元素不匹配的29位 ID。
LSE:过滤器 ID 的数量?
FLSEA:过滤器 ID? 但仅限于16位
或者如何避免 RF0L 之后芯片无法正常工作、我禁用了 RF0LE、但没有帮助
尊敬的 Charles:
您需要创建 XID 过滤器元素并将其存储到 MRAM 中 、MRAM 中包含每次接收到新消息时要检查的特定过滤器信息。 如果您只想存储特定的消息 ID、那么您可能需要使用传统掩码过滤器、它将与带有滤波器 ID 的消息 ID 相匹配、仅将其存储到 RX 缓冲区中。
您需要为过滤器元素分配 MRAM 空间、方法是将扩展 ID 过滤器配置寄存器0x1088配置为具有的过滤器元素的数量以及过滤器元素的起始地址空间。
请注意、如果分配过滤器元素、则实际必须在该 MRAM 空间中包含有效的过滤器元素、否则可能会出现错误。 这是因为在接收到以第一个元素开头的消息时、器件将尝试评估所有过滤器元素。 如果分配了多个过滤器元素、则未通过第一个过滤器元素的消息将由下一个过滤器元素进行评估、直到没有更多过滤器元素或消息已传递其中一个过滤器。 因此、如果分配过滤器元素、但将 MRAM 空间留空、则可能无法正确处理 RX 消息。 因此、不要分配更多您实际上计划使用的元素。
您可以在以下文档中找到有关如何配置过滤器元素的其他详细信息:
TCAN45xx 软件用户指南 (链接)
M_CAN 用户手册 (链接)
此致、
Jonathan
你(Jonathan)好
您能否提供确切的寄存器和应写入的值?
描述中描述了不同的寄存器描述
在 RF0L 之后是否有任何恢复日期可以替代的方法、我可以在由 RF0L 提供支持的 ISR 中实现该方法
尊敬的 Charles:
XIDFC 寄存器分配内存 RAM (MRAM)位置来存储 XID 过滤器元素。 在 XIDFC 中、您需要将 LSE 字段设置为要存储在 MRAM 空间中的 XID 过滤器数量。 如果只有一个 XID 滤波器、则需要设置 LSE = 1。 FLESA 字段包含第一个 XID 元素第一个字节的起始地址或 MRAM 地址。 此值需要根据您的总体 MRAM 分配来确定、以避免将用于 XID 滤波器的 MRAM 与其他元素(例如 RX 和 TX 缓冲器等)重叠
然后、实际的 XID 过滤器写入此 MRAM 空间、其中包括 EFEC、EFT、ESYNC、EFID1和 EFID2字段。 EFEC 字段指示器件在消息与过滤器匹配时应执行的操作、例如将其存储到其中一个 RX FIFO 中。 EFT 字段指示器件使用哪种类型的滤波器、例如这是经典滤波器、还是范围滤波器等 ESYNC 域用于启用或禁用消息时间戳。 EFID1和 EFID2字段的使用方式有所不同、具体取决于您在 EFT 字段中配置的过滤器类型、但通常用于设置要作为范围的一部分进行筛选的消息 ID 或具有传统过滤器的掩码等
此致、
Jonathan
你(Jonathan)好
您能否帮助查看我只想接收 EFF ID 0x18a 但从'candump CAN0'什么都没有得到的设置?
// mcan_reg_offset 0x1000
// M_CAN_SIDFC = 0x84、
// M_CAN_XIDFC = 0x88、
// mrram_offset 0x8000
// M_CAN_XIDW1 0x7f8
// M_CAN_XIDW2 0x7fc
//++TCAN4551-Q1汽车控制区域网灵活数据速率
// 22:16 LSE[6:0]列表大小扩展1
// 15:0 FLSEA[15:0] Filter List Extended Start Address?????????
// m_can_write (cdev、M_can_XIDFC、0x107f8);end:2048-1=0x7ff
// FLESA [15:2](过滤器列表扩展起始地址)
M_can_write (cdev、M_can_XIDFC、(0x1 << 16)|(0x7f8 << 2));//0x11fe0
//- TCAN4551-Q1汽车控制区域网灵活数据速率
//++TCAN45xx 软件用户指南
// EFEC[2:0] EFID1[28:0]
//扩展过滤器元素配置
// 001=如果过滤器匹配、则存储在 Rx FIFO 0中:mcan_users_manual_v331
// 2000018a
//
// EFT[1:0]分辨率 EFID2[28:0]
// 11= EFID1到 EFID2的范围过滤器(EFID2 ? EFID1)、未应用 XIDAM 掩码
//
// b000018a
//-- TCAN45xx Software User's Guide (TCAN45xx 软件用户指南)
m_can_fifo_write_no_off (cdev、M_can_XIDW1、0x2000018a);
m_can_fifo_write_no_off (cdev、m_can_XIDW2、0xb000018a);
尊敬的 Charles:
我已经尝试创建您的 XID 滤波器配置、我有一些评论和建议。
验证扩展 ID 过滤器配置寄存器0x1088 = 0x107F8。 函数调用后的注释指示值0x11FE0、如果过滤器起始地址为0x7F8、则该值是错误的。
对于单个寄存器 ID、我发现传统掩码更容易配置。 您只需设置 EFID1 = 0x18A、然后 EFID2 = 0x1FFFFFFF 用作掩码。 这样、29位消息 ID 中的每个位都与 EFID1进行"与"运算、以确保每个位都匹配。
请注意、您还需要设置全局滤波器配置寄存器(0x1080)以拒绝不匹配的消息
以下过滤器适用于我:
M_CAN_WRITE_(cdev、M_CAN_XIDFC、0x107F8);
m_can_fifo_write_no_off (codev、M_can_XIDW1、0x2000018A);
m_can_fifo_write_no_off (codev、M_can_XIDW2、0x9FFFFFFF);
此致、
Jonathan