一种基于CAN总线的在线更新程序设备的研究

2024-12-09 00:00唐琳陈超王媛
汽车电器 2024年11期

【摘 要】信号传输包括UART串口通信、以太网通信以及CAN网络通信等多种方式。其中CAN网络通信由于其高安全性,常见应用于对系统稳定性及网络安全有所要求的系统,诸如航空电子、汽车电子、医疗仪器、军事工业、铁路轨道运输及重要的控制系统等。文章提出一种通过CAN总线通信在线升级软件程序的方式,主要以Microchip的dsPIC33CK256MP505为系统平台,通过ATA6579实现和CAN总线通信,并通过Bootloader+APP的形式实现软件的在线更新。

【关键词】CAN总线;单片机;在线升级;软件

中图分类号:U463.6 文献标识码:A 文章编号:1003-8639( 2024 )11-0031-05

A Study on an On-line Update Program Device Based on CAN Bus

【Abstract】Signal transmission includes UART serial communication,Ethernet communication and CAN network communication. Because of its high security,CAN network communication is commonly used in systems that require system stability and network security,such as avionics,automotive electronics,medical instruments,military industry,railway track transportation and important control 734d41ec59796fedfc14ed1e4d0a1410de2cf02c497f3d610dd177c514ad2a1bsystems. This paper proposes an online updating method of software program through CAN bus communication,which mainly uses Microchip's dsPIC33CK256MP505 as system platform,realizes the communication with CAN bus through ATA6579,and realizes the online updating of software through Bootloader+APP.

【Key words】CAN bus;single-chip computer;online upgrade;software

1 前言

工业互联网是一种以数据交换为基础,通过网络通信等技术,实现工业生产各个节点的智能化、互联化的新型工业类型。它通过网络通信将工业生产中的各个环节(如设备、生产线、供应商、物流等)连接起来,实现数据的共享和信息的交换,以达到提高生产率、降低成本、提升品质和高安全性的目的[1]。目前工业上采用的通信方式包括UART串口通信、LIN网络通信、以太网络通信以及CAN通信等。

1.1 网络通信的相关特点

1)UART串口通信是一种串行、异步、全双工通信,多用于芯片间近距离的网络通信。其中RS232和RS485是最常用的UART网络通信。

2)LIN网络通信是一种串行、异步、半双工总线,用于远距离通信;LIN总线成本较低,多用于实现汽车系统中的分布式电子系统控制[2],比如雨刮控制系统等。

3)以太网通信是一种交换机式通信,点对点的全双工通信,目前在工业互联网上大面积使用。

4)CAN网络通信,即控制器局域网络,是工业总线的一种。CAN与其他工业互联网通信总线相比,具有高可靠性、实时性快等特点,运用越来越广泛。工业互联网和汽车领域上大量使用CAN网络通信,其中在汽车领域完全采用CAN总线来实现汽车内部各个控制单元之间的数据通信[3]。

与RS232、LIN、以太网等通信方式不同,CAN通信采用CAN_H和CAN_L两条信号线构成差分信号,如图1所示。

1.2 CAN总线特征

1)数据以报文数据的形式进行发送和接收。只要总线处于空闲状态,CAN总线上的任意节点均可接收和发送报文,这是因为每个网络节点既可作为主机,又可作为从机。

2)若需对CAN网络系统扩展更多网络节点,无需对现有节点的软件和硬件做任何改变,只需直接增加所需节点即可。这是由于在CAN网络中进行信息路由时,每个节点无需使用任何关于系统配置的报文,而是由接收节点根据报文本身的信息来判断是否需要接收相关数据。

3)标识符(Identifier)是传送的报文所具备的特征信息内容,即本条报文本身所代表的特征。数据以广播方式在CAN网络上发送,总线上的任意节点都能接收到本条报文,每个节点需根据广播信息的标识符来判定该帧信息是否为自己需要接收的。

