CAN总线功能介绍
CAN总线是博世公司1986年发明的用于汽车内部单片机电路板(ECU)之间通讯,硬件上使用2根线实现数据传输,CAN总线通讯单元不再是单个字节,而是一个数据包,这个数据包包含了数据长度,数据内容,目的地址ID,CRC校验等,相较于485,232通讯数据的组包是在软件实现的,CAN总线是硬件实现,编程时只要设置相关的参数即可.目前在车载通讯和工业通讯都使用的比较多.主要功能有:
- 不大于8字节应用报文实时通讯:控制灯光开关,天窗开关,空调控制等,涉及到具体的模块的实际业务逻辑
- 大于8字节的长报文通讯:读取故障码,软件版本,OTA等
Lua简介
Lua是一个文本脚本语言,1993年巴西人发明的,能嵌入到C,C++执行,即可以调用C/C++的函数,目前在游戏行业用的比较多.
C/C++为什么需要脚本语言
C/C++代码运行的时候已经由编译器编译成了二进制的机器码了,执行速度快.公司项目需求变化快,类似项目超级多,不同项目的核心功能基本不变的,只是业务逻辑的变化.如果全部用C/C++实现,一方面软件版本过多,不好维护。另一方面架构做的不够好时可能会造成改一个小功能,会造成核心代码修改.然而采用C/C++加脚本的架构实现有如下优势:
- C/C++实现核心功,框架搭建,脚本负责业务逻辑(C/C++的不同函数组合),设计之初就是朝着模型和业务分离的实现,自然地实现高内聚低耦合的架构。
- 便于团队分工,新员工比较快熟悉业务.
为什么是Lua
目前最火的脚本语言是Python,对此Lua有如下优点:
- Lua移植简单:Lua编译器是用标准C写的,比较容易集成到不同的编译器(Keil,gcc,qt等)。不像什么MicroPython只支持GCC编译器.
- 开销小:一般的Cortex M0及以上单片机都可以移植Lua编译,还有很大的一部分空间和时间运行C代码.
- 干净:不像Python运行还要安装其它的环境,Lua是寄宿在C/C++中的,不需要安装。
- 容易上手,学习成本几乎为零.只要公司开发个Demo,新人参考Demo就可以直接写Lua代码.
CAN用Lua做什么 - 自动化测试:C/C++提供发送接收报文 延时等函数接口,Lua组合发送不同的报文以及时序来验证ECU的各个功能是否正确,然后生成测试报告以及保存相关的通讯报文记录。
- OTA升级:现在新能源汽车的每个ECU都支持OTA功能,通讯组包使用ISO 15765-2协议实现,每个汽车主机厂都是一样的,只是安全访问 顺序可能有些差别.就像ZLG ZCAN Pro,CANOE都支持用户开发升级功能。ZLG的方式是:使用Dll实现,需要使用 VStudio,学习成本高.CANOE的方式是:他们自己弄了一套CAPL脚本语言,公司没有强大的实力是搞不出来的,这也是CANOE贵的原因之一吧!使用Lua的话,C/C++实现ISO 15765-2,HEX文件的解析和分割.Lua是调用发送接收接口,HEX文件读取,安全访问的密钥计算等.
Demo
C/C++的接口暴露给LUA:
lua_State* L;
static const struct luaL_Reg Iterface[]
{
{"send_data",LSendData}, //脚本里调用send_data字符串就可以调用到LSendData函数
{"get_rx_data",LGetRxData},
{"print",LPrint},
{"delay",LDelay},
{0,0},
};
void Lua_Init()
{
L = luaL_newstate();
luaopen_base(L);
luaL_setfuncs(L,Iterface,0);
}
Lua脚本业务代码
print('ECU功能测试')
--发送一帧数据唤醒单片机
send_data(0x431,0x30,0x32)
--延时50ms
delay(50)
--开天窗
send_data(0x38A,0x1)
delay(5000)
--关天窗
send_data(0x38A,0x1)
--ECU复位
send_data(0x880,0x11,0x1,0x67)
总结
Lua之于CAN就像html和英特网的关系一样,在新能源汽车发展如火如荼的今天,CAN的应用也越来越多,都有OTA升级的要求,Lua不仅在基于CAN系统的测试,升级方面也能够有自己的一席用武之地,在其它的Modbus之类的标准通讯也是可以使用Lua的.
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
CAN总线
+关注
关注
145文章
1942浏览量
130717 -
工业通讯
+关注
关注
0文章
60浏览量
11528 -
车载通讯
+关注
关注
0文章
10浏览量
7360
发布评论请先 登录
相关推荐
什么是CAN总线 CAN总线有什么作用
对多点及全局广播等几种方式传送数据,无需专门的调度。• CAN 总线的数据采用短帧结构,传输时间短,受干扰概率低,具有极好的检错效果。• CAN 总线采用 CRC 检验并可提供相应的错
发表于 12-13 14:26
CAN总线协议教程|CAN报文分析
功能,让每个节点对报文有选择性地做出响应。 总线使用不归零位填充。模块以线与逻辑连接到总线:如果只有一个节点向总线传输逻辑0,那么不管有多少
发表于 04-03 15:32
•1.4w次阅读
CAN总线的优点和应用领域有哪些
canbus光纤转换器是一种CAN总线网关,也就是实现CAN总线数据与其他数据之间相互转换的工具。为什么工程师们要开发这个东西呢?因为CAN
基于FPGA的CAN总线通信节点设计
节点的硬件接口电路。基于对CAN 总线控制器的功能分析, 并应用Verilog语言进行软件设计, 从而实现CAN节点之间的通信功能。 0 引
CAN总线最大能够带多少节点?CANFD相对于CAN2.0有哪些差异呢?
CAN总线最大能够带多少节点?CANFD相对于CAN2.0有哪些差异呢? CAN总线最大能够带多
can总线的故障波形有哪些
详细介绍CAN总线的故障波形及其原因和解决方法。 故障波形概述 故障波形是指在CAN总线通信过程中,由于各种原因导致的数据传输异常。故障波形的类型有
CAN总线测试工具的主要功能
CAN总线测试工具是用于测试CAN(Controller Area Network)总线通信的软件或硬件工具,其功能丰富且多样化。以下是
评论