PIC18 bootloader之RS485 bootloader
了解更多关于bootloader 的C语言实现,请加我Q扣: 1273623966 (验证信息请填 bootloader),欢迎咨询或定制bootloader(在线升级程序)。
不知道为什么,现在工业控制领域也向汽车领域学习,产品需要带bootloader, 产品出货后也要可以通过bootloader更新应用程序。最近一个老客户就让我給其工控产品开发一个RS485的bootloader,产品主要使用的是Microchip 的8-bit单片机PIC18,通信总线是RS485。我其实没用用过RS485总线,先学习了一下RS485总线,才开始RS485 bootloader的开发。RS485 bootloader 是在Uart bootloader 基础上开发的,由于我没有客户产品上同款的PIC18单片机, 我是在PIC18F46K22上开发好,客户自己移植到他们在用的PIC18单片机上。好在RS485 bootloader 三层软件架构,应用层和底层是分开的,非常好移植。架构见图:

RS485 bootloader 是使用XC8 和MPLABX 开发的。RS485 bootloader 上位机是使用C# 和VS2013 开发的,上位机界面如图:

RS485 bootloader 通过烧写器烧写到PIC18 单片机后,后续更新应用程序只需一个USB转RS485工具,USB接电脑,RS485总线和PIC18板子相连,使用上位机即可升级应用程序。RS485可以组网,所以RS485 bootloader 和Uart bootloader 的最大区别就是每帧数据都带有节点地址,RS485节点收到每帧的数据,提取里面的节点地址,在和自己的节点地址进行比较,相同才响应上位机并执行相应的动作完成应用程序的升级。
RS485 bootloader 是一个独立的程序,以PIC18F46K22为例,bootloader存储在ROM空间的0x000 - 0x7FF, 应用程序存储在ROM空间的0x800 - 0xFFFF。所以bootloader 和应用程序共享单片机的整个ROM空间,boot loader 不使用interrupt, interrupt vector 需要重映射到应用程序空间, PIC18的interrupt vector 重映射非常容易,只需在应用程序的MPLAB X工程里配置好ROM offset=0x800即可。
RS485 bootloader 和 上位机之间的通信协议是自定义协议,RS485 bootloader 接收上位机传过来的内容,按照自定义协议的格式解读。格式解读的代码段:
switch (comRxCtrl)
{
case COMRX_SOF:
if (ch == ':')
{
comRxCtrl = COMRX_ADDR;
}
break;
case COMRX_ADDR:
if (ch == COM_ADDRESS)
{
comRxCtrl = COMRX_DATA;
}
else
{
comRxCtrl = COMRX_SOF;
}
break;
case COMRX_DATA:
if (comData.rxIndex <= (comFrame.stuRecord.len + 5))
{
comFrame.rawRecord[comData.rxIndex++] = ch;
}
else
{
comData.status |= COM_RX_OVERFLOW;
}
break;
default:
break;
}
PIC18 bootloader之RS485 bootloader的更多相关文章
- PIC18 bootloader之UART bootloader
了解更多关于bootloader 的C语言实现,请加我Q扣: 1273623966 (验证信息请填 bootloader),欢迎咨询或定制bootloader(在线升级程序). 应客户要求, 将PIC ...
- PIC18 bootloader之CAN bootloader
了解更多关于bootloader 的C语言实现,请加我Q扣: 1273623966 (验证信息请填 bootloader),欢迎咨询或定制bootloader(在线升级程序). PIC18 ...
- PIC16 bootloader之UART bootloader
了解更多关于bootloader 的C语言实现,请加我Q扣: 1273623966 (验证信息请填 bootloader),欢迎咨询或定制bootloader(在线升级程序). PIC16 bootl ...
- 【Bootloader】探究bootloader,分析u-boot源码
Preface 之前也发表过关于<Bootloader启动过程分析>的文章,但是内容表达得比较抽象,大多是文字叙述,所以这里从系统和代码的角度来深入分析bootloader的启动过程. 工 ...
- BLE CC2541 串口BootLoader 即 SBL BootLoader 资料 收集
1.[CC254X_Bootloader]SBL(串口Bootloader)使用说明 2.CC2540协议栈高速串口通信解决(UART的DMA方式) 3.[BLE]CC2541之SBL 4.[BLE] ...
- 了解BootLoader——基于MPC5744P Bootloader例程
一.BootLoader的作用:BootLoader是固化在PFlash中的一个程序,其作用可以分为两部分:boot和load. (1)boot:MCU上电时首先会运行BootLoader程序(因为它 ...
- S32Kxxx bootloader之CAN bootloader
了解更多关于bootloader 的C语言实现,请加我Q扣: 1273623966 (验证信息请填 bootloader),欢迎咨询或定制bootloader(在线升级程序). 最近完成了S32Kxx ...
- S32Kxxx bootloader之UDS bootloader
了解更多关于bootloader 的C语言实现,请加我Q扣: 1273623966 (验证信息请填 bootloader),欢迎咨询或定制bootloader(在线升级程序). 两周前完成了基于UDS ...
- C语言PIC18 serial bootloader和C#语言bootloader PC端串口通信程序
了解更多关于bootloader 的C语言实现,请加我QQ: 1273623966 (验证信息请填 bootloader),欢迎咨询或定制bootloader(在线升级程序). 新PIC18 Boot ...
- 自己用C语言写RL78 serial bootloader
了解更多关于bootloader 的C语言实现,请加我QQ: 1273623966 (验证信息请填 bootloader),欢迎咨询或定制bootloader(在线升级程序). 之前用C实现过多款PI ...
随机推荐
- 阿里巴巴开源大规模稀疏模型训练/预测引擎DeepRec
简介:经历6年时间,在各团队的努力下,阿里巴巴集团大规模稀疏模型训练/预测引擎DeepRec正式对外开源,助力开发者提升稀疏模型训练性能和效果. 作者 | 烟秋 来源 | 阿里技术公众号 经历6 ...
- 深入分析 Flutter 渲染性能
简介: Flutter 有很多优点,特别是对于开发者来说,跨平台多端支持,丰富的 UI 组件库和交互效果,声明式 UI,React 的更新方式,Hot-reload 提高开发效率等等.虽然它在渲染性能 ...
- Metasploit 实现木马生成、捆绑及免杀
简介: 在渗透测试的过程中,避免不了使用到社会工程学的方式来诱骗对方运行我们的木马或者点击我们准备好的恶意链接.木马的捆绑在社会工程学中是我们经常使用的手段,而为了躲避杀毒软件的查杀,我们又不得不对 ...
- ASP.NET Core 将文件夹内容输出为压缩包文件方法
本文主要是告诉大家一个省内存的方法,将整个文件夹的内容作为一个压缩包输出,但是实际上没有申请那么多的内存,也不需要升级创建一个压缩包文件.原理是通过逐个读文件然后按照压缩包格式输出 在每个请求的方法可 ...
- [Python急救站]人脸识别技术练习
这段时间做了一个用于初学者学习人脸识别系统的程序,在上代码时,先给说说事前准备: 首先我们需要一个OpenCV的一个haarcascade_frontalface_default.xml文件,只要去G ...
- ITIL现有版本之间的区别
时代在变化,运维管理理论也在不断演进升级,不断学习是运维人的良好品质:虽然人有的时候会懈怠,理论学习的道路也较单调乏味,但终究还是要跟上时代的步调才能适应新的变化
- 05 elasticsearch学习笔记-基本CRUD
目录 视频教程 4.1 基本CRUD 4.2 URI查询 按时间段查 视频教程 Elasticsearch(7.8.1)沥血之作(包含仿百度搜索案例) https://www.bilibili.com ...
- goframe v2.1.0 gf-cli的使用
目录 1.视频教程 2.官方文档 3.下载 linux系统安装环境 windows系统安装环境 4.创建项目 5.启动项目 6.交叉编译 7.gen命令的使用 8.orm的操作 1.视频教程 http ...
- 海康威视web插件安装后,谷歌浏览器还是不能看视频问题
首先要根据弹出的信息提示,下载并安装视频播放插件, 安装完成后重新打开谷歌浏览器,重新登录系统,如果还是不能看视频,请按下面的方法设置: 步骤1:谷歌浏览器,地址栏中输入:chrome://flags ...
- MQ消息积压,把我整吐血了
前言 我之前在一家餐饮公司待过两年,每天中午和晚上用餐高峰期,系统的并发量不容小觑. 为了保险起见,公司规定各部门都要在吃饭的时间轮流值班,防止出现线上问题时能够及时处理. 我当时在后厨显示系统团队, ...