离线加密编程器中的 BootLoader程序设计

发布者:qinghong最新更新时间:2009-02-07 来源: 单片机与嵌入式系统 关键字:离线加密编程器  ATmega  单片机 手机看文章 扫描二维码
随时随地手机看文章

引 言

      离线加密编程器是一种独立于PC机,并通过SPI接口直接对ATmega系列单片机进行编程操作的设备。在整个系统中,编程器与目标板之间的结合部分是一个最可能被解密的地方,因为可以通过抓取SPI总线上的时序得到所传输的数据,因此编程器与目标板之间传输的数据必须是经过加密的。而有效的编程数据不能为加密数据,所以加密数据需要经过解密还原才能用于单片机的编程。本设计中BootLoader程序的作用就是接收离线加密编程器的加密数据,对加密数据进行解密,然后完成目标板的编程操作。首先编程目标板单片机的BootLoaoler引导程序,最后与BootLoacler程序建立连接。编程器将加密数据传送给。BootLoader程序,由BootLoacler程序对加密数据进行解密,然后完成编程操作。这样做既可以确保数据不被外界破解,又能方便程序的升级操作。BootLoader程序的下载对具有知识产权保护要求的离线编程器设计是一个关键步骤,它的成功与否直接决定离线编程器设计能否成功。本文将以ATmegal69为例进行BootLoader程序下载的介绍。


1 系统硬件设计

      本系统主要由单片机、显示部分、按键开关、存储部分和串行通信部分等组成,硬件结构框图如图1所示。

      图1中,AVR ATmegal69P(V)单片机是一种高性能、低功耗的8位微处理器,采用先进的RISC结构,130条指令大多数可以在1个时钟周期内完成,满足了本系统对执行速度的要求。它具有非易失性的程序和数据存储器,16 KB的系统内可编程Flash,具有4×25段的LCD驱动器的ATmegal69P(V),输入电压3.3 V,串行US—ART,可工作于主机/从机模式的SPI串行接口;存储部分采用ATmel公司8个引脚的串口存储芯片AT45DB041B,主存容量大小为528 KB,一共2 048页,每页264B,具有2个大小为265B的数据缓存,允许通知对存储芯片进行读写,工作电压为3.3 V。由于系统单片机的SPI通信口用来对目标板进行编程,所以采用软件模拟SPI对AT45DB041B进行读写;其通信部分分为与PC机的通信和与目标板的通信。与PC机的通信采用USB接口,编程器内部采用UART—USB转换桥芯片PL一2303,在编程方式上等同于一个普通的UART接口,非常方便;与目标板的通信是通过高速的SPI接口,达到对目标板的编程操作;采用双键制按键开关,其中按键之一用来查询下载器的各种信息,另外一个按键用来启动对目标板的下载操作;为了充分利用ATmegal69P(V)具有LCD驱动器的特点,采用段式LCD屏,可以缩小下载器的体积,操作方便。

2 工作原理

2.1 几个概念

      ①开发方:设计IP的开发单位或个人。

      ②IP拥有方:拥有离线加密编程器的知识产权方。

      ③客户:离线加密编程器的使用者,需向IP拥有方购买离线加密编程器的各种软硬件资源。

2.2 三方关系

      开发方负责开发离线加密编程器的各种软硬件,然后向IP拥有方提供各种所需的软硬件资源,包括编程器硬件、上位机软件,并且根据IP拥有方的要求编写目标板的程序。IP拥有方将软硬件卖给客户,客户使用IP拥有方提供的与编程器相关的软硬件对目标板进行编程操作。开发方提供给IP拥有方的适合目标板的程序是未经过加密的,IP拥有方通过上位机软件,自由选择加密参数,对未经过加密的程序进行加密。客户购买到离线加密编程器后,可以选择某一IP拥有方,并在选择的IP拥有方处进行注册。购买授权下载次数,通过客户端软件将加密编程器进行授权,此时,加密编程器具备了下载功能。客户根据自己的要求向自己注册过的IP拥有方提出目标板软件购买意向,IP拥有方将客户要求告知开发方,开发方根据要求进行软件的编写。软件编写成功后,开发方将软件交给IP拥有方,IP拥有方将软件进行加密,并交给客户,客户通过客户端软件将加密过的程序存储到加密编程器。此时,客户手中的加密编程器可以脱离PC机。客户将编程器带到现场对目标板进行编程,直到授权下载次数用完为止。授权次数使用完毕后,客户可以通过客户端软件提取加密编程器的授权购买请求文件,通过网络将文件传给IP拥有方,IP拥有方根据文件的内容进行相应的授权操作,然后将生成的授权文件通过网络回传给客户,客户通过客户端软件将授权文件下载到加密编程器,如果授权成功,那么编程器可以继续使用。

