CAN节点休眠与唤醒机制原理及应用 · 001:CAN总线基础回顾——帧格式、仲裁与错误处理
一、从一次深夜调试说起
凌晨两点,示波器探头戳在CAN_H和CAN_L之间,波形像心电图一样跳着。我盯着屏幕上的显性位宽度,心里骂了句脏话——明明按照标准写的唤醒帧,节点就是死活不响应。后来发现,问题出在我对CAN帧格式里那个“SOF”的理解上:我以为只要拉低总线1个位时间就算唤醒,结果芯片要求的是完整的11个隐性位加1个显性位。这种坑,踩过一次就忘不了。
所以这篇笔记,咱们不聊虚的。直接从帧格式的骨架上拆,把仲裁和错误处理那些容易翻车的地方掰开揉碎。你如果正在做CAN节点的低功耗设计,或者被唤醒逻辑折磨得想砸示波器,这篇就是为你写的。
二、CAN帧格式:别被教科书骗了
教科书喜欢画那种带“SOF、仲裁场、控制场、数据场、CRC、ACK、EOF”的方框图,看着整齐,实际调试时根本没人按那个顺序看。我习惯从示波器抓到的波形反推——先看显性位在哪里,再看ID怎么排列。
SOF(帧起始):1个显性位。注意,这是总线从空闲(隐性)跳变到忙碌的标志。很多唤醒电路就是靠检测这个下降沿触发的。但有个细节:CAN FD和经典CAN的SOF完全一样,但后续位时序不同。如果你用经典CAN的唤醒逻辑去等FD帧,大概率会漏掉。
仲裁场:11位(标准帧)或29位(扩展帧)ID + RTR位。这里最容易翻车的是RTR位。远程帧的RTR是显性,数据帧是隐性。有些低端CAN控制器在接收远程帧时,如果ID