0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

手把手教你 Air8000 模块 CAN 接口开发与配置实战全攻略

青山老竹农 来源:jf_82863998 作者:jf_82863998 2025-10-29 14:04 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

面对复杂多样的嵌入式通信需求,Air8000 模块的 CAN 接口开发尤为重要。本文以实战为导向,详细拆解 Air8000 模块 CAN 接口的开发流程与配置方法,从环境搭建到代码实现,再到实际测试,让你零基础也能轻松掌握,实现高效、稳定的数据通信。

一、CAN 概述

控制器局域网(Controller Area Network,CAN)是一种广泛应用于工业控制汽车电子等领域的实时通信协议,由德国博世公司于 1986 年提出并标准化(ISO 11898)。其核心采用多主(Multi-Master)总线架构,通过差分信号传输实现高抗干扰能力,支持节点间以广播形式进行高效、可靠的数据交换。CAN 协议基于非破坏性仲裁机制,利用报文 ID 优先级解决总线冲突,确保高优先级数据实时传输,同时具备完善的错误检测、帧校验和故障节点自动关闭功能,满足严苛环境下的安全性需求。典型应用包括汽车 ECU 通信(如动力总成、车身控制)、工业自动化(如 PLC 联网)及医疗设备互联,其衍生协议如 CAN FD(灵活数据率)进一步提升了带宽与灵活性,成为现代分布式控制系统的基础技术之一。

二、演示功能概述

本篇文章演示的内容为:用两种方式测试 Air8000 的 CAN 功能,第一种是使用 Air8000 整机开发板使用 CAN 连接 CAN 转 USB 工具,进行数据收发,第二种是使用 Air8000 整机开发板和 Air8000 整机开发板进行 CAN 功能的收发测试。

三、准备硬件环境

参考:硬件环境清单第二章节内容,准备以及组装好硬件环境。

3.1 Air8000 整机开发板

wKgZO2kBnqWAdp3JABISLO2QSWI283.png


3.2 高速 USB-CAN 分析仪

wKgZO2kBnt-AAP6OAAUT1yLhUpU980.png

3.3 硬件连接图

Air8000 整机板和 USB-CAN 分析仪链接图:

CAN 总线采用差分信号传输,由两根线组成:

CAN 采用差分信号传输,通过两根信号线(CANH 和 CANL)传输数据。两根线上的信号相位相反,即使存在干扰,接收端也能通过差值还原出原始数据。所以 CAN 接线可以不接 GND

wKgZO2kBnyKAZHq_AA4tDMbV1TQ545.png

Air8000 整机开发板和 Air8000 整机开发板连接图:

wKgZPGkBn2mAYCnnAAzMSAEjEvM621.png

四、准备软件环境

在开始实践本示例之前,先筹备一下软件环境:

1.Luatools 工具;

2. 内核固件文件(底层 core 固件文件):LuatOS-SoC_V2008_Air8000_VOLTE.soc;参考项目使用的内核固件;

3. luatos 需要的脚本和资源文件

gitee 下载地址:https://gitee.com/openLuat/LuatOS/blob/master/module/Air8000/demo/can/main.lua

LuatOS 运行所需要的 lib 文件:

使用 Luatools 烧录时,勾选 添加默认 lib 选项,使用默认 lib 脚本文件

准备好软件环境之后,接下来查看如何烧录项目文件到 Air8000,将本篇文章中演示使用的项目文件烧录到 Air8000 中。

五、代码 API 和代码解析

5.1 代码 API

can.init(id, rx_message_cache_max)

CAN 总线初始化

参数

wKgZO2kBn8GAL2AcAAA9vpHBmfQ897.png

返回值

wKgZPGkBn_CATXzfAAAVPU2g5C8939.png

例子

wKgZO2kBoBaAbwpNAAAfkfE5sbQ727.png


can.on(id, func)

注册 CAN 事件回调

参数

wKgZO2kBoFCAYpmbAAArgAyvz_E693.png

返回值

wKgZPGkBoHCATM6uAAAL_WXwSyU258.png

例子

wKgZO2kBoJCATmwhAABoPTevoRg524.png

can.timing(id, br, PTS, PBS1, PBS2, SJW)