4)CAN数据的一致性是为了确保相关报文信息在CAN网络里能同时被任意节点接收或同时不被接收,而再同步功能和错误处理是实现CAN数据一致性的关键。

5)CAN网络传输速率需保持一致且固定,例如汽车上的CAN网络中的所有节点都采用500kb/s。

6)CAN报文中的标识符用于决定CAN网络中数据的优先权,标识符越小,优先权越高。

7)CAN网络仲裁(Arbitration)表示当CAN总线处于空闲状态时,任意节点都可向CAN总线发送报文。当出现2个以上多个节点同时发送报文时,会导致总线访问碰撞。而标识符的逐位仲裁则用来解决总线访问碰撞问题。当具有相同标识符的数据帧和远程帧同时发送时,数据帧的优先级高于远程帧。在仲裁期间,每一个发送节点都会对发送位的电平与被监控的总线电平进行比较,当电平相同时,该单元可继续发送;若发送的是隐性电平而监视到的是显性电平,那么这个单元就失去了仲裁,必须退出发送状态。

CAN控制器和CAN收发器是组成CAN网络硬件必备的两个模块。数据链路层的相关功能由CAN控制器完成,而物理层的相关功能则由CAN收发器来完成。如图2所示,控制器的MCU一般包含CAN控制器模块,比如Microchip的33CK系列。而CAN收发器一般是独立的芯片,比如Microchip的ATA6570,如图3所示。

传统更新控制器程序的方式通常是通过控制器上MCU的下载接口,比如JTAG。然而这种方式需要将整个控制器从系统中取出,甚至可能要去掉控制器外壳,然后在PC上使用编译器对控制器进行程序更新。这不仅导致更新效率低下,有的控制器有IP68等防尘防水要求,采用这样的更新程序方式还会破坏控制器的气密性。因此,需要采用其他方式进行程序更新。本文设计一种基于CAN总线的在线更新程序的设备,能提升传统更新程序的效率,同时保证气密性要求。

2 整体框架设计

如图4所示,整体电路分为5部分:CAN收发器、供电电路、MCU电路、串口屏幕电路设计和电平转换电路。其中,CAN收发器电路的主要作用是将CAN_H和CAN_L差分信号转换为MCU能识别的数字电平信号。供电电路是为CAN收发器和MCU以及其他器件提供电压的电路。串口屏幕电路可以看出是电脑的APP软件,通过串口屏上的控件将各种指令发送给MCU。而电平转换电路是由于MCU和串口屏的高电平幅值不一致而需要设计的。

2.1 CAN收发器电路

CAN收发器采用Microchip的芯片ATA6570。由于ATA6570没有供电功能,还需要选择LDO电路来提供电源。

ATA6570作为独立的高速CAN收发器,具有部分网络接口控制器区域网络(CAN)协议控制器和物理双线CAN总线功能,是专用的CAN收发器并运用于高速wKfbzVrw3b0FX3tYZskdZMpo7EavcFBePl5fHtEzR4A=CAN应用。ATA6570提供本地和增强的远程唤醒功能,具备SOIC和VDFN封装。它在待机和睡眠模式下的功耗非常低。除了通过WAKE本地唤醒引脚和远程唤醒模式符合ISO 11898-2:2016,ATA6570还支持ISO 11898-2:2016兼容CAN部分组网。它能够保持完整的控制单元ECU处于低功耗模式,即使存在总线流量,直到有效的唤醒帧被收到。它还具有看门狗(默认关闭)和串行外设接口(SPI)。VIO引脚允许将I/O电平自动调整到所连接的MCU的I/O电平。

图5为ATA6570 CAN收发器电路的原理图。D12为1个ESD管,用于EMC中的EDS测试。L5为CAN共模电感,C33和C34为滤波电容,滤除总线上的共模干扰。C30为差模电容,滤除总线上的差模干扰。R57和R63是2个60Ω的电阻,串联后构成120Ω的电阻,用于阻抗匹配。输入CAN总线接入ATA6570的CAN_H和CAN_L引脚。