2.3 文件类型

      整个工作过程涉及以下几种文件:

      ①加密下载文件:该文件是HEX文件经过加密后得到的文件,其中包含密钥信息和编程数据。

      ②注册申请文件:该文件包含申请注册所需编程器的内部信息及客户信息。

      ③注册文件:该文件是在注册申请文件的基础上,IP拥有方添加注册信息,包括各种参数。

      ④授权申请文件:该文件用来向IP拥有方购买授权下载次数,内容包括编程器信息、客户信息,以及交易达成的各种协议。

      ⑤授权文件:该文件在授权申请文件的基础上添加授权次数及说明。

      注:其中注册申请文件、授权申请文件是通过客户端软件从编程器中提取的;注册文件、授权文件通过客户端软件下载到编程器。

3 编程器工作流程

      编程器的工作流程如图2所示。下载到编程器的加密数据需要存入具有SPI接口的大容量外存AT45DB041B中,然而Atmegal69P(V)的SPI接口需要用来对目标板进行编程,所以只能采用软件模拟SPI接口来对AT45DB041B进行读写操作。对目标板进行编程时,为了防止通过抓取SPI接口的时序来得到有效的编程数据,首先编程目标板的引导程序,然后对目标板下载加密数据,通过引导程序对数据进行解密后再进行目标板的编程操作。这样做的好处是,通过数据加密,使得SPI总线上传输的数据均为加密信息,即使得到SPI总线上的时序,也不能使用。目标板的BootLoader程序将接收到的加密数据进行解密,然后将数据存储。这些操作都在单片机内部进行,不会被破解。

3.1 主程序

      主程序要完成系统的初始化、中断设置、全局变量设置等。在初始化结束后,系统进入主查询循环过程以判断当前进行的操作,并进入相应的功能模块。系统主程序流程如图3所示。

3.2 编程器与目标板的通信

      编程器通过SPI总线与目标板建立连接。当进行目标板的编程时,首先编程目标板的BootLoader区引导程序。引导区程序编程完毕后,编程器与目标板进行通信,将加密数据传送给目标板。目标板的BootLoader程序接收到加密数据后进行CRC校验。如果校验失败,Boot—Loader要求编程器重新发送数据;如果校验通过,对加密数据进行解密,然后写入Flash。编程器与目标板通信流程如图4所示。

4 BootLoader编程设计

4.1 BootLoader。介绍

      BootLoader区位于单片机内部Flash的最高地址,BootLoader存储器空间的大小可以通过熔丝位进行配置。BootLoader为通过MCU本身来下载和上载程序代码提供了一个真正的同时读一写自编程机制(Read—While—Write,RWW)。这一特点使得系统可以在MCU的控制下,通过驻留于程序Flash的BootLoader,灵活地进行应用软件升级。BootLoader可以使用任何器件具有的数据接口和相关的协议获得代码并把代码(程序)写入闪存,或者是从程序存储器读取代码。BootLoader区的程序可以操作整个闪存,包括BootLoader区,因而BootLoader可以对其自身进行修改,甚至将自己擦除。如果系统已经不再需要BootLoader,则可以通过指令控制BootLoader程序,将BootLoader区擦除。