CAN 总线配置时序

参数

wKgZO2kBoLqAJlU3AABwDns0kHA914.png

返回值

wKgZO2kBoPSAeM8vAAAVoCHspkM197.png

例子

wKgZPGkBoQiAFc46AABMtdWLm40137.png

can.mode(id, mode)

CAN 总线设置工作模式

参数

wKgZO2kBoS-ASf5kAAA2mnLW734122.png

返回值

wKgZO2kBoUqAP1GcAAAVjIpHHj0455.png

例子

wKgZPGkBoW6Ae6SUAAAt1FewUw4871.png

can.node(id, node_id, id_type)

CAN 总线设置节点 ID,这是一种简易的过滤规则,只接收和 ID 完全匹配的消息,和 can.filter 选择一个使用

参数

wKgZO2kBoZeARPgHAABfbaHju6g934.png

返回值

wKgZO2kBobeATRexAAAVjSTQuTE506.png

例子

wKgZPGkBoeCAfcsiAABR0snomZs458.png

can.tx(id, msg_id, id_type, RTR, need_ack, data)

CAN 发送一条消息

参数

wKgZPGkBog2ASWH8AAClwWBW68Y988.png

返回值

wKgZPGkBoieADDoPAAAVnUJVJl0568.png

例子

wKgZO2kBok6AZPXRAAfx7dQbfqM749.png

can.rx(id)

从缓存里读出一条消息

参数

wKgZO2kBonqAO6KmAAAjovhjxyU698.png

返回值

wKgZPGkBopOAUCJuAABSIWowwWM057.png

例子

wKgZO2kBouOACYOBAABUMhXyusI065.png

can.debug(on_off)

CAN debug 开关,打开后有更详细的打印

参数

wKgZPGkBowqAHIhQAAAWJKUD8Ik459.png

返回值

例子

wKgZO2kBoyuAFb-qAAAlH4iPqic187.png

zbuff.create(length,data,type)

创建 zbuff

参数

wKgZO2kBo1uAYdu8AABrMnImbYM297.png

返回值

wKgZPGkBpCGAZB0VAAAWOEp9u2Y582.png

例子

wKgZPGkBpEGAI-H_AAMDxkai9Is919.png

buff:set(start, num, len)

zbuff 的类似于 memset 操作,类似于 memset(&buff[start], num, len),当然有 ram 越界保护,会对 len 有一定的限制

参数

wKgZO2kBpGqAcnbTAAAuY5qHTmU334.png

返回值

例子

wKgZO2kBpI2AUWL2AADigHPmZdw689.png

buff:seek(base,offset)

zbuff 设置光标位置(可能与当前指针位置有关;执行后指针会被设置到指定位置)

参数

wKgZPGkBpLyAEgV1AAA1u1OMdJs623.png

返回值

wKgZPGkBpNaAfc8JAAAV5mJ6Zd4239.png

例子

wKgZO2kBpPSAUur_AAB7TnP29As615.png

mcu.x32(value)

转换 10 进制数为 16 进制字符串输出

参数

wKgZO2kBpR2ALndeAAAOp5rHFcI453.png

返回值

wKgZO2kBpTuATpmxAAAQzU88Cho485.png

例子

wKgZPGkBpVeAIdAUAABDwnURW8g188.png


5.2 常量值解释

wKgZO2kBpZSAeaFnAAE1UZyvW9Q821.png

5.3 代码解析

1.配置 SELF_TEST_FLAG 为正常收发模式,节点配置为 A 节点,对应的 rx 的 id 为 0x12345678,tx 的 id 为 0x12345677,代码里面使用的 id 为扩展帧,扩展帧和标准帧的区别:

CAN 协议中标准帧和扩展帧的主要区别体现在以下几个方面:

5.3.1 标识符长度与节点数量

1.标准帧

2.扩展帧

5.3.2 数据传输能力

标准帧数据长度限制为 8 字节,超过部分会被填充或忽略。

扩展帧数据长度可达 0-64 字节,通过分段传输(如 ISO-TP 协议)实现大容量数据传输。

5.3.3 控制字段差异

标准帧:6 位控制字段(如 DLC、R0、IDE 位)。

