历史上的今天
返回首页

历史上的今天

今天是:2025年02月17日(星期一)

正在发生

2018年02月17日 | 利用CAN总线的分布式嵌入式系统升级方案

2018-02-17 来源:eefocus

  前 言

  嵌入式系统具有智能化程度高、体积小、可靠性高、实时性强等诸多优点,已经越来越多地应用于消费电子、工业控制、汽车电子等各个行业。往往一个大的系统又由许多小的嵌入式系统共同构成,它们之间通过相互通信协同完成各种检测控制任务,构成分布式嵌入式系统。汽车电子系统中的车载GPS、倒车雷达、发动机控制、仪表盘系统等,数控机床中的键盘显示系统、马达控制系统等,这些无一不是嵌入式系统的具体应用。

 

  众多嵌入式系统的应用也为软件升级带来了诸多困难,主要有以下几点:

  ①这些系统分处于大系统的各个位置,单独对每个系统进行升级比较困难;

  ②某些系统为了满足保密和可靠性的要求,对系统进行了永久密封,只预留了通信和电源端口,这就更不可能单独对它进行升级。

  针对这些问题,本文提出一种利用CAN总线的分布式嵌入式系统升级方案,实现了多点、单点甚至全系统的升级,其他种类的通信端口与此类似。

  1 系统架构

  系统结构框图如图1所示。

a.JPG

    图1 系统结构框图

  整个系统由多个独立的完成一定功能的嵌入式模块、CAN总线和一个用于对整个系统进行升级的控制模块组成。其中,控制模块也可以是其中一个功能模块。在每个功能模块上安装有独立的引导程序,可以看作该模块的Bootloader,该引导程序永久固化在模块内,不随程序升级而升级。在该引导程序中嵌入CAN总线通信程序。正常工作情况下每个功能模块单独或通过CAN总线与其他模块协同工作。当需要对某个模块进行软件升级时,通过系统升级控制模块向该模块发送升级命令,该模块接收到命令后即跳转至引导程序,并等待系统升级模块发送升级数据,升级结束后再跳回至应用程序。

  2 系统实现

  2.1 在线升级的实现原理

  采用ST公司基于ARM Cortex-M3核心的32位嵌入式处理器STM32F103VC,其片上Flash为主存储区。应用程序代码是存储在闪存(Flash)中的(0x0800C3000~0x0807FFFF),而Flash是按Page来管理的,所以可以把Flash分成几个区域来使用。在本系统中将Flash分成两个区域,其中一个为前面提到的引导程序区,另外一个为应用程序区。Flash分区如图2所示。

b.JPG

    
    芯片上电后,STM32F103VC会自动跳转到0x08000000地址执行后面的程序。而一个工程的起始位置(也就是main函数的地址)具体映射到Flash的地址是可以设置的。在本系统的设计中,在Flash放了两个main函数。引导程序用于对应用程序的升级和上电后跳转至应用程序,应用程序则完成相应的模块功能。这两个区域通过特定的指令可以实现相互的跳转,并以此实现在线升级。
2.2 硬件系统
    STM32F103VC处理器具有高性能、低成本、低功耗等特点。该处理器片上外设丰富,具有多个系统定时器、CAN通信接口、USART通信接口、DMA等丰富的资源,并且借助于ST公司提供的固件库,可以很容易地对系统资源进行操作。该处理器集成了256 KB片上Flash和64KB片上SRAM,足以应对大多数任务。为实现CAN总线通信,只需要为STM32F103VC添加一片CAN驱动芯片进行电平转换。
    系统硬件结构框图如图3所示。

