×
嵌入式开发 > 详情

PIC18单片机的一种新颖的Bootloader设计

发布时间:2020-06-28 发布时间:
|

引言
Bootloader是操作系统在内核运行之前运行的一段小程序,其功能主要是完成软硬件设备初始化,建立内存空间映射,从而将系统的软硬件环境带到一个合适的状态,或者加载操作系统映像文件实现系统软件升级。针对PIC18系列单片机,目前市面上仅存在HI-TECH公司提供的Bootloader程序,并且需要借助串口调试助手。本文基于Microchip公司的MPLAB软件开发环境设计了一种新颖Bootloader,并配套编写了PC机端上位机界面程序。其特点是控制灵活,使用便利,系统升级安全可靠。

1 Bootloader的实现
1.1 Bootloader的操作模式
Bootloader在单片机上电/复位后、用户程序之前先运行,运行后判断当前是否需要进入升级状态。如果不需要升级,就直接运行原有的程序;如果需要升级,首先擦除旧的程序,然后从串口接收用户程序,同时写入Flash中。Bootloader有2种操作模式:
①启动加载模式,也称为“内核启动”模式。即Bootloader从目标机上的某个固态存储设备上将操作系统加载到RAM中运行,整个过程并没有用户的介入。
②下载模式。在这种模式下,目标机上的Bootloader将通过串口、网络连接或者USB等,从上位机下载操作系统文件,然后保存到目标机上的Flash类固态存储设备中。Bootloader的这种模式通常在第一次安装内核与根文件系统时被使用,此外,以后的系统更新也会使用Bootl-oader的这种工作模式。
本文设计的Bootloader同时支持这两种工作模式,一开始启动时处于正常的启动加载模式,但并不立即启动进入内核,而是提示延时3 s,上位机用户如果发送某些信息给目标机,则切换到下载模式,否则继续启动内核。
1.2 Intel HEX文件
Intel HEX文件是由一行行符合Intel HEX文件格式的文本所构成的ASCII文本文件。在Intel HEX文件中,每一行包含一个HEX记录。这些记录由对应机器语言码和/或常量数据的十六进制编码数字组成。每个记录包含5个域:数据长度域,它代表记录当中数据字节的数量;地址域,它代表记录当中数据的起始地址;代表HEX记录类型的域;数据域,它代表一个字节的数据,一个记录可以有许多数据字节,记录当中数据字节的数量必须和数据长度域中指定的数字相符;校验和域,它表示这个记录的校验和,通过将记录当中所有十六进制编码数字对应的值相加,模除256,所得余数的补码即校验和。
1.3 Bootloader的设计
本文所设计的Bootloader程序采用的编译器是MPLAB软件开发环境的mcc18编译器,升级文件格式为Intel HEX格式。根据Intel HEX文件的格式,将文件内容的每一行封装成一帧,加上帧头和帧尾以确保数据传输的可靠性,并采用半双工的通信模式,对错误帧进行重传。
主程序代码如下:



『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
RIOS实验室联手Imagination.共同助力RISC-V生态发展