
MCU没有CAN或者CAN接口数量不足怎么办?目前市场上已经有相关的模块或者器件可以实现串口转CAN,但是你知道串口转CAN是怎么实现的吗?转换后的帧格式是什么?本文将详细介绍串口转换后CAN帧的格式及注意事项。
适用场景
什么时候需要串行端口到CAN模块?第一,老产品面临升级,需要使用CAN总线通信,但硬件平台中的MCU没有集成CAN总线的控制器。第二,选择的MCU已经包含CAN总线接口,但数量不能满足项目要求。如果有两种类似情况且单片机有空闲串口,可以选择串口转CAN模块解决。
图1应用行业
施用方式
这种模块可以方便地嵌入到带有UART接口的设备中,使设备在不改变原有硬件结构的情况下获得can总线通信接口,实现带有UART的设备与can总线网络之间的数据通信。工业转换模块还包括模拟和数字器件、光电耦合器、DC/DC转换器、CAN总线接口等。这是隔离实现CAN和UART转换所必需的。
图2产品架构
转换描述
CSM100系列模块提供三种协议转换模式:透明转换、透明带标签转换和用户自定义协议转换。以下描述了CSM100系列模块的透明转换格式。
在这种模式下,当CSM100从一条总线接收到数据时,它会立即将其转换并发送到另一条总线。这种模式下的模块数据转换效率最高,可以承担大数据传输。当串行帧转换为CAN帧时,模块直接封装来自串行端口的数据,并插入预先配置的CAN帧信息和帧ID,作为一帧数据发送到总线。同样,来自CAN总线的数据也会按顺序拆分成字节流发送到串口,字节流的前几个字节就是CAN帧的信息。
图3转换模式
说到这,大家肯定都有一个疑惑。CAN帧的信息和CAN帧的ID是如何表示的?
帧信息主要用于区分标准帧和扩展帧,长度为1字节。在“自定义协议转换”中,标准帧固定为0x00,扩展帧固定为0x80;在“透明变换”和“透明带标识变换”中,标准帧为0x0_,扩展帧为0x8_,其中“_”表示每帧中数据字段的长度,范围为0-8。
标准帧的帧ID被分成两个字节,扩展帧的帧ID被分成四个字节。如果在实际配置中只为帧ID保留一个字节,并且帧类型是扩展帧,方向是CAN帧到串行帧,则只获得帧ID的高8位。如果实际配置时只为帧ID预留一个字节,且帧类型为扩展帧,方向为从串行帧到CAN帧,则帧ID的高8位会正常填充,其他三个字节用0填充。
图4帧ID转换的描述
假设配置转换后的CAN报文帧信息为“标准帧”,配置的帧ID1和ID0分别为“0x01和0x23”,串行帧数据为8字节,转换格式如图5所示。CAN消息的帧ID为0x0123(用户配置),帧信息为标准帧(用户配置)。串行帧中的数据将被转换为CAN消息,无需任何修改。
图5串行帧到CAN帧
假设CAN消息中的帧ID1为0x01,帧ID0为0x23,数据为0x12、0x34、0x56、0x78、0xab、0xcd、0xef、0xff,CAN消息和转换后的串行帧如图6所示。CAN消息的帧信息(0x08)转换为串行帧中的第一个字节(0x08),CAN消息中的ID:0x0123依次转换为串行帧中的第二个字节(0x01)和第三个字节(0x23)。CAN消息的数据字段将被转换为串行帧的数据部分,无需任何修改。
图6 CAN帧到串行帧
摘要
以上是串口到CAN透明格式的转换方式。稍后,我将添加透明带标签转换、自定义协议转换和moudbus转换。欢迎