扩展帧:4 位控制字段(如 DLC、R1、IDE 位),部分功能由扩展标识符扩展。

配置了 STB 的 pin 用于不同硬件的控制,创建了 Zbuff 存储发送数据

wKgZPGkBphCADpaaAAH5xO2Cg7I873.png

2.初始化 CAN 总线,设置 id 和接收缓存消息数,注册 CAN 事件的回调函数,对 cb_type 进行对比,can.CB_MSG 为对有新数据写入缓存进行读取处理,can.CB_TX 为数据发送结束,需要根据后续 param 确定发送成功还是失败,can.CB_ERR 为有错误报告,后续 param 是错误码,can.CB_STATE 为总线状态变更,后续 param 是新的状态,也可以用 can.state 读出,然后对 can 总线的时序进行配置,代码里配置的是 1Mbps,然后根据上面的是否是自测模式的变量进行判断,如果是自测模式就使用 can.mode 配置 can 总线的工作模式为自测模式 can.MODE_TEST,如果是正常工作模式就配置为 can.MODE_NORMAL,本文档中使用的为扩展帧,配置节点 ID 为 CAN.EXT,如果要使用标准帧配置为 CAN.STD,其中 STB 的管脚,

关于 CAN_STB 信号:

1. 电源管理(待机模式控制)

低功耗模式:当系统需要进入节能状态时(如汽车熄火或设备待机),CAN_STB 信号可被触发(高电平或低电平,取决于硬件设计),使 CAN 收发器进入低功耗待机模式。此时,收发器停止正常通信以降低能耗。

唤醒功能:当需要恢复通信时,CAN_STB 信号状态切换(如拉低或拉高),将收发器从待机模式唤醒,重新激活 CAN 总线的数据传输。

2. 硬件控制

收发器启用/禁用:在某些 CAN 收发器芯片(如 TI 的 SN65HVD230)中,STB(Standby)引脚直接控制收发器的工作状态。例如:

STB = 高电平:收发器关闭,仅消耗微量静态电流

STB = 低电平:收发器正常工作,可收发 CAN 信号。

系统集成:在复杂系统中,CAN_STB 可能由主控制器(如 MCU)输出,协调多个 CAN 节点的电源状态,优化整体能耗。

3. Air8000 整机开发板设计

注意!Air8000 整机开发板,CAN_STB 信号是直接引出来的,所以需要控制 GPIO 的电平拉低:

STB 为低电平是正常工作,所以需要手动把 gpio27 也就是 CAN_STB 拉低才可以

wKgZPGkBpnqAG2sjAATv65gi_ik816.png

3.设置循环定时器,2 秒钟发一次数据,根据节点判断是 A 节点还是 B 节点打印节点发送信息,设置 test_cnt 计数器,每发送一次 +1,>8 的时候,设置为 1,然后使用 tx_buf:set(0,test_cnt)函数,把 buff 里面的内容设置成从索引 0 开始,连续 8 个字节被填充为 test_cnt,因为 zbuff 创建空间位 8,所以是 8 个字节,然后利用 tx_buf:seek 把光标位置设置为 test_cnt 的值,比如:填充完之后内容为 01 01 01 01 01 01 01 01,设置第一个光标的值设置完为 01,设置第二个光标为 01 01,然后利用 can.tx 发送内容,其中有涉及到是否需要应答的机制,can.tx 的第五个参数,need_ack

其中该机制为:

CAN 协议中的应答机制是其核心可靠性保障措施之一,主要通过以下方式实现:

1、应答机制的核心组成

ACK 应答位

应答间隙(ACK SLOT)

应答界定符(ACK DELIMITER)

2、应答机制的工作流程

数据传输

发送节点发送数据帧后进入等待应答状态,总线进入仲裁阶段。

仲裁与应答

错误处理

wKgZO2kBpsSAQi0PAAIPYYt4Uzw937.png

六、运行结果展示

6.1 完整代码

wKgZO2kBp0GAXpI1AAvl02uyf3M834.png


6.2 结果展示

wKgZPGkBp3GAaeapAAVSaw-GtjY900.png

使用两个 Air8000 整机开发板测试结果:

