一、CAN消息
一帧CAN消息的通信协议如下:
其中,
id: CAN消息的标识符,通常是11bits
rtr: 0–消息帧,普通消息;1–远程帧,远程传输请求消息,这种类型的消息不能包含数据帧;
dn: 数据帧,一帧普通CAN消息包括0~8bytes数据
在CANOpen中需要自己实现CAN发送消息接口,类似如下代码:``
/********CAN接口函数 ********/
/*****************************
函数名称 : canSend
功 能 : CAN发送一帧消息
参 数 : notused --- 未使用
m ----------- 消息内容
返 回 值 : 0:失败 1:成功
*******************************/
unsigned char canSend(CAN_PORT notused, Message *m)
{
uint8_t i;
static CanTxMsg TxMsg;
TxMsg.StdId = m->cob_id;
if(m->rtr)
TxMsg.RTR = CAN_RTR_REMOTE;//远程帧
else
TxMsg.RTR = CAN_RTR_DATA;//消息帧
TxMsg.IDE = CAN_ID_STD;//标准消息类型
TxMsg.DLC = m->len;//数据帧长度,byte
for(i=0; i<m->len; i++)
TxMsg.Data[i] = m->data[i];//数据帧
if(xQueueSend(xCANSendQueue, &TxMsg, 100) != pdPASS)
{
return 1;
}
return 0;
}
二、CANOpen中的CAN消息
在CANOpen中的CAN消息形式如下:
在CAN帧中数据都是以低位优先(小端模式)的方式存放。例如,0x01020304应该按如下方式存放在CAN帧中:
其中,cobId用于表示CANOpen中消息类