ATA6570支持睡眠和唤醒功能。其中PIN9是外部唤醒引脚,而SDI、SDO和SCK是与MCU进行SPI通信的,用于完成特定帧的睡眠和唤醒。

2.2 供电电路

在控制器的CAN总线处于隐形电平(逻辑1)状态时,CAN_H与CAN_L的电压均为2.5V。然而,当处于显性电平(逻辑0)时,CAN_H的电压为3.5V,CAN_L的电压为1.5V,具体如图6所示。鉴于此,CAN收发器的CAN通信模块需要5V供电才能正常工作。同时,CAN收发器与MCU之间还存在通信需求,而这一通信过程中的逻辑高电平是与MCU的供电相关联的。此次方案所选择的MCU供电为3.3V,所以,为了满足CAN收发器与MCU的通信需求,CAN收发器的SPI模块还需要3.3V供电。

由于微控制单元MCU需要3.3V供电,而串口屏幕的供电则需要5V。综上所述,供电电路必须能够提供5V和3.3V的电压输出。通过选择低压差线性稳压器LDO即可达成输入12V,输出5V和3.3V的相关功能。选用Microchip的MCP1793能够实现输出5V和3.3V的电压。LDO电路见图7。

LDO的使能EN引脚与CAN收发器的INH引脚相连接。当CAN收发器处于正常的CAN通信状态时,INH引脚呈现高电平,此时LDO能够正常工作;而当CAN收发器处于睡眠模式时,INH引脚变为低电平,进而关闭LDO,以此降低控制器的功耗。至于2个LDO的输出都连接LED指示灯D13和D14,其目的是为了通过肉眼直观地识别LDO是否处于正常工作状态。

2.3 MCU电路

MCU是整个控制系统的核心,选择Microchip的dsPIC33CK56MP505,内部集成了CAN控制器模块,并与外部CAN收发器ATA6570共同实现了CAN总线的硬件数据收发功能。Flash的大小在MCU的选型中格外重要,最终选择256kB的容量来满足程序中除了应用程序还需要Bootloader刷写程序的需求。MCU电路设计如图8所示,其具体功能阐述如下。

1)外部晶振电路。尽管MCU自身具备内部晶振,然而在涉及到位同步的CAN数据收发过程中,因其对时序有着较高要求,故而需采用外部晶振。在图8中,Y1为外部陶瓷晶振。为确保晶振能够正常运作,起振电阻R24需为1MΩ。而C9和C15则是2个用于滤波的电容。只有当外部所连接的电容为与之匹配的电容时,振荡频率方能确保在标称频率附近的误差范围内。

2)接口电路。MCU的主要功能在于处理CAN报文数据,例如CAN应用层的程序,通过PIN37和PIN38与CAN收发器的TX和RX互连。CAN收发器除了具备处理平台的电平转换功能之外,还拥有模式转换功能,如Normal Mode可正常实现CAN通信的相关功能,而进入Sleep Mode后则会关闭CAN通信功能,此时静态电流可达到μA级别,从而降低芯片的功耗。这就需要MCU借助SPI通信与CAN收发器进行数据交换。MCU的PIN23、PIN24、PIN25、PIN26分别被配置为SS、SCK、SDO和SDI数据接口。MCU的最后一项功能是与串口屏幕进行数据交换,采用的是UART串口通信。将PIN35和PIN36配置为UART的TX和RX即可实现相关功能。

3)滤波去耦电路。需在MCU的每对电源引脚(例如VDD/VSS和AVDD/AVSS)上使用去耦电容,以增强MCU的抗干扰能力。电路中的C17、C18、C19、C20为去耦电容,其容值采用0.1μF(100nF),并且所选择的去耦电容ESR应尽量低。在进行PCB排版时,这些电容需布置在MCU需要滤波的引脚附近,尤其要注意去耦半径。

