PIC16 bootloader之UART bootloader
了解更多关于bootloader 的C语言实现,请加我Q扣: 1273623966 (验证信息请填 bootloader),欢迎咨询或定制bootloader(在线升级程序)。
PIC16 bootloader是在PIC16单片机上电复位时执行的一段程序。通过这段程序,可以不使用编程器,也能实现应用程序在线升级。今天要介绍的PIC16 bootloader是使用UART通信接口的UART bootloader, 也叫RS232串口bootloader。由于电脑只有USB接口,所以需要用USB-to-RS232的适配器来转发数据,将电脑端数据转发到PIC16单片机,或者将PIC16单片机数据转发到电脑。系统接线图如下:
电脑要运行一个专门的上位机程序,用来加载应用程序的hex文件,设置RS232通信端口和baud rate,点击下载按钮,启动和PIC16 bootloader通信,下发应用程序数据完成应用程序升级。我的这个PIC16 bootloader 的上位机程序是使用C#和Visual Studio 2013开发的,界面如下:

这个Bootloader升级应用程序时用的USB-to-RS232适配器是我自己亲手打造的工业级适配器Z-Box R01A,USB-to-RS232适配器根据其使用的芯片分类,常用的有四种类型FT232(FTDI),CP2102, PL2303, CH340。 Z-Box R01A适配器属于FT232类型。作为一位一直在前线搬砖的老工程师,踩过的坑不计其数,知道工业场所什么奇葩环境都有,什么样的干扰伤害都可能有。所以工业产品,工业用品,制作必须精良,绝对不能偷工减料,否则最后的损失会更大。Z-Box R01A适配器是我为工业场所打造的USB-to-RS232,制作之精良,用料之水准,无出其右(使用最稳定最强大也是最贵的英国芯片,电路上信号有作隔离,金属外壳,一头是方形USB口,另一头是DB9口 )。不计成本,只求稳定可靠。还有一点,Z-Box R01A不是只有USB-to-RS232的适配功能,还有USB-to-TTL的适配功能。自卖自夸了这么久,到底长啥模样呢,见图:
用户板就是PIC16单片机的目标板,用户板需要烧写好PIC16 UART bootloader固件。我的PIC16 UART bootloader软件分三层,应用层,中间层,和驱动层,软件架构如下:

