新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 离线加密编程器中的BootLoader程序设计

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

作者: 时间:2011-01-19 来源:网络 收藏


4.2 BootLoader区程序的设计思想

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

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

BootLoader程序编程步骤:

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

5.gif

本文引用地址:https://www.eepw.com.cn/article/151069.htm



②配置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为例,给出一个实际的程序。

6.gif

首先对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引导区程序进行数据的解密和编程操作,既达到了对知识产权进行保护的目的,又方便了程序的调试和更新。


上一页 1 2 3 下一页

关键词:

评论


相关推荐

技术专区

关闭