4.2 BootLoader区程序的设计思想

      由于目标板上AVR单片机种类的不同,所包含的头文件也不尽相同,而且BootLoader区的大小也是根据目标板的不同而不同,所以存储芯片中BootLoader程序代码要满足当前主流的AVR单片机的需求。另外由于存储芯片容量大小的限制,要求引导程序要短小精炼。

      编程BootLoader区的一个重要的内容是熔丝位的编程,熔丝位编程出错可能导致编程的失败。写SPIEN为“1”,导致编程器与目标板无法建立连接;写RSTDISBL为“O”,将导致复位引脚失效;写CKSEL熔丝位出错,将导致内外部晶振的选择混乱,从而导致编程失败。

      BootLoader程序编程步骤:

      ①配置BOOTSZl和B00TSZ0熔丝位,设定Boot—Loader区的大小:

      ②配置BOOTRST熔丝位,芯片上电启动的设定从BootLoader区的起始地址处开始,即每次上电复位后,首先从BootLoader区起始位置开始运行。

      ③下载BootLoader程序的HEX文件。下载时要注意BootLoader区的起始位置。

      ④设置的Boot锁定位,保护BootLoader不被破坏,使其只能通过芯片擦除命令清除BootLoader区的程序。

5 BootLoader程序的下载

      编程器外存中存储适合各种型号AVR单片机的BootLoader源代码。在下载BootLoader程序之前,首先在编程器外存中找到适合目标板单片机型号的Boot—Loader程序,然后下载到目标板。主要设计问题是数据的传输、熔丝位和锁定位的编程、Flash的读写。

5.1 实 例

      本设计采用串行编程模式,串行接口包括RESET、SCK、MOSI(输入)及MISO(输出)四条线。当RESET为低电平时,可以通过串行SPI总线对Flash进行编程,应在执行编程或擦除操作之前执行编程使能指令。下面以ATmegal69为例,给出一个实际的程序。


      首先对SPI接口进行初始化SPI_MasterInit(),并使能操作SPI_Enable(),然后擦除Flash页SPI_Erase(),进行Flash的页写操作program_bootloader(),再写熔丝位SPI_WriteFuse和写锁定位SPI_WriteLock,最后进行复位操作SPI_Over()。

5.2 串行编程应遵循的步骤

      ①上电过程:在RESET及SCK为0时,向VCC及GND供电。在一些系统中,编程器不能保证在上电时SCK保持为低。在这种情况下,SCK拉低之后应在RESET加一正脉冲,而且这个脉冲至少要维持2个CPU时钟周期。

      ②上电之后等待至少20 ms,然后向MOSI引脚输入串行编程使能指令以使能串行编程。

      ③通信不同步将造成串行编程失败。同步之后,在发送编程使能指令的第3个字节时,第2个字节的内容(0x53)将被反馈回来。不论反馈的内容正确与否,指令的4个字节必须全部传输。如果0x53未被反馈,则需要向RESET提供一个正脉冲以开始新的编程使能指令。

      ④Flash的编程以一次一页的方式进行。页的大小为128字节。在执行加载程序存储页指令时,通过6位的地址信息,数据以字节为单位加载到存储页。为保证加载的正确性,应先向给定地址传送数据低字节,之后是高字节。程序存储页通过地址的高8位以及写程序存储器页指令获得数据。如果不使用查询的方式,那么在操作下一页数据之前应等待至少4.5 ms。在Flash写操作完成之前访问串行编程接口,会导致编程错误。

      ⑤可通过读指令来校验任何一个存储单元的内容。数据从串行输出口MISO输出。

      ⑥编程结束后可以将RESET拉高,开始正常操作。

      ⑦下电序列:将RESET置“1”。

结 语

      在一般的开发过程中,每次进行程序的调试和更新都要将产品与PC机直连,进行在线操作,这样就限制了程序调试和更新的场所。离线加密编程器的设计避免了这种场所的限制。编程器只有普通的火柴盒大小,功能完善且携带方便,这样可以将已编写好的程序存储在编程器中,然后将编程器带到所需场所(特别是在恶劣的工业现场和野外)对产品进行再编程。本设计采用BootLoader引导区程序进行数据的解密和编程操作,既达到了对知识产权进行保护的目的,又方便了程序的调试和更新。