这个PIC16 UART bootloader和之前写的bootloader相比有四个特色。第一个特色是它分层比较清晰,应用层和驱动层有隔离,方便移植。移植到PIC18,PIC24, PIC32非常地快,即使移植到非PIC的芯片也很容易。第二个特色是它是为工业级产品开发的,是一款工业级的bootloader。 PC端host程序发送的每一帧数据都带checksum。UART bootloader接收数据,解析数据,烧写数据,烧写完会读出来作比较,所有的这些动作的结果会反馈到PC端的上位机程序,没有错误反馈正响应,有错误就反馈负响应。最后还会对整个过程接收到的数据作校验,从而确保数据的完整性和正确性。即使在恶劣的工业环境,也能够确保应用程序可靠地完成升级。第三个特色是PIC UART bootloader可以实时在LCD屏幕上显示应用程序升级的进度。工业产品很多都带LCD屏,利用LCD屏显示升级的进度,是我为这个UART bootloader独创的功能。最后一个特色,这个PIC16 UART bootloader是放在code flash的底部,应用程序是放在头部,这样做最大的好处是应用程序不需要做偏移,中断向量不需要重映射,就算是新手使用这个UART bootloader也丝毫没有问题。应用程序加了偏移,无法调试,需要调试就得把偏移去掉。使用这个UART bootloader就不需要这么麻烦,出了问题随时都可以调试,方便查找问题原因。我为PIC16 UART bootloader升级应用程序的整个过程录制了一个视频,视频的链接:工业级UART接口PIC16 Bootloader 应用程序升级视频-科技-高清完整正版视频在线观看-优酷 (youku.com)
PIC16 bootloader之UART bootloader的更多相关文章
- PIC18 bootloader之UART bootloader
了解更多关于bootloader 的C语言实现,请加我Q扣: 1273623966 (验证信息请填 bootloader),欢迎咨询或定制bootloader(在线升级程序). 应客户要求, 将PIC ...
- PIC18 bootloader之CAN bootloader
了解更多关于bootloader 的C语言实现,请加我Q扣: 1273623966 (验证信息请填 bootloader),欢迎咨询或定制bootloader(在线升级程序). PIC18 ...
- S32Kxxx bootloader之CAN bootloader
了解更多关于bootloader 的C语言实现,请加我Q扣: 1273623966 (验证信息请填 bootloader),欢迎咨询或定制bootloader(在线升级程序). 最近完成了S32Kxx ...
- BLE CC2541 串口BootLoader 即 SBL BootLoader 资料 收集
1.[CC254X_Bootloader]SBL(串口Bootloader)使用说明 2.CC2540协议栈高速串口通信解决(UART的DMA方式) 3.[BLE]CC2541之SBL 4.[BLE] ...
- 【Bootloader】探究bootloader,分析u-boot源码
Preface 之前也发表过关于<Bootloader启动过程分析>的文章,但是内容表达得比较抽象,大多是文字叙述,所以这里从系统和代码的角度来深入分析bootloader的启动过程. 工 ...
- 了解BootLoader——基于MPC5744P Bootloader例程
一.BootLoader的作用:BootLoader是固化在PFlash中的一个程序,其作用可以分为两部分:boot和load. (1)boot:MCU上电时首先会运行BootLoader程序(因为它 ...
- S32Kxxx bootloader之UDS bootloader
了解更多关于bootloader 的C语言实现,请加我Q扣: 1273623966 (验证信息请填 bootloader),欢迎咨询或定制bootloader(在线升级程序). 两周前完成了基于UDS ...
- 自己用C语言写单片机PIC16 serial bootloader
了解更多关于bootloader 的C语言实现,请加我QQ: 1273623966 (验证信息请填 bootloader),欢迎咨询或定制bootloader(在线升级程序). 为什么自己写bootl ...
- C语言PIC16 serial bootloader和C#语言bootloader PC端串口通信程序
了解更多关于bootloader 的C语言实现,请加我QQ: 1273623966 (验证信息请填 bootloader),欢迎咨询或定制bootloader(在线升级程序). 新PIC16 Boot ...
随机推荐
- C++的智能指针学习笔记(初)
C++ primer plus 16.2节介绍了auto_ptr,该模板类在C++11中已弃用,目前已被shared_ptr代替. auto_ptr又叫做智能指针,用于管理动态内存分配的用法. 为什么 ...
- Mybatis初始化机制
对于任何框架而言,在使用前都要进行一系列的初始化,MyBatis也不例外.本章将通过以下几点详细介绍MyBatis的初始化过程. 1.MyBatis的初始化做了什么 2. MyBatis基于XML配置 ...
- 网页常用的css特效让互动留住客户
一般网站如果制作按钮,多做一些互动,可以让客户获得更好的体验. 例如鼠标滑过按钮,让背景颜色从左往右滑出来(或者从右往左都可以): <a target="_blank" hr ...
- .NET 事件总线,简化项目、类库、线程、服务等之间的通信,代码更少,质量更好。
Jaina .NET 事件总线,简化项目.类库.线程.服务等之间的通信,代码更少,质量更好. 安装 Package Manager Install-Package Jaina .NET CLI do ...
- uni-app 安卓离线打包详细教程
借鉴 uni-app官方给出的文章http://ask.dcloud.net.cn/article/508(虽说是04年的) 预备环境 AndroidStudio开发环境,要求安装Android4.0 ...
- RMQ、ST表
ST表 \(\text{ST}\) 表是用于解决可重复贡献问题的数据结构. 可重复贡献问题:区间按位和.区间按位或.区间 \(\gcd\) .区间最大.区间最小等满足结合律且可重复统计的问题. 模板预 ...
- i love dingning
"如果你爱一个人,不是下课给人家买买水,不是短信发来发去,也不是周末一起出来唱唱歌聊聊天吃吃饭,而是做一个出色的人.以后的以后,可能还有别的人爱她,你要做的,是把别人都比下去.你要变得优秀, ...
- Spring事务的介绍,以及基于注解@Transactional的声明式事务
前言 事务是一个非常重要的知识点,前面的文章已经有介绍了关于SpringAOP代理的实现过程:事务管理也是AOP的一个重要的功能. 事务的基本介绍 数据库事务特性: 原子性 一致性 隔离性 持久性 事 ...
- Go语言核心36讲(Go语言进阶技术十三)--学习笔记
19 | 错误处理(上) 提到 Go 语言中的错误处理,我们其实已经在前面接触过几次了. 比如,我们声明过error类型的变量err,也调用过errors包中的New函数. 我们说过error类型其实 ...
- 【java+selenium3】自动化截图 (十四)
一.截图 1. Firefox浏览器截图 FirefoxDriver firefoxDriver = new FirefoxDriver(); firefoxDriver.getScreenshotA ...