【dsPIC33E】Bootloader(三)Bootloader下位机

2024-05-24 06:18
文章标签 bootloader 下位 dspic33e

本文主要是介绍【dsPIC33E】Bootloader(三)Bootloader下位机,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前面2节讲述了dsPIC33E的Flash存储结构以及Hex格式,接下来开始讲述如何编写Bootloader下位机和上位机。

本节讲述下位机的设计,考虑到执行效率和烧录时间,我们将主要解析工作放到上位机中,因为PC的执行速度远高于MCU。在上位机中,我们将Hex文件解析成一组一组的地址和数据组合,然后将一个地址和数据打包发送到Bootloader,Bootloader将其写入对应地址内。

我们先将地址空间分割成三段区域:

0x000000-0x0007FF: 第一段为起始跳转、复位和中断向量表

0x000800-0x0071FF: 第二段为Bootloader,此处预留0x6400长度,为了以后扩充,多预留了一点,后面再空一点点。

0x008000-0x02A800: 第三段为User App,注意最后一页(包含配置字)不要使用,擦除时会导致代码保护清零。

分别在Bootloader和AfterBootloader(即User App)项目中添加gld文件(从xc16安装文件夹下复制到项目目录下),修改对应的程序地址(修改program (xr)的起始地址和长度),这样编译时,会限制程序起始和结束地址。

以下我们将使用具体项目来说明,使用的芯片为dsPIC33EP256GP506

示例项目下载:https://download.csdn.net/download/u010875635/10819819

Bootloader中,最重要的就是2个功能,一是通信,二是Flash读写。由于不能使用中断,防止中断向量表与User App的冲突,通信都采用查询模式。开发板正好有现成的串口,本例采用串口通信,考虑到后面可能会使用CAN,因此核心数据长度为8bytes,串口本身校验功能差,我们再在前后分别增加2个字节,总计12个字节。

此例总共设有5中命令,兼容Bootloader和User App,分别为:EntryBootloader(User App中可用)、Reset、Data、DataEnd、CheckBootloader、Erase。

EntryBootloaderBootloader不适用,User App中可用,由上过机发送过来的命令,用于在User App中复位到Bootloader,以便于进行代码烧写工作;Bootloader启动时会向上位机发送EntryBootloader回馈,表示进入Bootloader。

ResetBootloader中可用,上位机发送过来的命令,用于烧写完毕后,重启系统,User App启动时会向上位机发送Reset回馈表示已经于User App。

Data接收到的为数据,由上位机发送过来,Bootloader将其写入flash。

这篇关于【dsPIC33E】Bootloader(三)Bootloader下位机的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/997605

相关文章

为什么bootloader跳转地址要加4?

问题 “我看你验证程序从ROM跳Flash地址要加4,为啥?” 又被问到了,这次记一下,以后谁再问我就直接发链接,必须点赞+关注,哈哈 答案 上电流程 ARM内核上电以后会从启动地址开始执行,就是vector的起始地址。 vector的第一个4byte-word是堆栈的栈顶地址,后面4byte-word是程序地址,要去这里执行。 硬件上电后会把第一个word load到SP里面,然后第二个

集成电路学习:什么是Bootloader启动加载程序

Bootloader:启动加载程序         Bootloader,亦称引导加载程序,是计算机或设备在操作系统内核运行之前执行的一段小程序。其详细解释如下: 一、定义与功能         Bootloader的主要功能包括初始化系统基本硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境。它是启动操作系统前执行任务的固件

关于bootloader,eboot,uboot,norflash,nandflash。

一.bootloader的作用        其实bootloader主要的必须的作用只有一个:就是把操作系统映像文件拷贝到RAM中去,然后跳转到它的入口处去执行。而操作系统文件的来源,可以是flash,sd card,PC(可以通过网络,USB,甚至串口传输)等等,所谓的EBOOT,UBOOT,其实就是表明了系统文件是通过Ethernet或者USB从PC传输过去的。当然,为了实现这个功能(以及

BootLoader和OTA的关系

什么需要BootLoader 在Linux系统中,软件组成可以跟Windows进行类比: BootLoader的主要作用是: 初始化硬件:比如设置时钟、初始化内存 启动内核:从Flash读出内核、存入内存、给内核设置参数、启动内核 调试作用:在开发产品时需要经常调试内核,使用BootLoader可以方便地更新内核 在单片机中,软件没那么复杂,一般只有一个程序,上电就运行这个

自己写bootloader------编写第1阶段

目录 1.bootloader的作用 2.编写代码 2.1 start.S 2.2 boot.lds 链接脚本 2.3 init.c 2.3.1 nand_init 2.3.2 nand_read 1.bootloader的作用 bootloader的目标:启动内核, 2.编写代码 2.1 start.S #define S3C2440_MPLL_200MHZ

如何知道当前网卡连接的下位机的IP,通过工具实现

要确定当前网卡连接的下位机的 IP 地址,可以使用以下几种工具和方法来实现。 1. 使用 arp-scan 工具 arp-scan 是一个强大的网络扫描工具,可以用于扫描网络上的设备并显示它们的 IP 和 MAC 地址。 安装 arp-scan: sudo apt updatesudo apt install arp-scan 使用 arp-scan 查找下位机 IP: 你需要知道

ARM架构的BootLoader详解——对于Linux与Baremetal(裸机MCU)

BootLoader(引导加载器)是启动嵌入式系统时执行的第一个程序,位于固件中。它主要负责初始化系统硬件、加载操作系统,并将控制权转移到操作系统的启动过程。 关于Linux 引导加载程序的引入 嵌入式Linux系统从软件角度可以分为四个主要部分:引导加载程序(Bootloader)、Linux内核、文件系统和应用程序。这些部分共同构成了完整的嵌入式系统。 引导加载程序(Bootload

bootloader相关内容的辨析

在PC机中,BIOS(Basic Input/Output System,基本输入输出系统)和UEFI(Unified Extensible Firmware Interface,统一可扩展固件接口)是两种用于初始化系统硬件、加载操作系统启动程(如引导加载程序)的固件接口。  BIOS参在于较为成就的PC系统内,主要作用如下: 1.硬件初始化:在系统启动时,BIOS会执行自检(POST,Po

android 默认bootloader为什么选择lk?

Android bootloader目录位置: $/bootable/bootloader/lk 1. android 默认bootloader为什么选择lk, 而非uboot? Android bootloader需求点 1.  加载引导linux kernel 2.  驱动需要Display/Usb/Keypad/Pmic/Vibrator Uboot 的特点:

Bootloader -- U-Boot 介绍

Bootloader -- U-Boot 介绍 1 介绍1.1 概述1.2 知名 BootloaderLILO (Linux Loader)GRUB (GNU GRand Unified Bootloader)LoadlinROLO (Rockbox Loader)EtherbootLinuxBIOS (现在叫 coreboot)BLOBU-BootRedBoot 1.3 BootLoade