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 ...
随机推荐
- Go语言核心36讲(Go语言进阶技术二)--学习笔记
08 | container包中的那些容器 我们在上次讨论了数组和切片,当我们提到数组的时候,往往会想起链表.那么 Go 语言的链表是什么样的呢? Go 语言的链表实现在标准库的container/l ...
- 【Azure Developer】如何验证 Azure AD的JWT Token (JSON Web 令牌)?
问题描述 使用微软Azure AD,对授权进行管理.通过所注册应用的OAuth API(https://login.chinacloudapi.cn/{TENANT ID}/oauth2/v2.0/t ...
- Boost Started on Unix Variants
- WeakMap与Map,使用WeakMap实现深拷贝循环引用问题
1.Map可以使用任意类型的key值,不限字符串,对象等. 2.WeakMap只能使用对象作为key值,是弱引用,当从WeakMap中移除时,会自动垃圾回收 3.Object只能用基本类型作为key值 ...
- csp-j 复赛感想
作者:博客园小蔡编程 这次是作者第一次参加csp-j的比赛 内心还是挺激动的 今天,作者就来和大家讨论一下这次csp-j的学习心得和感想 T1 分糖果 这题描述看似复杂 其实就是一道求最大取模的题 L ...
- Scrum Meeting 0609
零.说明 日期:2021-6-9 任务:简要汇报两日内已完成任务,计划后两日完成任务 一.进度情况 组员 负责 两日内已完成的任务 后两日计划完成的任务 困难 qsy PM&前端 完成前端功能 ...
- BUAA2020软工作业(一)——谈谈我和计算机的缘分
项目 内容 这个作业属于哪个课程 2020春季计算机学院软件工程(罗杰 任健) 这个作业的要求在哪里 第一次作业-热身! 我在这个课程的目标是 进一步提高自己的编码能力,工程能力 这个作业在哪个具体方 ...
- Java并发:Condition接口
Condition 接口与 Lock 配合实现了等待 / 通知模式,这个和 Object 的监视器方法(wait.notify.notifyAll 等方法)一样,都是实现了等待 / 通知模式,但这两者 ...
- cf 12B Correct Solution?(贪心)
题意: 一个数a,一个数b. 现在要将a的每一位上的数字重新整理,生成一个新的不含前导0的数a'. 问a'是否等于b. 思路: a上每一位的数字从小到大排序,找到最小的非零数和第一位交换. 代码: c ...
- 【Go语言学习笔记】函数做参数和闭包
函数做参数 在Go语言中,函数也是一种数据类型,我们可以通过type来定义它,它的类型就是所有拥有相同的参数,相同的返回值的一种类型.类似于重写(同名覆盖). 回调函数:函数有一个参数是函数类型,这个 ...