MCU没有CAN或CAN接口数量不够怎么办?目前市面上有串口转CAN的相关模块或设备,但大家知道串口转CAN是如何实现的吗?转换后的帧格式是如何的?本文将为大家详细介绍串口经过转换后的CAN帧格式与注意事项。
适用场景
串口转CAN模块在什么时候需要用到呢?一是老产品面临升级,需要用到CAN总线通信,但硬件平台中的MCU没有集成CAN总线的控制器。二是选用的MCU已经包含CAN总线接口,但数量上不能满足项目需求。若出现类似以上两种情况且MCU有闲置串口,则可以选用串口转CAN模块解决。
图1 应用行业
使用方法
该类模块可以很方便地嵌入到具有UART接口的设备中,在不需改变原有硬件结构的前提下使设备获得CAN-bus通讯接口,实现具有UART设备和CAN-bus网络之间的数据通讯。工业级的转换模块内部还包括实现带隔离的CAN和UART转换所必须的模拟和数字器件、光电耦合器、DC/DC变换器、CAN-bus接口等。
图2 产品架构
转换说明
CSM100系列模块提供3种协议转换方式:透明转换、透明带标示转换、自定义协议转换。下面以CSM100系列的模块简述模块的透明转换格式。
该模式下,CSM100接收到一侧总线的数据就立即转换发送至另一总线侧。该模式下的模块数据转换效率最高,能承担较大流量的数据传输。串行帧转CAN帧时,模块将来自串口的数据直接打包,并插入预先配置的CAN帧信息、帧ID一同作为一帧数据发送到总线上。同理,来自CAN总线上的数据将按顺序拆分为字节流发送到串口上,字节流的前几个字节为该CAN帧的信息。
图3 转换方式
说到这,大家肯定有个疑惑,CAN帧的信息及CAN帧ID是如何表示的呢?
帧信息主要用来区分标准帧、扩展帧,长度为1个字节。在“自定义协议转换”中,标准帧固定为 0x00, 扩展帧固定为 0x80; 在“透明转换”“透明带标识转换” 中, 标准帧为 0x0_,扩展帧为 0x8_,其中“_” 代表每个帧中的数据域长度, 范围为 0~8。
标准帧的帧ID拆分为2个字节表示,扩展帧的帧ID拆分为4个字节表示。如果实际配置时给帧ID预留的只有一个字节且帧类型为扩展帧,方向是CAN帧转串行帧,那么将只能得到帧ID的高8位。如果实际配置时给帧ID预留的只有一个字节且帧类型为扩展帧,方向是串行帧转CAN帧,那么将帧ID的高8位正常填充,其他三字节全补零。
图4 帧ID转换说明