我的第一个是我自己的serial bootloader是为Microchip PIC16单片机写的UART bootloader,我命其名为HyperBootloader_PIC16. 为什么取这个名字这个名字。很多朋友可能会问为什么要自己写bootloader, 百度上一搜,有很多可以直接下载使用。比如ds30_Loader 很好,免费,支持Microchip许多系列单片机。是的,但是在网上找到的是对的,bootloader用C语言写的很少,或者不能用,或者不能用XC8编译的(Microchip C编译器)。大部分都是汇编写的,包括ds30_Loader。我觉得不怎么用汇编很头疼。bootloader不容易修改,比如很难增加你需要的功能。所以我决定用C语言写自己PIC16 serial bootloader。说干就干,本来以为是小菜一碟,没想到写一篇稳定好用又节省空间的作品bootloader也不简单,这是后话。谈谈如何实现自己PIC16 serial bootloader以前,我先说说serial bootloader基础知识。如果不需要知道,请跳过这部分。
Serial bootloader之ABC
Serial bootloader这是一种非常方便和低成本的程序烧写方法。一般情况下,每次烧写Microchip我们都需要单片机PICKit3或ICD3连接目标板,然后在电脑上使用Microchip IPE或MPLAB X可直接烧写Hex文件到目标板。使用serial bootloader 无需插拔烧录器,对开发工程师来说非常方便。Serial bootloader单片机串口需要使用,因此单片机端需要以下硬件电路,其中DB9串口与电脑串口相连。
Serial bootloader 和应用程序一样,它也被烧录到程序存储器中,serial bootloader 程序存储器中需要单独放置应用程序。serial bootloader一般有两种放置方式,一种是放置在程序存储器的头部,另一种是放置在程序存储器的底部,如下图所示。
Serial bootloader 可使用烧录器PICkit3或ICD3.烧到目标板上,然后更新应用程序,不需要烧录器。目标板和计算机通过串口连接,计算机运行串口通信程序,将应用程序Hex通过串口传递文件serial bootloader, serial bootloader 再接收Hex将数据烧录到程序存储器的正确位置。接下来是今天的主角HyperBootloader_PIC16-我自己写的第一个PIC单片机C语言16 serial bootloader。
HyperBootloader_PIC16
HyperBootloader_PIC16我是模仿HI-TECH的PICC bootloader,由于我是用XC8的编译器,所以有很多变化。上面有提到bootloader在程序存储器中要么是在头部要么是在底部,而HyperBootloader_PIC16 在程序存储器的底部。与其通信的计算机端串口通信程序是超终端——HyperTerminal. 这也是它命名的由来。
主要代码段
HyerBootloader_PIC16是用C语言写的,只占很小的空间serial bootloader。不到0x200程序字空间。 实现逻辑也很简单,主要代码段如下。
/*receiveahexfileviatheserialportandwriteittoprogrammemory*/for()loopuntilendoffile{typedefunion{unsignedintword