c.JPG

  2.3 软件系统

  为实现在线升级功能,首先需要编写引导程序,然后将它烧入Flash引导区中。为防止应用程序升级失败,在引导程序中需判断Flash指定位置是否有程序完好标志,该标志由完整的应用程序在每次上电后写入。应用程序可采用烧写方式和升级方式写入相应程序区。为实现引导程序和应用程序之间的相互跳转,采取指向函数指针的方式来实现。可以将Flash中的引导程序和应用程序作为两个普通函数,这两个函数的进入位置分别为0x08000000和0x08004000,然后在引导程序中设置一个指向函数的指针,其指针值为0x08004000;同理,在应用程序中设置一个函数指针,其值为0x08000000。这样在相应的程序中调用函数指针时就可以实现程序跳转。


  CAN总线采用多主竞争工作方式和非破坏性总线仲裁技术,总线上任意节点可在任意时刻主动地向网络上其他节点发送信息而不分主次,各节点之间实现自由通信。当多个节点同时向总线发信息时,优先级较低的节点会主动退出发送,而优先级较高的节点不受影响,从而大大节省了总线冲突仲裁时间,即使在网络负载很重的情况下,也不会出现网络瘫痪的情况。因此,适用于分布式监控系统的数据通信。由于CAN总线协议规范只定义了物理层和数据链路层,所以在实际应用中必须根据实际系统制定合适的应用层协议。本系统中根据数据传输要求自定义了几个应用层命令,分别是升级相关命令和数据收发校验相关命令,限于篇幅在此就不一一详述。

  3 软件升级过程

  软件升级包括升级控制模块部分和待升级模块部分。

  升级控制模块部分的工作过程为:向待升级模块发送升级命令,待接收到模块返回的确认标志后,再通过CAN应用层协议向待升级模块发送升级数据,升级完成后向待升级模块发送完成命令。

d.JPG

     待升级模块工作流程如图4所示。分为引导程序部分和应用程序部分,这两部分内容在开发的时候是作为两个独立的工程项目来完成的。

  为确保在线升级的安全性,在Flash指定位置设置了一个程序完好标志。由于Flash的擦写是按照Page进行的,所以这个标志即使只有一位也需占用一个Page的大小。本系统中将标志设置在Flash最后一个Page。如果应用程序区没有空余的Page来写入该标志,就要考虑换用更大Flash容量的产品或者外扩存储器。程序完好标志在应用程序进入的时候写入,在接收到升级命令时擦除。若在引导程序中检测该标志不合法,就一直处于升级状态,直到最后收到升级成功命令为止。

  程序跳转示例性跳转代码如下:

  typedef void(*pFunc)(vold); //自定义函数指针数据类型

  pFunc Jump_To_App; //定义一个指向应用程序的指针

  Jump_To_App=(pFunc)0x08004000;

  Jump_To_App();

  需要注意的是,在程序执行跳转代码前,需要关闭中断响应,以避免发生不可预测的异常。同时,当程序跳转前,需要将堆栈指针设置到相应的程序区域。

  结语

  通过CAN总线对分布式嵌入式系统进行在线升级非常具有代表性,随着越来越多的芯片集成了丰富多样的片上通信外设(如以太端口、I2C总线等),使得嵌入式系统的升级也具有更多样式,甚至可以通过公用网络(如因特网、GPRS等)进行远程升级。


推荐阅读

史海拾趣

CONTTEK Group GmbH公司的发展小趣事

CONTTEK Group GmbH公司深知品质是企业的生命线。因此,公司建立了严格的质量管理体系,从原材料的采购到产品的生产、检测、包装等每一个环节都进行严格把控。这种对品质的执着追求,使得公司的产品赢得了客户的广泛信赖和好评。许多知名电子企业都选择与CONTTEK Group GmbH公司建立长期合作关系,共同推动电子行业的发展。

Amphenol Nexus公司的发展小趣事

作为一家专注于电气元件和连接器制造的公司,Amphenol Nexus Technologies始终致力于技术创新和产品升级。公司投入大量资源用于研发,不断推出具有创新性和高性能的新产品。例如,在高速连接器领域,Amphenol Nexus Technologies成功研发出了112G高速背板连接器,这一产品满足了人工智能等前沿技术对高速传输的需求,为公司带来了新的增长点。

ATM [Advanced Technical Materials]公司的发展小趣事

在20世纪初期,电子技术和机械自动化的发展为ATM的出现奠定了基础。1939年,美国的Luther Simjian提出了ATM的设计雏形,并成功说服一家公司制作了样板试验产品。然而,由于当时的技术限制和公众接受度不高,这些早期ATM并未得到广泛应用。