wKgZO2kBp5WAfFuSAAXdKxRsds0192.png

一个开发板为节点 A,一个开发板为节点 B,互相发送数据接收对方的数据。

七、总结

本文演示如何在 Air8000 整机开发板上面,用 CAN 接口,使用 USB 转 CAN 工具进行数据的收发,然后使用 Air8000 整机开发板和 Air8000 整机开发板两个开发板把 CAN 接口进行互连,进行双方数据的互发互收的演示。

八、常见问题

1.如何判断模块是否正常,如何自测?

如果有 CAN 收发器的情况下,直接设置为 can.mode(can_id, can.MODE_TEST)测试然后日志提示发送成功,则表示模块端的 CAN 接口功能均正常。如果发送失败,则需要短接模块的 CAN_TX 和 CAN_RX,测试是否发送正常,如果发送正常,证明模块这两个脚是是没有问题的,测量下 STB 的电平是否是低,如果为高,则需要代码里面设置对应的 gpio 拉低。

九、硬件电路说明

Air8000 CAN 硬件电路说明:https://docs.openluat.com/air8000/luatos/hardware/design/can/


今天的内容就分享到这里了!


审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 接口
    +关注

    关注

    33

    文章

    9603

    浏览量

    157645
  • CAN
    CAN
    +关注

    关注

    59

    文章

    3097

    浏览量

    473548
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    迅为驱动开发实战:iTOP-RK3568开发板eDP屏幕移植全攻略

    迅为驱动开发实战:iTOP-RK3568开发板eDP屏幕移植全攻略
    的头像 发表于 12-30 15:42 1287次阅读
    迅为驱动<b class='flag-5'>开发</b><b class='flag-5'>实战</b>:iTOP-RK3568<b class='flag-5'>开发</b>板eDP屏幕移植<b class='flag-5'>全攻略</b>

    GPS设计全攻略

    电子发烧友网站提供《GPS设计全攻略.pdf》资料免费下载
    发表于 12-01 17:10 0次下载

    医疗电子EMC整改:原理到实战的系统化全攻略策略

    深圳南柯电子|医疗电子EMC整改:原理到实战的系统化全攻略策略
    的头像 发表于 11-27 09:45 1087次阅读

    【迅为RK3568开发板NPU实战】别再闲置你的NPU!手把手教你玩转RKNN-Toolkit2 的使用

    【迅为RK3568开发板NPU实战】别再闲置你的NPU!手把手教你玩转RKNN-Toolkit2 的使用
    的头像 发表于 11-11 14:21 1549次阅读
    【迅为RK3568<b class='flag-5'>开发</b>板NPU<b class='flag-5'>实战</b>】别再闲置你的NPU!<b class='flag-5'>手把手</b><b class='flag-5'>教你</b>玩转RKNN-Toolkit2 的使用

    Air8000 模块 CAN 接口实战开发:从入门到配置的完整流程指南

    Air8000 模块 CAN 接口开发配置流程,涵盖硬件连接、驱动移植、参数设置及调试技巧
    的头像 发表于 10-29 14:05 665次阅读
    <b class='flag-5'>Air8000</b> <b class='flag-5'>模块</b> <b class='flag-5'>CAN</b> <b class='flag-5'>接口实战</b><b class='flag-5'>开发</b>:从入门到<b class='flag-5'>配置</b>的完整流程指南

    一招破解音频硬件困局:Air8000参考设计让开发零门槛

    音频产品开发成本高、周期长?Air8000参考设计以模块化思路简化硬件开发,预验证的电路方案与丰富的扩展接口,让
    的头像 发表于 09-04 15:17 1189次阅读
    一招破解音频硬件困局:<b class='flag-5'>Air8000</b>参考设计让<b class='flag-5'>开发</b>零门槛

    BLE 5.4时代下,Air8000蓝牙通知与手机读写操作实战攻略

    随着BLE 5.4的普及,Air8000模块蓝牙通信性能再升级。本篇将从实战角度出发,讲解如何通过Air8000发送设备通知,以及如何利用手机APP对从机设备进行数据读写,助你高效完成
    的头像 发表于 08-13 15:31 1094次阅读
    BLE 5.4时代下,<b class='flag-5'>Air8000</b>蓝牙通知与手机读写操作<b class='flag-5'>实战</b><b class='flag-5'>攻略</b>

    揭秘Air8000对讲黑科技:AirTalk+MQTT开发示例深度解析

    Air8000的AirTalk对讲方案如何实现设备间无缝通信?答案藏在MQTT协议的高效架构中。本文通过完整开发示例,层层剖析代码逻辑:从初始化Air8000模块到MQTT主题
    的头像 发表于 08-06 17:16 979次阅读
    揭秘<b class='flag-5'>Air8000</b>对讲黑科技:AirTalk+MQTT<b class='flag-5'>开发</b>示例深度解析

    是否必须使用LuatIO?Air8000 GPIO配置与设计规范深度解析

    Air8000的GPIO应用开发中,LuatIO的角色至关重要。本文剖析其必要性,结合设计注意事项,为开发者提供从配置到优化的全流程指南。 想要4G+GNSS+WiFi+BLE+TT
    的头像 发表于 07-29 13:54 697次阅读
    是否必须使用LuatIO?<b class='flag-5'>Air8000</b> GPIO<b class='flag-5'>配置</b>与设计规范深度解析

    从零到一:基于Air8000的LuatOS softAP配网功能开发教程

    对于开发者而言,快速实现设备的无线网络配置是项目落地的重要一步。本文以Air8000为核心载体,手把手教学如何基于LuatOS系统开发sof
    的头像 发表于 07-21 17:32 712次阅读
    从零到一:基于<b class='flag-5'>Air8000</b>的LuatOS softAP配网功能<b class='flag-5'>开发</b>教程

    LuatOS蓝牙配网开发全攻略:以Air8000为核心实战教学

    聚焦Air8000核心板的蓝牙配网功能,本文整合开发全流程:硬件准备、脚本编写、固件烧录及测试验证,为开发者提供一站式解决方案。 一、蓝牙配网概述   文章开篇先简单介绍下 Air8000
    的头像 发表于 07-10 17:17 775次阅读
    LuatOS蓝牙配网<b class='flag-5'>开发</b><b class='flag-5'>全攻略</b>:以<b class='flag-5'>Air8000</b>为核心<b class='flag-5'>实战</b>教学

    Air8000蓝牙扫描实战:从代码解析到场景应用全攻略

    Air8000蓝牙扫描技术的开源,让观察者模式的实战开发变得透明高效。通过拆解示例代码,开发者能快速掌握如何注册监听、处理事件回调,进而将其应用于智能门锁管理、蓝牙资产追踪等场景,实现
    的头像 发表于 07-06 16:50 710次阅读
    <b class='flag-5'>Air8000</b>蓝牙扫描<b class='flag-5'>实战</b>:从代码解析到场景应用<b class='flag-5'>全攻略</b>

    多功能+高扩展能力加持,Air8000开发板最新资料

    ”,尤其适合需要通信、控制、数据采集的场景,如:远程监控、智能终端等。 一、开发板主要配置 Air8000开发板基于Air8000多功能工业
    的头像 发表于 06-09 14:18 897次阅读
    多功能+高扩展能力加持,<b class='flag-5'>Air8000</b><b class='flag-5'>开发</b>板最新资料

    技术篇——Air8000开发板,一站式满足多功能高扩展开发需求!

    对于追求高效开发的你来说,Air8000开发板最新资料库的开放绝对不容错过。无论是智能控制、数据采集还是多场景应用开发,其多功能内核与高扩展接口
    的头像 发表于 06-04 15:59 748次阅读
    技术篇——<b class='flag-5'>Air8000</b><b class='flag-5'>开发</b>板,一站式满足多功能高扩展<b class='flag-5'>开发</b>需求!

    手把手教你如何调优Linux网络参数

    在高并发网络服务场景中,Linux内核的默认网络参数往往无法满足需求,导致性能瓶颈、连接超时甚至服务崩溃。本文基于真实案例分析,从参数解读、问题诊断到优化实践,手把手教你如何调优Linux网络参数,支撑百万级并发连接。
    的头像 发表于 05-29 09:21 1206次阅读