一、SLCAN协议
slcan 即serial line CAN interface driver (using tty line discipline)
通用标准协议参考:http://www.mirrorservice.org/sites/downloads.sourceforge.net/s/so/socketcan.berlios/SLCAN-API.pdf
SLCAN 帧的ASCII 描述如下:
<type> <id> <dlc> <data>
type的定义:
t => 11 bit data frame 标准帧
r => 11 bit RTR frame 带RTR的标准帧
T => 29 bit data frame ID扩展帧
R => 29 bit RTR frame 带RTR的ID扩展帧
id 为3个字节的ASCII Hex,扩展为8个字节的ASCII Hex。
dlc 一个字节的ASCII 数字 ('0'~'8')
data ASCII的16进制,个数为dlc。
例:
t1230 : can_id 0x123, can_dlc 0, no data
t4563112233 : can_id 0x456, can_dlc 3, data 0x11 0x22 0x33
T12ABCDEF2AA55 : extended can_id 0x12ABCDEF, can_dlc 2, data 0xAA 0x55
r1230 : can_id 0x123, can_dlc 0, no data, remote transmission request
二、SLCAN驱动
文件路径:linux/drivers/net/can/slcan.c
1. 串口线路规程
驱动初始化函数:slcan_init(void);
线路规程接口:tty_register_ldisc(N_SLCAN, &slc_ldisc);
slc_ldisc can操作定义如下:
static struct tty_ldisc_ops