我们使用的是 iMx6(不同板上的四通道和双通道),我们很少看到 CAN 模块在开机时未正确初始化的情况。这是在 yocto linux 下使用 socketCAN。大多数情况下,事情会按预期进行。但有时can0接口无法激活。当我运行 canconfig can0 时,状态为 STOPPED。我告诉它开始,但它停留在 STOPPED 状态。重启命令会回复我们不在 BUS-OFF 状态,因此不需要。我也试过 ifconfig down/up 但这并没有让它工作。我发现唯一可以恢复它的方法是完全重新启动系统。
当系统启动期间有 CAN 流量时,它似乎更频繁地发生。我有一个台式系统,我的 CAN 总线通常处于空闲状态,我从来没有看到这种情况。但是,如果我让 CAN 流量运行然后重新启动,我可能会看到它在一个月内发生一两次。同样,当目标设备放置在车辆上时(启动时 CAN 处于活动状态),我们很少会看到相同的“卡在停止状态”行为。我很确定在低级别出现了问题,因为网络管理员通常会为 can0 发出“Gained carrier”消息,但是当这种情况发生时它不会。那以及 canconfig 显示 STOPPED 的事实告诉我这不是应用程序层中的问题。
关于导致启动时初始化失败并强制块进入 STOPPED 状态的任何想法?或者可能如何“踢裤子”并让它再次运行而无需完全重启?