摘 要:针对目前控制器局域网(Controller Area Network, CAN)总线技术通信速度较慢、带宽有限以及可扩展性差等弊端,利用车载以太网技术实现车内控制器与车联网控制单元T-Box的局域网通信,以实现数据的存储和收集。在嵌入式平台STM32F429VIT6移植FreeRTOS操作系统和LwIP网络协议栈,通过OTA技术完成系统软件的远程升级。测试结果表明:系统能够为用户实时提供汽车电池各项数据,系统响应指令的时间约为6 ms,且具有局域网内的OTA升级功能,实现了设计目标。
关键词:车载以太网;STM32;FreeRTOS;LwIP;OTA;局域网
中图分类号:TP29 文献标识码:A 文章编号:2095-1302(2024)04-00-05
DOI:10.16667/j.issn.2095-1302.2024.04.013
0 引 言
汽车的电子控制单元(Electronic Control Unit, ECU)在读取车内传感器数据后,通常采用CAN总线和车联网控制单元(Telematics-Box, T-Box)进行局域网通信,但如今消费者愈发重视汽车驾驶的安全可靠以及车内的娱乐化需求,汽车厂商不断扩展汽车内部集成的传感器,导致CAN总线与T-Box通信的带宽不足以匹配目前车内传感器数量[1],因而推动了以太网技术介入汽车内部网络的进程,车载以太网技术应运而生[2]。目前智能网联汽车的数据传输方式如图1所示。
以太网自1973年提出后,凭借其简单和易扩展性几乎取代了所有计算机局域网技术,并逐步运用在汽车环境中。使用车载以太网有助于在车内集成实时控制功能和非实时娱乐功能[3]。连接外部摄像头或传感器的ECU不但需要大带宽传输视频流等数据,而且其对延时要求严格,需要ECU有较好的实时性;负责安全功能的ECU,如:防抱死系统ABS、电动助力转向系统EPS,不仅要保证数据的延时与可靠性,而且要避免系统误操作造成驾驶事故;汽车的固件维护功能,如:OTA,需要保证更新速度合理并保障数据传输安全性,防止外部通信干扰更新过程。
本文在上述背景下,将文献[4]搭建的嵌入式硬件平台视为车载控制器,研究设计了图1中的局域网通信部分,将汽车电池的电压和温度参数借助车载以太网技术交付给T-Box收集和存储;T-Box下发命令指定控制器改变工作模式;控制器借助OTA技术完成系统软件无线升级。
1 车载以太网通信软件设计
车载以太网通信系统的硬件结构如图2所示。
MCU采用STM32F429芯片,并通过RMII接口与TJA1100连接。TJA1100通过MDI接口与网口连接,通过车载以太网转换器实现控制器与T-Box的通信。本文重点介绍系统的软件部分,硬件平台的详细设计请参考文献[4]。
1.1 通信软件的需求分析
从参数发送和数据接收2个方面分析通信软件定量与定性需求,汇总见表1所列。发送的参数要保证精度高,即传感器误差范围小;控制器接收指令后要保证实时性响应;通信软件应易于维护和管理,以便快速检测和修复程序中的
问题。
传感器误差范围是硬件指标,通过查阅温敏电阻XH-T106的RT表,在15~75 ℃范围内,XH-T106的误差为(0.62±0.29)℃,满足需求。
1.2 通信软件的整体结构
本文的车载终端以太网通信系统可分为硬件层和软件层,软件层可进一步细分为驱动层、操作系统层以及应用
层[5]。软件的分层架构如图3所示。
1.3 驱动层软件设计
驱动层包括以太网驱动模块、时钟模块、串口模块、ADC模块和I/O模块。
以太网驱动模块的初始化涉及硬件和软件配置。硬件配置包括通过上拉或下拉电阻,配置TJA1100为从模式、自主工作模式以及采用外接25 MHz晶振的RMII电路连接STM32。软件配置涉及在Reset引脚高电平条件下,通过TXEN引脚的上升沿触发TJA1100的工作模式切换。最后配置引脚为以太网功能,设置I/O模式为推挽复用,并配置以太网工作模式为100 Mb/s带宽传输、全双工通信和中断接收。
时钟模块设置分配器M系数为25,倍频器N为360,分频器P为2,可得系统时钟频率为180 MHz。
ADC模块在软件中设置ADC时钟频率为22.5 MHz,转换频率为1.5 MHz,配置对应有复用成ADC功能的I/O引脚模式为模拟输入模式。
串口模块在软件中设置串口波特率为115 200 b/s,并定义数据格式和收发模式,最后初始化串口的收发引脚TX
与RX。
1.4 操作系统层软件移植
1.4.1 FreeRTOS移植
为满足本系统发送数据以及接收指令的实时性要求,本文引入了支持多任务调度的嵌入式实时操作系统作为控制器软件层的关键组成部分[6]。官网获取FreeRTOS的V9.0.0版本源码包后,只需修改FreeRTOSConfig.h和stm32f4xx_it.c即可。前者是实现FreeRTOS功能可裁剪的关键,按照开发者的意愿自行剪裁操作系统;最后删除后者中重复定义的SysTick、PendSV、SVC中断函数即可完成移植。其他文件夹include、portable中RVDS、MemMang以及主路径下的若干.c文件对大多数编译器均适用,保留即可。
1.4.2 LwIP移植
LwIP的架构设计采用了模块化思想,将协议栈分解成多个独立模块,各模块之间采用API函数作为接口进行交
互[7]。在官网获取LwIP的V2.1.0版本源码包后,移植过程只需着重修改cc.h、sys_arch.h、sys_arch.c和lwipopts.h这
4个文件。
(1)修改cc.h中的临界区代码保护区域,主要是将保护与释放的宏定义修改成定义FreeRTOS中进出临界区的函数;
(2)修改sys_arch.h和sys_arch.c中信号量、互斥量和消息邮箱的定义[7]以及信号量等变量的处理函数;
(3)修改LwIP中有关定时和获取事件的函数,分别用于LwIP的延时以及为LwIP提供和FreeRTOS一致的时钟;
(4)依据工程需要,在opt.h定义的基础上修改lwipopts.h。
1.5 应用层软件设计
应用层包括3个模块6项任务。
1.5.1 采样任务模块
采样任务模块包括采样车载电池的电压和温度这2个任务。只需将ADC测量得到的电压转换成电池的电压/温度参数,最后借助FreeRTOS的消息队列资源将参数入列供其他任务读取即可。
1.5.2 UDP任务模块
UDP任务模块包括UDP接收、发送以及网络连接检测3项任务。
(1)UDP接收与发送任务
接收和发送任务的详细流程如图4所示。UDP接收任务在创建并初始化Socket编程接口后,连接T-Box的IP地址和端口号,即可通过recv()函数接收T-Box下发的指令,并对收到的指令进行临界区保护;UDP发送任务则依次获取接收任务传入的Socket数据和电池参数,并按顺序将电池数据发送给T-Box进行收集和存储。
(2)UDP网络连接检测任务
UDP连接检测任务需要事先和T-Box约定好,即当T-Box接收到特定字符串后,需要向对应IP地址的端口号返回一个ACK,具体模板如图5所示。
图6展示了UDP网络连接检测任务流程。为避免参数混淆,连接检测任务使用与发送接收任务不同的端口号。根据车内局域网和大带宽传输的网络环境,如果50 ms内接收到正确的ACK响应,则判断当前网络正常;否则视为网络已断开。
1.5.3 DHCP获取IP地址任务
获取控制器IP地址任务为启动DHCP服务[8],通过DHCP服务器获取IP地址、子网掩码和默认网关,并将获取的信息保存至lwipdev结构体。任务流程如图7所示。
2 系统OTA升级软件设计
OTA(Over The Air, OTA)是一种通过无线网络进行车辆软件更新的技术,可以远程升级汽车的软件和固件,提升功能和安全性。本文设计的OTA升级模块包括Bootloader启动程序和APP功能程序,其中Bootloader通过UDP协议接收并存储待更新的APP功能程序,然后将其烧录到FLASH芯片的指定地址,实现功能程序的版本更新。这种远程更新技术提高了用户体验,加快了软件新功能的推出,改善了车辆性能并解决了安全问题。
2.1 FLASH芯片介绍
STM32F4系列芯片内部的FLASH存储器分为4个存储区域,即主存储器、系统存储区、单次可编程(One-time Programmable, OTP)区域和选项字节。主存储区是用户最常使用的区,用于存储代码、常量以及初始化值不为0的全局变量,此区的结构为双块架构,总体容量为2 MB[9]。主存储区的起始地址为0x08000000,当单片机的Boot0和Boot1引脚均为低电平时,则从起始地址运行代码。
2.2 Bootloader软件设计
要将代码写入FLASH的各个扇区,需要了解FLASH写操作的原理和流程[9],而后规划FLASH存储Bootloader引导程序和APP程序的空间,空间划分如图8所示。本文选择将FLASH分为2段分别存储Bootloader程序和APP程序,留给APP程序较大的扩展区域,以供后续APP程序的功能延拓[10]。
本文的Bootloader程序借助UDP协议接收待更新的APP程序源码、烧录程序至FLASH芯片以及执行程序跳转。将Bootloader程序分成空闲态、跳转态以及升级接收态3种状态予以分析,如图9所示[10]。
Bootloader程序流程如图10所示。由于APP程序并非从FLASH起始地址存储,而是偏移了64 KB,因此APP程序的中断向量表同样须偏移以供程序查询中断服务程序位置,即APP程序从main函数起始处重设中断向量表
地址。
3 实验测试
图11是本次实验的实验平台实物,包括通信硬件平台、路由器、可调电源等设备,其中T-Box采用PC端的网络调试助手替代。
3.1 通信部分验证
手动设定取代T-Box的网络调试助手端IP地址192.168.1.11,端口号8089;通信硬件平台分配的IP地址192.168.1.30,通信应用端口号8089,检测连接应用端口号8090。通信网关为192.168.1.1,子网掩码255.255.255.0。
通信软件将监测的汽车电池的各参数按顺序发送给网络调试助手。由图12可知,汽车电池的电压/温度参数均可测量,网络调试助手能接收通信软件发送的参数内容。
本文设定了若干服务器下发给控制器的指令。在网络调试助手的消息发送栏发送对应指令后,通信平台会在短时间内及时响应并做出调整。图13即指令发送后,单片机执行命令的效果图。指令发送和响应的间隔时间为6 ms,定性分析本系统具有较好的实时性响应能力。
3.2 OTA无线升级验证
当Bootloader程序进入“升级接收态”,网络调试助手下发APP程序,Bootloader会接收程序源码并将源码写入FLASH芯片对应APP存储位置。完成FLASH烧录后,进入“跳转态”执行更新的程序。
4 结 语
研究设计了基于FreeRTOS的车载终端以太网通信软件,研究表明,此通信软件能够借助合适的电路结构检测车载电池的参数;参数误差、响应实时性和可维护性都达到了预期的设计指标,对车内控制器的设计提供了一定的参考和应用价值。
参考文献
[1]甄海川,牛玉娇,路哲,等.车载以太网通信开发及应用[J].汽车文摘,2022,60(1):40-44.
[2]呼布钦,秦贵和,刘颖,等.下一代汽车网络:车载以太网技术现状与发展[J].计算机工程与应用,2016,53(24):29-36.
[3] DAOUD R M,AMER H H,ELSAYED H M,et al. Ethernet-Based Car Control Network [C]// Conference on Electrical amp; Computer Engineering. IEEE,2007.
[4]邓亮.基于以太网的车用太阳能电池控制器研发[D].合肥:中国科学技术大学, 2023.
[5]周浩. 基于改进型实时内核与LwIP协议栈的智能抄表系统的设计与开发[D].南京:南京邮电大学,2015.
[6]刘林.基于FreeRTOS的智能插座管理系统的设计与实现[D].长沙:湖南大学,2015.
[7]董向阳.基于ARM的LwIP协议栈研究与移植[D].哈尔滨:哈尔滨理工大学,2009.
[8]汪赟.同一设备MAC地址自动配置多IP地址的设计与实现[J].福建电脑,2013,30(11):150-151.
[9]李露,谢映宏,许永军,等. STM32的FLASH轻量级坏块管理算法设计与应用[J].单片机与嵌入式系统应用,2021,21(8):40-43.
[10]文丰,温倩,武慧军.基于IAP的嵌入式系统在线编程设计[J].单片机与嵌入式系统应用,2022,22(12):37-41
收稿日期:2023-05-25 修回日期:2023-06-29
基金项目:江西省教育厅项目:稀土永磁磁浮列车虚拟编组自适应协同与避撞控制研究(GJJ2200847)
作者简介:彭圣凯(2000—),男,本科在读,研究方向为汽车电子控制系统。
韩树人(1983—),女,研究生,讲师,研究方向为网络化控制和嵌入式控制。