Azoteq公司的发展小趣事

Azoteq公司成立于1998年,由Frederick Bruwer博士创立。作为一家无晶圆厂半导体公司,Azoteq从一开始就致力于开发创新的传感解决方案。其首个产品系列——LightSense™,是针对LED手电筒和穿戴头灯的智能控制而设计的。这一产品系列的推出,为Azoteq在半导体设计制造领域奠定了坚实的基础。

GE Sensing ( Amphenol Advanced Sensors )公司的发展小趣事

Azoteq公司成立于1998年,由Frederick Bruwer博士创立。作为一家无晶圆厂半导体公司,Azoteq从一开始就致力于开发创新的传感解决方案。其首个产品系列——LightSense™,是针对LED手电筒和穿戴头灯的智能控制而设计的。这一产品系列的推出,为Azoteq在半导体设计制造领域奠定了坚实的基础。

宇阳科技(EYANG)公司的发展小趣事

多年来,宇阳科技凭借其在MLCC领域的持续创新和卓越表现,荣获了多项荣誉。从2005年被国家商务部评为企业诚信度“双A”企业,到2008年国内首创的0201超微型MLCC开发成功并量产,再到2018年获中国电子学会科学技术奖科技进步类二等奖,宇阳科技的技术实力和市场地位得到了广泛的认可。

问答坊 | AI 解惑

大家帮忙看一下quartus中一些警告,谢谢了!!!

倒数第三行的警告大家可以不看,已经解决掉了, 大家帮忙看看其他的警告,谢谢了…

查看全部问答>

(高价)(高价)(高价)诚激高手开发:sock5全自动代理自助管理系统,有技术者加QQ详谈,99040008

(高价)(高价)(高价)诚激高手开发:sock5全自动代理自助管理系统,有技术者加QQ详谈,99040008…

查看全部问答>

用DWN烧写WINCE出现 BIN image invaildate !!

如题,我在用DWN烧写自己制定的内核时,就提示烧写的镜像不对。 我用的开发板是2440,7寸的。FLASH是SST39VF1601。 在厂家给的镜像里面就有NK_A70_128M.bin和NK_A70.bin,前者下进去可以,没问题,后面就不行了。 烧写VIVI的时候也是supervivi-1 ...…

查看全部问答>

uclinux上jffs2擦除错误求助

uclinux上挂载jffs2文件系统,eraseall 的时候失败。 CPU: S3C44B0X Flash: Am29lv160D MTD分区: 0x0~0x4ffff: u-boot, 0x50000~0x1effff: kernel & romfs, 0x1f0000~0x1fffff: user partition on jffs2 请问如下信息能说明什么问题?非常感 ...…

查看全部问答>

pb 4.2 实现注册表永久保存数据!

我在pb 4.2 中修改 platform.reg 如下: ; HIVE BOOT SECTION [HKEY_LOCAL_MACHINE\\init\\BootVars]         \"SYSTEMHIVE\"=\"Documents and Settings\\\\system.hv\"         \"PROFILEDIR\"=\"Doc ...…

查看全部问答>

STM8的EEPROM读写速度挺快的啊

STM8的EEPROM读写速度挺快的啊,经测试发现并没像datasheet说的那样一个字节6.6ms, 下载 (49.52 KB) 2010-10-9 11:08 我是单字节写的,似乎写N个字节都是6点几个ms,我是用示波器测得的 下载 (27.15 K ...…

查看全部问答>

请教链接段glue_7是做什么用的?

段glue_7是做什么用的?哪里能找到相关资料?…

查看全部问答>

哪位大侠帮忙看看这是什么问题

你们帮忙看看这个中断函数出了什么问题. #include <msp430x16x.h> void main(void) { WDTCTL=WDTPW+WDTTMSEL; //看门狗设为定时器模式 IE1 |=WDTIE; P1DIR |=BIT0; //P1.0为输出 _EINT(); while(1); } interup ...…

查看全部问答>

求freescale k40标准板的例程,本人新人,在此向各位前辈求助!!

freescale k40标准板的例程,本人新人,在此向各位前辈求助!!…

查看全部问答>