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.
客户投诉 CAN 控制器中的仅监听模式无法正常工作、
客户 已确认其为真... 但有时它会起作用。
它们 跟踪到 CANTST 寄存器中的位(见下文)
寄存器6:CAN 测试寄存器(CANTST)、偏移量0x014、与 CANnRx 位相关。 当该位置位时、即使寄存器设置为监听模式、车辆也始终检测到确认。 当该位清零时、车辆未检测到侦听器。 他们无法在文档中看到如何清除此位。 有人能澄清吗?
此外、在 TI 例程库中: CANBitTimingSet
该例程错误地将 CAN 控制器从初始化模式中退出。
ui32SavedInit 是保存在例程开始时的原始值
//
//如果以前未设置 Init,则将其清除。
//
if (ui32SavedInit 和 CAN_CTL_init)
{
ui32SavedInit &=~CAN_CTL_init;
}
这应该是(因为初始值可能已清除此位)
//
//如果以前未设置 Init,则将其清除。
//
if (!(ui32SavedInit & CAN_CTL_init))
{
ui32SavedInit &=~CAN_CTL_init;
}
查尔斯
您对库代码是正确的、 是正确的
但是、客户 仍然看到、设置 RXbit 时、他们的记录器 仍然看到有位填充 ACK 帧。
当 RX位 未被置位时 、记录器似乎不发送任何帧。
问题是、在他们的系统上、他们处于监听模式以执行波特率检测。 叉车/汽车为250k、 当它们设置为500k 以侦听时、叉车将收到错误帧、直到 它们以250k 切换到下一个波特率。 因此 ,他们能够确定它何时起作用而不起作用的最佳方法似乎是基于该位指示的任何内容。 他们并不真的关心清除该位…他们关心该位被置位时监听模式中的含义是什么?
它们 始终调用一个 CANInit、并通过设置测试中的测试模式位 CTL 和 监听模式位来进行后续操作。 他们认为这与 CTL 中的 INIT 位有关、但 他们可以看到情况并非如此。 因此 、在使 CAN 控制器可靠地进行侦听方面、他们似乎缺少一些东西。
我怀疑他们期望在任何波特率下工作、但他们必须配置/猜测正确的波特率才能正常工作?
您好 Laurence、
我对静音模式的理解是、TX 引脚在内部与 RX 引脚线连接、同时仅驱动 TX 引脚上的隐性位。 它与环回模式有点相反。 在回送模式下、TX 引脚被驱动到收发器、并且在 RX 引脚与收发器断开连接的情况下、也被内部路由到 RX 引脚。 在任一种情况下、我都希望 MCU (处于监听模式)的波特率与 CAN 系统设置期间商定的其余节点相同。 您会说 MCU 设置为500k、其余节点设置为250k。 我认为这不起作用。 您为 MCU 设置的位时序无法对总线上的流量进行正确采样。