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 ...
随机推荐
- 解决pip._vendor.urllib3.exceptions.ReadTimeoutError: HTTPSConnectionPool(host='files.pythonhosted.org', port=443): Read timed out.
参考链接[侵权删] https://www.jianshu.com/p/3378fa827924 https://yq.aliyun.com/articles/619208 问题描述:在Windows ...
- UE4蓝图AI角色制作(四)之Gameplay调试器
8. 寻路网格体和Gameplay调试器 为了及时识别出AI系统中的导航问题,UE4提供了一个工具用来解决这类问题,它叫Gameplay调试器.打开项目设置,在左侧找到"引擎",然 ...
- Java泛型背后是什么?
文Java中泛型的应用,让大家更好地理解泛型,以及常说的泛型类型擦除是什么概念,举一个简单的例子,如下: 这里可以看出来在代码编写阶段就已经报错了,不能往string类型的集合中添加int类型的数据. ...
- 网络通信IO的演变过程(一)(一个门外汉的理解)
以前从来不懂IO的底层,只知道一个大概,就是输入输出的管道怼到一起,然后就可以传输数据了. 最近看了周志垒老师的公开课后,醍醐灌顶. 所以做一个简单的记录. 0 计算机组成原理相关 0.1. 计算机的 ...
- 【UE4 设计模式】策略模式 Strategy Pattern
概述 描述 策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换.策略模式让算法的变化不会影响到使用算法的客户. 套路 Context(环境类) 负责使用算法策略,其中维持了一 ...
- 什么是关系图 (ERD)?
首先,什么是实体关系图? 实体关系图,也称为ERD,ER图或ER模型,是一种用于数据库设计的结构图.一个ERD包含不同的符号和连接器,它们可视化两个重要信息:系统范围内的主要实体,以及这些实体之间的相 ...
- 大闸蟹的OO第二单元总结
OO的第二单元是讲多线程的协作与控制,三次作业分别为FAFS电梯,ALS电梯和三部需要协作的电梯.三次作业由浅入深,让我们逐渐理解多线程的工作原理和运行状况. 第一次作业: 第一次作业是傻瓜电梯,也就 ...
- Hash算法:双重散列
双重散列是线性开型寻址散列(开放寻址法)中的冲突解决技术.双重散列使用在发生冲突时将第二个散列函数应用于键的想法. 此算法使用: (hash1(key) + i * hash2(key)) % TAB ...
- PCIe知识摘要记录
摘: 一. 在PCIe的Spec中,并没有特别详细的关于Root Complex的定义,从实际的角度来讲,可以把Root Complex理解为CPU与PCIe总线系统通信的媒介.Endpoint处于P ...
- PHP笔记1__基础知识
客户端: 美妙的网页组成(都是由浏览器解释): 1.HTML 2.CSS--给HTML化妆 3.客户端脚本编程语言(JavaScript等)--特效 服务器端: 1.Web服务器Apache/Ngi ...