由于同一片flash作业程序存储器的系统无法直接实现在系统编程(isp)。为了方便现场调试和程序升级,可以采用集成isp功能较新的mcu(如avr、部分arm芯片等),或者采用双flash设计等方法实现isp功能。但有不少系统仍然使用不具备直接isp功能的mcu(如m68k、n80c196等),由于印制版面积、成本等原因的考虑也没有采用双flash芯片,此类系统在程序升级时通常需要如编程器、仿真器等特定工具,在现场应用时不很方便。为解决这些系统的isp问题,本文以mc68332平台为例提出了一种通用的isp方案。
1 方法分析
对于使用m68k这类不具备isp功能的mcu系统,进行isp设计必须满足以下几个条件:
(1)程序空间和数据空间统一编址,程序可以在ram中运行;
(2)flash芯片正确连接了写信号;
(3)拥有能放下update程序并让其正常工作的额外程序/数据空间;
(4)具备某种通信能力(如以太网、串口、can、modem等);
满足了这四个条件,就可以按照本文的方法进行isp设计。针对自编程过程中文件出错、断电等特殊情况的容错程度不同,可以有如下两种方案。
1.1 方案1——自编程过程是安全可靠的,不会出现异常情况
这种情况相对简单一些,整个程序可以分为两个独立的部分完成,一是升级程序(称为update程序),它通过通信接口从主机接收程序数据到ram空间,并对数据进行crc校验以保证数据的正确性,在校验正确后将数据写到程序存储器的指定地址空间。如果ram空间较小,可以接收一页、校验一页、写入一页,分次完成。由于程序存储器写操作过程必须连续,不能被打断,所以update程序必须在链接时指定在ram地址空间运行。
另一部分是正常的程序(称为normal程序),这是正常编译的在程序存储器空间运行的程序,除了正常的工作之外它还需判断(通过通信命令或者查询一个输入状态等)是否应该转到升级模式,如果是,则将update程序复制到指定的ram空间并转去执行update程序。
程序完成需要将update和normal通过编程通过编程工具分别固公到程序存储器上的指定地址(注意:在固化第二个程序时不可损坏第一个程序内容),也可将两个文件合并,一次固化到程序存储器,update程序作为normal程序的数据信息而存在,如图1所示。这样正常运行时程序运行在normal部分,update程序得不到运行;在升级模式时normal程序把程序存储器中的update部分复制到其运行空间(ram)并执行。如果在自编程过程中出现灾难性故障,那么程序存储器旧的normal程序已经擦除而新的normal程序还未写入或者未完全写入,这都将导致程序存储器中的程序数据不再完整,此时必须用专用工具写normal程序,才能让系统可再次自编程。
1.2 方案——考虑自编程过程中的异常状况,做到做障保护
这种情况下需要把整个工作分为三部分完成,第一是引导程序(称为boot程序);第二是升级程序(update程序);第三是正常程序(normal程序)。boot程序负责控制程序的运行模式:升级模式、正常模式。如果进入升级模式,boot程序需要将update程序复制到指定的运行空间,并转入执行update程序;如果进入正常模式,boot需要做的工作就十分简单,可以直接把控制权交给正常程序。为了使各个程序可以单独调试,不要依赖其它程序来初始化硬件。update程序所要完成的功能与方案1中的相同,此时要注意update在自编程时不能破坏boot程序。此时normal程序不再负有复制update程序到指定运行空间的任务,完全按照正常的模式运行。
按照这种方案,boot程序和update程序是自编程设计的核心内容,只要保证这部分数据的完整性,就能拥有在线编程的能力,要在软件对这部分数据区进行保护,保证在第一次写入程序存储器后就不会再被擦除。这样即使在自编程时发生灾难性故障,boot程序和update程序是不会被破坏的,仍然可以继续运行,保证下次仍然可以进行自编程。
同样,程序完成后也必须分别固化到程序存储器的指定空间,以保证程序的正常运行,程序分布如图2所示。
2 在mc68332目标平台上的实现(采用方案2)
目标平台的基本配置如下:
cpu为mc68332,flash为512kb(am29f400b),ram为1mb,通信口为10mbps以太网。
在编写程序之前首先应该设计好程序在flash和ram空间的分布,按照方案2的思路考虑平台的硬件配置,具体设计如下:
(1)boot程序通过mc68332的一个i/o状态判定程序的走向;
(2)update程序通过以太网口采用tftp协议从主机接收程序并进行crc校验;
(3)flash具体分配如表1所示。
按照方案2,boot程序在系统复位后初始化flash、ram片选,把flash、ram映射到对应的地址空间,并通过mc68332的一个i/o状态判断应用进入何种运行模式。如果进入正常模式,boot程序通过从normal复位向量处取得pc值,转入相应的地址执行;进入升级模式,boot程序把update程序从flash地址0x00400s~0x10000复制到ram地址0x700000~0x710000中,然后把控制权转移给update程序。程序流程如图2。
update程序主要分为三大部分:(1)从网络接口接收主机中的normal程序,为了尽量减小程序的复杂性,采用tftp协议(tftp version 2,rfc 1350)从网络接收程序(这部分也可以通过其他方式,如串口、modem等实现);(2)解析出程序数据并进行校验,接收到的程序是motorola格式的s-record文件,必须按照s-record格式进行解析,得到程序数据并进行crc校验,保证程序的正常性;(3)写到flash中地址0x10000~0x80000,验证工作完成后把数据固化到flash中指定地址,重启并进入正常模式就可运行升级后的程序。程序流程见图4。
normal程序按照正常需要进行编写,必须链接到0x10000~0x80000空间运行。
这三个程序完成后,编写一个工具程序把三个程序合并到一个文件(注意地址空间的分配),然后利用编程工具烧写到flash片上,这样这个具备isp功能的系统就完成了。
该设计的实现方法简单,可以避免生产时不必要的物质和时间上的开销,同时也可以帮助提供更为简易、灵活、经济的现场服务,值得在嵌入式系统中推广使用。
Monterey项目正在引领混合云数据中心架构向更先进的方向转变
解答如何降低变压器的损耗
智能门锁行业聚齐各方势力 一定程度上加快了市场的洗牌
国产手机集体涨价:1999元,小米6还能脱颖而出吗?
2019年第三季度全球移动无线接入网络市场份额报告分析
基于MC68332平台的ISP设计方案
【工程师开发板使用测评】爱普特 APT32F110 ev board 功率计 实验评估F
手机QQ更新到 群聊三件套
多色LED的驱动设计方案
华为鸿蒙os2.0系统官网报名入口
整车五大域控制器测试
基于MSP430F149的控制模块VAC400的真空控制系统的设计
PD1.4转HDMI2.0转接线的拆解
BJT的传输特性,如何应用肖克利方程?
高压软启动器工作原理
苹果15寸入门级Macbook air将会被淘汰?这个消息有点突然
改进嵌入式系统开发的快速指南
室内led显示屏电源接地的重要性
苹果每年要给高通公司平均支付10亿美元表示难以接受
PCie固态硬盘使用须知