了解更多关于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的更多相关文章

  1. PIC18 bootloader之UART bootloader

    了解更多关于bootloader 的C语言实现,请加我Q扣: 1273623966 (验证信息请填 bootloader),欢迎咨询或定制bootloader(在线升级程序). 应客户要求, 将PIC ...

  2. PIC18 bootloader之CAN bootloader

          了解更多关于bootloader 的C语言实现,请加我Q扣: 1273623966 (验证信息请填 bootloader),欢迎咨询或定制bootloader(在线升级程序). PIC18 ...

  3. PIC16 bootloader之UART bootloader

    了解更多关于bootloader 的C语言实现,请加我Q扣: 1273623966 (验证信息请填 bootloader),欢迎咨询或定制bootloader(在线升级程序). PIC16 bootl ...

  4. 【Bootloader】探究bootloader,分析u-boot源码

    Preface 之前也发表过关于<Bootloader启动过程分析>的文章,但是内容表达得比较抽象,大多是文字叙述,所以这里从系统和代码的角度来深入分析bootloader的启动过程. 工 ...

  5. BLE CC2541 串口BootLoader 即 SBL BootLoader 资料 收集

    1.[CC254X_Bootloader]SBL(串口Bootloader)使用说明 2.CC2540协议栈高速串口通信解决(UART的DMA方式) 3.[BLE]CC2541之SBL 4.[BLE] ...

  6. 了解BootLoader——基于MPC5744P Bootloader例程

    一.BootLoader的作用:BootLoader是固化在PFlash中的一个程序,其作用可以分为两部分:boot和load. (1)boot:MCU上电时首先会运行BootLoader程序(因为它 ...

  7. S32Kxxx bootloader之CAN bootloader

    了解更多关于bootloader 的C语言实现,请加我Q扣: 1273623966 (验证信息请填 bootloader),欢迎咨询或定制bootloader(在线升级程序). 最近完成了S32Kxx ...

  8. S32Kxxx bootloader之UDS bootloader

    了解更多关于bootloader 的C语言实现,请加我Q扣: 1273623966 (验证信息请填 bootloader),欢迎咨询或定制bootloader(在线升级程序). 两周前完成了基于UDS ...

  9. C语言PIC18 serial bootloader和C#语言bootloader PC端串口通信程序

    了解更多关于bootloader 的C语言实现,请加我QQ: 1273623966 (验证信息请填 bootloader),欢迎咨询或定制bootloader(在线升级程序). 新PIC18 Boot ...

  10. 自己用C语言写RL78 serial bootloader

    了解更多关于bootloader 的C语言实现,请加我QQ: 1273623966 (验证信息请填 bootloader),欢迎咨询或定制bootloader(在线升级程序). 之前用C实现过多款PI ...

随机推荐

  1. 基于信通院 Serverless 工具链模型的实践:Serverless Devs

    简介: Serverless Devs 作为开源开放的开发者工具,参编中国信通院<基于无服务器架构的工具链能力要求>标准,为行业统一规范发挥助推作用!​ 作者 | 江昱(阿里云 Serve ...

  2. 阿里云GanosBase重磅升级,发布首个云孪生时空数据库

    ​简介: GanosBase是李飞飞带领的达摩院数据库与存储实验室联合阿里云共同研发的新一代位置智能引擎:本次重磅升级为V4.0版本,推出首个云孪生时空数据库. ​ 作者 | 谢炯 来源 | 阿里技术 ...

  3. 从技术到科学,中国AI向何处去?

    ​简介: 如果从达特茅斯会议起算,AI已经走过65年历程,尤其是近些年深度学习兴起后,AI迎来了空前未有的繁荣.不过,最近两年中国AI热潮似乎有所回落,在理论突破和落地应用上都遇到了挑战,外界不乏批评 ...

  4. [FAQ] VisualStudio, Source file requires different compiler version (current compiler is 0.6.1+cxxxxxx)

    当使用的 Solidity 库文件中 pragma 指定的 版本 与本地编译器的使用版本不一致时,会出现这类提示. 解决方式是菜单栏 View -> Extensions -> Exten ...

  5. 16.prometheus监控总结

    一.监控流程总结 1.需要在被监控的服务器上安装xx_exporter来收集数据(可以是源码安装,最好用docker.docker-compose) 2.添加Prometheus配置,去收集(xx_e ...

  6. aliyun全站DCDN刷新--Django

    1.编写原因: 由于登录到阿里云DCDN,需要登录加打开各种页面,导致推送一次感觉非常麻烦,所以编写(网上以有很多可以借鉴) 2.基础环境 # 所需模块 pip install aliyun-pyth ...

  7. Codeforces Round 934 2D/1B

    Link 场上思路出的最快的一题,但没调出来. 反着考虑全为回文串需满足哪些情况. 若 \(k = 1\),没有限制条件. 若 \(k = 2\),对于任意三个位置 _ _ _,先填 \(x\) \( ...

  8. HEOI2024省选游记

    day 0 上午 没让不跑操的同学帮忙带着包 所以就直接背着跑的操,相当难受 吃完早饭就拿手机来机房了 不得不说看得出来 huge 这届确实打算换一种教学思路 以来就先强调了一堆意料之外的东西 包括但 ...

  9. oracle RDBMS Kernel Executable 占用内存过高

    oracle RDBMS Kernel Executable 占用内存过高 参考:https://www.cnblogs.com/markkang/archive/2019/11/25/1192540 ...

  10. phpstudy8.1安装与配置

    环境: window10 phpstudy8.1.1.3 Vmware安装centos7.6 使用场景 window10安装mysql和redis 在Vmware安装centos7.6 桥接模式上网 ...