4)MCU上的5个LED灯是在调试程序时使用,起指示作用。MCU未使用的空引脚为防止外部干扰,需通过软件配置的方式下拉到GND,以降低I/O干扰风险。

2.4 串口屏幕电路

串口屏幕选择TJC1060X570电容式串口屏幕,采用UART RS232进行数据传输,比特率需要设置为9600b/s,供电电压为5V。具体串口屏幕接口参数见表1。

只需要将串口屏幕的接口通过接插件连接到控制器上即可实现相关电路设计。串口屏幕接口电路见图9。

2.5 电路转换电路

由于MCU是3.3V供电,而串口屏幕的供电为5V,两者之间的串口数据通信会因高电平不一致而引发问题,故而需要设计转换电路。将MCU发送的3.3V转换为5V,同时将串口屏幕发送的5V转换为3.3V。转换电路见图10,该电路采用2个NPN的三极管来实现相关功能。经精心设计,通过计算R38、R39的阻值,让NPN工作在饱和区,即可实现相关功能。

3 PCB排版和相关实物样件

按照要求顺利完成上述原理图设计之后,便需着手开展PCB的设计工作。PCB的设计包含布局与布线两个阶段。在布局方面,其基本原则是模块化布局,即将原理图中划分出的各功能子模块在PCB上进行大致的合理安排。需特别注意的是,滤波器件务必紧邻需要滤波的引脚放置,且本设计所涉及的器件数量较少,在进行布局时应尽可能考虑小型化设计,采用双面板的PCB排版方式具有较高的性价比优势。具体的PCB排版如图11所示,实物样件如图12所示。

4 软件设计

在线升级指通过让芯片运行特定的程序(Bootloader代码),将从通信渠道获取的数据(APP代码)写入芯片内存,以此来完成程序的更新。具体软件框架如图13所示。

其中,Bootloader亦被称作引导加载程序,是复位运行的一段代码,主要负责完成堆栈、系统时钟、中断向量的初始化工作,同时准备好C运行环境。它的另外一个作用是接收 APP代码数据,并将APP代码写入对应的User Flash区域,以此完成对APP代码的升级。Bootloader一般在出厂前就已烧写完成,出厂后通常不再进行更新,若需更新则需使用烧写器重新烧写。因此,Bootloader应尽可能精简,占用较小的空间,以降低出错率。应用代码,也就是用户自定义的代码,用户添加的与应用功能相关的代码都位于APP区域。它是独立于Bootloader的程序,与Bootloader占用不同的存储空间,且应用代码分配的存储空间应尽可能大。根据应用需求的变化,APP代码可能会不断更新,仅需通过在线升级便可完成APP的更新。需要注意的是,APP程序在任何时候都不能对Bootloader区的程序进行擦除、写入操作,否则可能致使引导程序无法正确运行,进而无法继续升级。

5 结论

本文以Microchip的dsPIC33CK256MP505作为系统平台,通过ATA6579实现和CAN总线通信,并借助Bootloader+APP的形式实现软件的在线更新。该设计不仅提升了传统更新程序的效率,也为相关领域的软件更新提供了一种可靠的实践模式。未来,可在此基础上进一步探索优化,以满足不断变化的应用需求和提高系统性能,为更广泛的应用场景提供有力支持,推动相关技术的持续发展和创新。

参考文献:

[1] 韩尧,陈振东,孙颋. 基于CAN总线的CPLD程序在系统更新技术[J]. 信息化研究,2022,48(6):46-51.

[2] 张乾乾,赵欣,杜振振,等. 基于CAN FD总线的制动控制单元在线程序更新的研究与实现[J]. 铁道车辆,2023,61(2):37-41.

[3] 银燕杰,唐琳. 一种基于LIN总线的在线更新程序设备的研究[J]. 电子制作,2022,30(21):69-72.