PIC18 bootloader之RS485 bootloader

news/2024/9/30 13:14:03

                              了解更多关于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;}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hjln.cn/news/45114.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

6.13-栈与队列

基础知识首先大家要知道 栈和队列是STL(C++标准库)里面的两个数据结构。 C++标准库是有多个版本的,要知道我们使用的STL是哪个版本,才能知道对应的栈和队列的实现原理。 那么来介绍一下,三个最为普遍的STL版本:HP STL 其他版本的C++ STL,一般是以HP STL为蓝本实现出来的…

发布中文文档类资源仓库-ChineseDocumentPDF

引言 今天中午,排队打饭间隙,刷到新闻,说是:360AILAB-NLP团队开源了中文论文、研报文档场景的轻量化版式分析模型360LayoutAnalysis。 面向中文论文及研报两个场景的轻量化版式分析模型已经开源:Github地址:https://github.com/360AILAB-NLP/360LayoutAnalysis, 模型权重…

微信小程序-uniapp-切换tab时数据列表如何切换?

如图: 这里有两个tab,要保证每次切换后列表保持不变,就必须在运行时要有两个持久化的数据源,每个tab是一个列表,让我们来设计一下这样的数据结构。 首先我们的数据结构是这样的: 体现在vue的data是这样的: 正好对应tab的索引,当tab改变时,tab会回调索引: 模版中则动…

CS后门源码特征分析与IDS入侵检测

CS后门源码特征分析与IDS入侵检测考核作业 上线x64 getshell抓心跳包,对特征字符解密Uqd3用java的checksum8算法得到93,说明是x64的木马public class EchoTest { public static long checksum8(String text) { if (text.length() < 4) { return 0L; } text = text.replace…

Teamcenter AWC aw-chart自定义图表

1.从服务器获取数据:export const queryChartsData =function(data) { // return new Promise(function (resolve) { // setTimeout(function () {var URL_service =get_URL_service()+"reports/get_workflow_datas";//eventBus.publish("progress.start&…

VideoGeneration

一些读过的视频生成相关的论文Stable Video Diffusion: Scaling Latent Video Diffusion Models to Large Datasets 主要贡献:设计了一套数据清洗策略来清洗大规模的低质量的数据,用于训练T2V的SOTA模型,并证明了此模型具有足够强的关于动作和3D的先验知识可以用于视频相关的…

Beego仿小米商城RBAC管理模块

Beego仿小米商城RBAC管理模块 原创 Go大神 Go大神 2024-05-20 20:38 浙江一、RBAC表结构 1、表结构图2、models\manager.go package modelsimport ( _ "github.com/jinzhu/gorm")type Manager struct { Id int Username string Password string Mobile …

第1章 计算机网络和因特网

本章流程图1.1 什么是因特网 回答这个问题:我们更够描述因特网的具体构成(nuts and bolts),即构成因特网的基本硬件和软件组件。 我们能够根据为分布式应用提供服务的联网基础设施来描述因特网。1.1.1 具体构成描述 端系统通过通信链路(communication link)和分组交换机(…