can - can操作库#
常量#
常量 |
类型 |
解释 |
---|---|---|
can.MODE_NORMAL |
number |
正常工作模式 |
can.MODE_LISTEN |
number |
监听模式 |
can.MODE_TEST |
number |
自测模式 |
can.MODE_SLEEP |
number |
休眠模式 |
can.STATE_STOP |
number |
停止工作状态 |
can.STATE_ACTIVE |
number |
主动错误状态,一般都是这个状态 |
can.STATE_PASSIVE |
number |
被动错误状态,总线上错误多会进入这个状态,但是还能正常收发 |
can.STATE_BUSOFF |
number |
离线状态,总线上错误非常多会进入这个状态,不能收发,需要手动退出 |
can.STATE_LISTEN |
number |
监听状态,选择监听模式时进入这个状态 |
can.STATE_TEST |
number |
自收自发状态,选择自测模式时进入这个状态 |
can.STATE_SLEEP |
number |
休眠状态,选择休眠模式时进入这个状态 |
can.CB_MSG |
number |
回调消息类型,有新数据写入缓存 |
can.CB_TX |
number |
回调消息类型,数据发送结束,需要根据后续param确定发送成功还是失败 |
can.CB_ERR |
number |
回调消息类型,有错误报告,后续param是错误码 |
can.CB_STATE |
number |
回调消息类型,总线状态变更,后续param是新的状态,也可以用can.state读出 |
can.STATE_TEST |
number |
自收自发状态,选择自测模式时进入这个状态 |
can.STATE_SLEEP |
number |
休眠状态,选择休眠模式时进入这个状态 |
can.init(id, rx_message_cache_max)#
CAN总线初始化
参数
传入值类型 |
解释 |
---|---|
int |
id, 如果只有一条总线写0或者留空, 有多条的,can0写0,can1写1, 如此类推, 一般情况只有1条 |
int |
rx_message_cache_max,接收缓存消息数的最大值,写0或者留空则使用平台默认值 |
返回值
返回值类型 |
解释 |
---|---|
boolean |
成功返回true,失败返回false |
例子
can.init()
can.on(id, func)#
注册CAN事件回调
参数
传入值类型 |
解释 |
---|---|
int |
id, 如果只有一条总线写0或者留空, 有多条的,can0写0,can1写1, 如此类推, 一般情况只有1条 |
function |
回调方法 |
返回值
返回值类型 |
解释 |
---|---|
nil |
无返回值 |
例子
can.on(1, function(id, type, param)
log.info("can", id, type, param)
end)
can.timing(id, br, PTS, PBS1, PBS2, SJW)#
CAN总线配置时序
参数
传入值类型 |
解释 |
---|---|
int |
id, 如果只有一条总线写0或者留空, 有多条的,can0写0,can1写1, 如此类推, 一般情况只有1条 |
int |
br, 波特率, 默认1Mbps |
int |
PTS, 传播时间段, 范围1~8,默认5 |
int |
PBS1, 相位缓冲段1,范围1~8,默认4 |
int |
PBS2, 相位缓冲段2,范围2~8,默认3 |
int |
SJW, 同步补偿宽度值,范围1~4,默认2 |
返回值
返回值类型 |
解释 |
---|---|
boolean |
成功返回true,失败返回false |
例子
can.timing(0, 1000000, 5, 4, 3, 2)
can.timing(0, 650000, 9, 6, 4, 2)
can.timing(0, 500000, 5, 4, 3, 2)
can.timing(0, 250000, 5, 4, 3, 2)
can.timing(0, 125000, 5, 4, 3, 2)
can.timing(0, 100000, 5, 4, 3, 2)
can.timing(0, 50000, 9, 6, 4, 2)
can.timing(0, 25000, 9, 6, 4, 2)
can.mode(id, mode)#
CAN总线设置工作模式
参数
传入值类型 |
解释 |
---|---|
int |
id, 如果只有一条总线写0或者留空, 有多条的,can0写0,can1写1, 如此类推, 一般情况只有1条 |
int |
mode, 见MODE_XXX,默认是MODE_NORMAL |
返回值
返回值类型 |
解释 |
---|---|
boolean |
成功返回true,失败返回false |
例子
can.mode(0, CAN.MODE_NORMAL)
can.node(id, node_id, id_type)#
CAN总线设置节点ID,这是一种简易的过滤规则,只接收和ID完全匹配的消息,和can.filter选择一个使用
参数
传入值类型 |
解释 |
---|---|
int |
id, 如果只有一条总线写0或者留空, 有多条的,can0写0,can1写1, 如此类推, 一般情况只有1条 |
int |
node_id, 节点ID, 标准格式11位或者扩展格式29位,根据id_type决定,默认值是0x1fffffff,id值越小,优先级越高 |
int |
id_type,ID类型,填1或者CAN.EXT为扩展格式,填0或者CAN.STD为标准格式 |
返回值
返回值类型 |
解释 |
---|---|
boolean |
成功返回true,失败返回false |
例子
can.node(0, 0x12345678, CAN.EXT)
can.node(0, 0x123, CAN.STD)
can.filter(id, dual_mode, ACR, AMR)#
CAN总线设置接收过滤模式,当can.node不满足需求时才使用这个,和can.node选择一个使用,过滤模式比较复杂,请参考SJA1000的Pelican模式下滤波
参数
传入值类型 |
解释 |
---|---|
int |
id, 如果只有一条总线写0或者留空, 有多条的,can0写0,can1写1, 如此类推, 一般情况只有1条 |
boolean |
dual_mode, 是否是双过滤模式,true是,false不是,默认是false |
int |
ACR, 接收代码寄存器值,必须写0xnnnnnnnn这样的格式,大端格式赋值到4个ACR寄存器上,默认值是0 |
int |
AMR, 接收屏蔽寄存器值,必须写0xnnnnnnnn这样的格式,大端格式赋值到4个AMR寄存器上,对应bit写0表示需要检测,写1表示不检测,默认是0xffffffff,不过滤全接收 |
返回值
返回值类型 |
解释 |
---|---|
boolean |
成功返回true,失败返回false |
例子
can.filter(0, false, 0x12345678 << 3, 0x07) --效果等同于can.node(0, 0x12345678, CAN.EXT)
can.filter(0, false, 0x123 << 21, 0x0001fffff) --效果等同于can.node(0, 0x123, CAN.STD)
can.state(id)#
CAN工作状态
参数
传入值类型 |
解释 |
---|---|
int |
id, 如果只有一条总线写0或者留空, 有多条的,can0写0,can1写1, 如此类推, 一般情况只有1条 |
返回值
返回值类型 |
解释 |
---|---|
int |
返回值见STATE_XXX |
例子
can.state(0)
can.tx(id, msg_id, id_type, RTR, need_ack, data)#
CAN发送一条消息
参数
传入值类型 |
解释 |
---|---|
int |
id, 如果只有一条总线写0或者留空, 有多条的,can0写0,can1写1, 如此类推, 一般情况只有1条 |
int |
msg_id, 节点ID, 标准格式11位或者扩展格式29位,根据id_type决定,默认值是0x1fffffff,id值越小,优先级越高 |
int |
id_type, ID类型,填1或者CAN.EXT为扩展格式,填0或者CAN.STD为标准格式 |
boolean |
RTR, 是否是遥控帧,true是,false不是,默认是false |
boolean |
need_ack,是否需要应答,true是,false不需要,默认是true |
string/zbuff |
data, 需要发送的数据, 如果是zbuff会从指针起始位置开始发送,最多发送8字节 |
返回值
返回值类型 |
解释 |
---|---|
boolean |
成功返回true,失败返回false |
例子
can.tx(id, 0x12345678, CAN.EXT, false, true, "\x00\x01\x02\x03\0x04\x05\0x6\x07")
can.rx(id)#
从缓存里读出一条消息
参数
传入值类型 |
解释 |
---|---|
int |
id, 如果只有一条总线写0或者留空, 有多条的,can0写0,can1写1, 如此类推, 一般情况只有1条 |
返回值
返回值类型 |
解释 |
---|---|
boolean |
是否读出数据,true读出,false没有读出,缓存已经空了,或者id不对 |
int |
消息ID |
int |
ID类型,1或者CAN.EXT为扩展格式,0或者CAN.STD为标准格式 |
boolean |
是否是遥控帧,true是,false不是 |
string |
数据 |
例子
local succ, id, type, rtr, data = can.rx(0)
can.stop(id)#
立刻停止当前的发送
参数
传入值类型 |
解释 |
---|---|
int |
id, 如果只有一条总线写0或者留空, 有多条的,can0写0,can1写1, 如此类推, 一般情况只有1条 |
返回值
返回值类型 |
解释 |
---|---|
boolean |
成功返回true,失败返回false |
例子
can.stop(0)
can.reset(id)#
CAN总线复位,一般用于从总线关闭状态恢复成主动错误
参数
传入值类型 |
解释 |
---|---|
int |
id, 如果只有一条总线写0或者留空, 有多条的,can0写0,can1写1, 如此类推, 一般情况只有1条 |
返回值
返回值类型 |
解释 |
---|---|
boolean |
成功返回true,失败返回false |
例子
can.reset(0)
can.deinit(id)#
CAN完全关闭
参数
传入值类型 |
解释 |
---|---|
int |
id, 如果只有一条总线写0或者留空, 有多条的,can0写0,can1写1, 如此类推, 一般情况只有1条 |
返回值
返回值类型 |
解释 |
---|---|
boolean |
成功返回true,失败返回false |
例子
can.state(0)
can.debug(on_off)#
CAN debug开关,打开后有更详细的打印
参数
传入值类型 |
解释 |
---|---|
boolean |
true打开,false关闭 |
return |
nil |
返回值
无
例子
can.debug(true)