关键字:离线加密编程器  ATmega  单片机 引用地址:离线加密编程器中的 BootLoader程序设计

上一篇:可编程数字电位器在AVR单片机中的应用
下一篇:基于单片机的电动车蓄电池智能管理系统设计

推荐阅读最新更新时间:2024-03-16 12:24

MCS-51单片机驱动步进电机的程序设计
  1.实验设计 定时器1于方式1,16位,10ms中断一次 40H 10ms计数单元 41H 秒计数单元 42H 分计数单元 43H 时计数单元 定时方式1为10MS:THX=0ECH,TLX=78H 方式0为10MS: THX=63H,TLX=18H 步进电机驱动实验 定时中断程序 正转后反转,显示计数值 步进电机按三相六拍的工作方式运动 X轴 C B A P1.2 P1.1 P1.0 用键盘上方的发光二极管(3FH)对应指示: D2 D1 D0 正转:A-AB-B-BC-C-CA-A 反转:A-CA-C-BC-B-
[单片机]
MCU厂商发力可穿戴,将低功耗进行到底
2013年可谓是智能穿戴元年,各行各业都将其视为智能手机之后的下一波热点。各大研究机构也纷纷画饼,其中英国IMS Research就预测到2016年穿戴式产品市场规模达到60亿美金。ABI Research则预测2018年全球穿戴式智能设备的出货量可达到5亿台,年复合增速达到50%以上。 不过在穿戴设备的发展过程中,也面临产品定义不够明确、产业链及生态环境不够健全、刚性需求缺失等多重困境。为了满足不断增长的穿戴市场,各大半导体厂商纷纷推出或准备推出多种高性能以及低功耗的MCU、MEMS以及周边产品。在12月20日深圳举行的一场穿戴式电子设备应用与技术论坛上,就吸引了包括意法半导体、土曼、北高智、Bluetooth SIG在
[单片机]
<font color='red'>MCU</font>厂商发力可穿戴,将低功耗进行到底
基于AVR单片机的嵌入式系统有什么特点?
随着技术的发展,嵌入式系统的设计及应用对人们的生活产生了很大的影响,并将逐渐改变人们未来的生活方式,在特定的操作系统上开发应用程序,可以使开发人员忽略掉很多底层硬件细节,使得应用程序调试更方便、易于维护、开发周期缩短并且降低开发成本,因而嵌入式操作系统深得开发人员的青睐。 AVR微处理器是Atmel公司开发的8位嵌入式RISC处理器,它具有高性能、高保密性、低功耗、非易失性等优点,而且程序存储器和数据存储器可独立编址,并具有独立访问的哈佛结构。AVR单片机内核有丰富的指令集,通过32个通用寄存器直接与逻辑运算单元相连接,允许在一个周期内一条单一指令访问两个独立的寄存器,这样的结构使代码的执行效率比传统的复杂指令集微处理器快了将
[单片机]
如何用低成本ARM Cortex-M微控制器让家电变得更安全
自2007年起,家电厂商的所有新设计必须遵守IEC60335安全标准。为确保家电设备安全可靠,特别是设备故障不能威胁用户的人身安全,这套新标准涉及十分广泛的内容,从机械系统到嵌入电子元器件均有明确规定。 电子部分参照另一个标准,即适用于各种应用领域的IEC60730自动电子控制标准。对于嵌入式系统开发人员,附件H对于嵌入式系统开发人员尤为重要,因为该附件是关于可编程器件。白色家电通常使用多个微控制器:一个微控制器负责管理控制台,另一个管理阀门和电机控制。 根据设备故障导致的危险程度,该标准将软件分为A、B、C三类。如果家电安全不依靠软件,则该家电属于A类,如室内温控器或照明控制器。相反,如果软件用于防止安全隐患,如电子点火燃气
[单片机]
如何用低成本ARM Cortex-M<font color='red'>微控制器</font>让家电变得更安全
51单片机指令助记符及其相关符号的记忆方法
  大家都知道,汇编语言指令由操作码、操作数两部分组成。MCS-51使用汇编语言指令,它共有44个操作码助记符,33种功能,其操作数有#data、direct、Rn、@Ri等。这里先介绍指令助记符及其相关符号的记忆方法。   一、助记符号的记忆方法   1 表格列举法   把44个指令助记符按功能分为五类,每类列表记忆。此处从略,请读者自己总结。   2 英文还原法    单片机 的操作码助记符是该指令功能的英文缩写,将缩写还原成英语原文,再对照汉语有助于理解其助记符含义,从而加强记忆。例如:   增量 INC-Incremect  减量 DNC-Decrement 短转移 SJMP-Short jump  长转移 LJM
