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.
尊敬的专家:
我对 MCLKOFF 有一些疑问。
我正在使用280039通过 CAN 从主机接收消息。
如果我 在应用程序代码中突然将 MCDCR.OSCOFF 位设置为1、OSCCLK 将断开与 MCD 模块中的 OSCCLK 计数器的连接。 将检测到缺少 OSCCLK、并且 OSCCLK 源将切换到 INTOSC1。
我认为检测缺少的时钟和切换时钟源可能需要很短的时间。
我的问题是:
1.在此短时间内、CAN 模块是否仍能通过 CAN 从主机接收信息? 它是否会导致 CAN 总线断开?
2.当 MCDCR.OSCOFF 位 为1时,CAN 时钟是否仍然工作?
谢谢!
此致
奇田市
Kita 您好!
在发生完整时钟故障时、如果 OSCCLK 死区、在 CLOCKFAIL 信号变为高电平之前、可能需要8192个 INTOSC1周期(即0.8192ms) 的最大时间、之后时钟被强制切换到 INTOSC1。 这是你指的时间 ?
当检测到 MCD 时(在这种情况下、使用 OSCOFF 位触发)、将绕过 PLL 并且时钟强制切换到 INTOSC1。 同时、发生这种情况的系统 依靠 PLL 跛形时钟运行。 因此、要回答您的问题、CAN 模块仍将接收消息或工作、但考虑到 CAN 的时钟要求 、由于系统运行在跛行时钟上、事务可能会受到影响。
谢谢。
Prarthan.
您好、Prarthan、
感谢您的答复。
我的客户使用280039作为 CAN 的接收器节点。
我的客户具有外部 振荡器、正在通过以下步骤测试 MCD 功能:
1.使用以下函数断开 MCD 时钟源:sysctl_disconnectMCDClockSource ();
2. 等待 NMI 在时钟故障时触发:while (mcd_clkfail_isr!= 0x1u );
3.连接内部振荡器:SYSCTL_selectOscSource (SYSCTL_OSCSRC_OSC1);
4、 Re 连接时钟检测时钟源缺失,停止模拟时钟故障: SYSCTL_connectMCDClockSource();
5.使用原始时钟源设置 PLL 控制和时钟分频器: SysCtl_setClock(device_setClock_CFG);
客户报告、如果接收器正在执行步骤1-5并且 发送器同时通过 CAN 向接收器发送消息、则发送器发送异常 CAN 消息、然后发送器处于总线关闭状态。
我正在测试并发现相同的问题。 我使用28335作为发送器、28335始终显示相同的消息:0x00 0x00 0xFF 0xFF 0xFF 0x00 0x00 。
开始时、SYSCLK 是120MHz、消息可以很好地传输。 没有错误。 范围如下。
CH1是发送器的 CANRX-GND、CH2是发送器的 CANTX-GND、CH15是 SYSCLK/8。
然后、SYSCLK 将更改为10MHz、消息无法正常传输。 发送器的 CANRX-GND 和 CANTX-GND 上都存在错误。
在下一个周期中、发送器发送 一条异常消息、示波器如下。 SYSCLK 连接到10MHz。
在下一个周期中、 发送器还发送 一条异常消息。 SYSCLK 连接到10MHz
3个周期后、发送器进入脱离总线状态。 SYSCLK 连接到10MHz
我 想接收器的时钟可能是导致通信错误的原因、因为 时钟会 首先更改为内部 振荡器、需要一些时间才能切换回外部振荡器。
但我不明白为什么接收器的时钟问题会导致 发送器的异常消息 CANTX-GND 和 CANRX-GND。
你能给我一些建议吗?
谢谢!
此致
奇田市
Kita,
这是预期行为。 我来解释一下:一旦您禁用了 OSCCLK、器件就会按照 PLL 的跛形模式时钟运行、直到 MCD 电路检测到缺少时钟并将时钟切换至 INTOSC1。 接收 CAN 节点在您禁用 OSCCLK 的那一刻就无法接收。 不仅如此。 由于 CAN 模块的输入时钟频率已经改变、其配置的比特率也会改变。 因此、每当发送器尝试发送数据时、它就会开始用错误帧阻塞总线。 这将使发送器断开总线。 这就是你所看到的。