[单片机]
四维图新智芯车规级MCU芯片AC7802x一次性成功点亮
近日,四维图新智芯车规级MCU芯片AC7802x提前回片,并一次性成功点亮。AC7802x的到来,将进一步丰富四维图新与旗下杰发科技在MCU芯片的布局,拓展国产MCU在汽车电子领域的应用。这款全国产化供应链的芯片,是“中国芯”的又一突破。 AC7802x平台拓展性强 高可靠性 高性价比 AC7802x是基于ARM Cortex-M0+内核的车规级MCU,自2021年量产首颗M0+内核的AC7801x以来,AC7802x是四维图新智芯基于M0+内核的又一布局。AC7802x符合AEC-Q100 Grade1认证,环境温度最高可支持-40~125℃,其平台扩展性强,与AC7801x同封装可硬件兼容设计,软件接口兼容,方便资
[汽车电子]
NXP超低功耗、多协议无线MCU系列可最大限度延长电池寿命
恩智浦半导体(NXP Semiconductors N.V.,纳斯达克代码:NXPI)今日宣布推出新的超低功耗、多协议无线微控制器(MCU)系列K32W061/41。新的低功耗设备完善了公司近期推出的引脚兼容JN5189/88 (Thread™/Zigbee®)和QN9090/30 (Bluetooth® LE)MCU,为原始设备制造商(OEM)带来更轻松的迁移路径,帮助他们支持现有和新兴的智能家居,构建使用案例。 降低当今智能家居和物联网设备的功耗对于最大限度地提高单纽扣电池的性能来说至关重要。恩智浦K32W061/41 MCU通过多种低功耗模式以及低发送/接收无线电功耗能力实现了这一点。 恩智浦连接解决方案资深营销总监
[嵌入式]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
  • ARM裸机篇--按键中断
    先看看GPOI的输入实验:按键电路图:GPF1管教的功能:EINT1要使用GPF1作为EINT1的功能时,只要将GPFCON的3:2位配置成10就可以了!GPF1先配 ...
  • 网上下的--ARM入门笔记
    简单的介绍打今天起菜鸟的ARM笔记算是开张了,也算给我的这些笔记找个存的地方。为什么要发布出来?也许是大家感兴趣的,其实这些笔记之所 ...
  • 学习ARM开发(23)
    三个任务准备与运行结果下来看看创建任务和任运的栈空间怎么样的,以及运行输出。Made in china by UCSDN(caijunsheng)Lichee 1 0 0 ...
  • 学习ARM开发(22)
    关闭中断与打开中断中断是一种高效的对话机制,但有时并不想程序运行的过程中中断运行,比如正在打印东西,但程序突然中断了,又让另外一个 ...
  • 学习ARM开发(21)
    先要声明任务指针,因为后面需要使用。 任务指针 volatile TASK_TCB* volatile g_pCurrentTask = NULL;volatile TASK_TCB* vol ...
  • 学习ARM开发(20)
  • 学习ARM开发(19)
  • 学习ARM开发(14)
  • 学习ARM开发(15)
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved