一.实现原理
   1.关于24位指令占用FLASH空间的说明
    dsPIC是16位的单片机,每一个指令为24位固定长度,一条指令在FLASH内占用3个字节,但只占用2个字节的地址空间,如果指令字节
  和地址空间一一对应来看,那个指令中最高的字节一直在梦游般的游荡在FLASH中,只有一种特殊的办法才能读写这个没有地址的指令
  数据。例如、一条指令的开始存放地址为0x000000,那么下一条指令的存储地址是0x000002,一条指令实际为3个字节,为了方便计算xc16
  生成的HEX文件中将一条指令占用4字节的线性地址(最高字节填充为0),也就是说xc16生成的HEX文件中的地址和实际
   FLASH操作地址相差一倍。

2.复位
   dsPIC设计风格非常实用简约、没有重定向复位向量等功能,上电复位时始终从0x000000处开始执行,为此boot程序的复位地址必须
  放在0地址处。 要注意的是app程序所生成的可执行文件也生成覆盖0地址处的复位向量,boot程序必须想办法在app下载过程中不让app
   的复位向量覆盖此地址,确保每次复位都先执行BOOT程序。
  
   3.中断向量
    尽管dsPIC提供了一个备用的中断向量表,但为了程序结构简单化,BOOT程序禁止使用中断,BOOT程序通过查询方式使用
   定时器和UART。由于boot程序功能比较简单不使用中断也可轻松实现。

4.配置字节
    为了BOOT程序可重复的下载新的APP程序,配置字节只允许在BOOT程序中配置。
   
   5.boot和app程序的存放位置
    理论上BOOT程序可放在flash内除中断向量外的其它任意地址,但为了写入APP时flash地址的连续性,把boot程序放到
    FLASH 的尾部,0x7800(字节地址0xf000)处。这样APP程序就可以没有什么改动的使用默认链接脚本就可以。
  
   那么BOOT程序如何定位到0x7800处呢?从xc16编译器目录下找到dsPIC30F4011的默认链接脚本文件 mp30F4011.gld 并复制到项目目录
  并作如下的改动后添加到项目中。

MEMORY
{
data (a!xr) : ORIGIN = 0x800, LENGTH = 0x800
reset : ORIGIN = 0x0, LENGTH = 0x4
ivt : ORIGIN = 0x4, LENGTH = 0x7C
_reserved : ORIGIN = 0x80, LENGTH = 0x4
aivt : ORIGIN = 0x84, LENGTH = 0x7C
program (xr) : ORIGIN = 0x7800, LENGTH = 0x700
eedata : ORIGIN = 0x7FFC00, LENGTH = 0x400
FUID0 : ORIGIN = 0x8005C0, LENGTH = 0x2
FUID1 : ORIGIN = 0x8005C2, LENGTH = 0x2
FUID2 : ORIGIN = 0x8005C4, LENGTH = 0x2
FUID3 : ORIGIN = 0x8005C6, LENGTH = 0x2
FOSC : ORIGIN = 0xF80000, LENGTH = 0x2
FWDT : ORIGIN = 0xF80002, LENGTH = 0x2
FBORPOR : ORIGIN = 0xF80004, LENGTH = 0x2
RESERVED1 : ORIGIN = 0xF80006, LENGTH = 0x2
RESERVED2 : ORIGIN = 0xF80008, LENGTH = 0x2
FGS : ORIGIN = 0xF8000A, LENGTH = 0x2
FICD : ORIGIN = 0xF8000C, LENGTH = 0x2
}__FUID0 = 0x8005C0;
__FUID1 = 0x8005C2;
__FUID2 = 0x8005C4;
__FUID3 = 0x8005C6;
__FOSC = 0xF80000;
__FWDT = 0xF80002;
__FBORPOR = 0xF80004;
__RESERVED1 = 0xF80006;
__RESERVED2 = 0xF80008;
__FGS = 0xF8000A;
__FICD = 0xF8000C;
__NO_HANDLES = 1; /* Suppress handles on this device */
__CODE_BASE = 0x7800;
__CODE_LENGTH = 0x700;
__IVT_BASE = 0x4;
__AIVT_BASE = 0x84;

二.程序说明
   xc16提供的c库不支持flash页写入,为此为了提高效率使用了官方bootloader示例中的写flash接口函数
  这些函数有:

   //memory.s中实现的FLASH页操作函数原型声明extern uint32_t ReadLatch(uint16_t, uint16_t);extern void WriteLatch(uint16_t,uint16_t,uint16_t,uint16_t);extern void WriteMem(uint16_t);extern void LoadAddr(uint16_t,uint16_t);extern void ResetDevice(void);

三.示例代码下载

下载

dsPIC(dsPIC30F4011) Bootloader原理及应用相关推荐

  1. 超详细BootLoader原理分析

    [摘要]本文详细地介绍了基于嵌入式系统中的 OS 启动加载程序 ―― BootLoader 的概念.软件设计的主要任务以及结构框架等内容. 在拿到空PCB板之后,硬件工程师首先会测试各主要线路是否通连 ...

  2. linux bootloader原理,Bootloader原理详解

    文章一: 1.BootLoader 的介绍 引导加载程序BootLoader 是系统加电后运行的第一段代码.我们熟悉的PC 中的引导程序一般由BIOS 和位于硬盘MBR中的OS bootloader( ...

  3. Arduino通过USB转TTL无BootLoader烧录程序的两种办法

    Arduino通过USB转TTL无BootLoader(引导程序)烧录程序的两种办法 注意 (这个实验室基于stm32duino的,avr单片机并不直接通用,不过如果你准备尝试使用串口来给avr单片机 ...

  4. 浅谈bootloader【谈的很清晰明白】

    文章目录 什么是Bootloader ECU的Bootloader Bootloader框架 ECU Bootloader原理 1.预编程阶段 2.编程阶段 3.编程结束 总体流程 Bootloade ...

  5. S5PV210开发 -- 前言

    这段时间终于把图像和流媒体部分的内容如 FFmpeg.MP4V2.LIVE555.RTSP.H.264 等过了一遍,然后做了一个PM2.5采集项目,学习了MQTT. 接下来我们会以基于 210v3开发 ...

  6. 学习嵌入式的书籍推荐,嵌入式编程入门教程学习大纲

    嵌入式系统是当前热门.具发展前景的IT应用领域之一,很多数字包括手机.电子字典.可视电话.数字相机.数字摄像机.机顶盒.智能玩具医疗仪器和航空航天设备等都是典型的嵌入式系统.越来越多的人想要了解学习嵌 ...

  7. 安卓修炼之路必要要知道的要求和建议

    偶然在一个群中看到有人转发了这篇文章,感觉写得真不错,所以转发下来.向大师学习! (一)成为Android高手必须掌握的8项基本要求 [1] Android操作系统概述 1. Android系统架构. ...

  8. 嵌入式软件开发培训笔记——ARM架构Linux系统下交叉编译环境搭建、NFS、TFTP服务配置及Nandflash的读写

    bootloader原理和开发-->kernel构建-->文件系统/根文件系统(filesystem/rootfs) APP 一.配置交叉编译环境(可参考嵌入式Linux移植与驱动开发co ...

  9. 应届毕业生面试宝典(仅限IT行业)------大学毕业时准备的资料

    突然看到以前整理的资料,拿来给大家分享一下.包括C.系统编程.网络编程.BS等....你要是应届毕业生若是会这些,基本上哪家公司都会抢着要你. <一> c语言整理资料 大学期间主要是针对w ...

最新文章

  1. Java Windows 环境配置
  2. neo4j 添加属性_Neo4j:动态添加属性/设置动态属性
  3. spring之依赖注入
  4. win10添加环境变量后没用_python 学习之在 win10 下安装 Anaconda
  5. octave存储文档
  6. 腾讯云直播开发日记 (二)附近直播-直播礼物-直播回放
  7. 任天堂残酷马里奥游戏
  8. fabao_get.y
  9. SLAM学习 | 使用小觅相机MYNTEYE-S1030收集数据集
  10. 洛谷P1179 [NOIP2010 普及组] 数字统计题解
  11. 软件测试需求频繁变更,软件测试人员如何测试需求频繁变动的项目
  12. 用python处理excel数据、求线性回归方程的r值_Python 线性回归计算r-squared方法
  13. 介绍一个产品的思维导图_产品经理可以用思维导图做什么?
  14. 【百人计划】图形3.5 纹理压缩的格式
  15. 海量数据处理-分而治之和hash映射
  16. MapReduce之单词统计
  17. 现在银行基金还有希望吗?
  18. U盘安装ubuntu20.04 Linux系统分区方案 Invalid Partition Table
  19. 第三课总结吴恩达 ChatGPT Prompt 免费视频
  20. 数据信号采集系统设计之数据采集系统整体设计

热门文章

  1. Java内存溢出OOM之dump分析
  2. 应用之星:2014年电子书市场分析报告
  3. APM飞控添加新的外设驱动
  4. matlab mrg32k3a,求教 – MATLAB中文论坛
  5. python随机抽样numpy_随机抽样 (`numpy.random`) | NumPy 中文
  6. 数位dp的概念和模板
  7. 心理测试小精灵 官方
  8. RS232的硬件流控:DCD DSR DTR RTS CTS
  9. 万邦京东获得JD商品详情 API 返回值说明
  10. 如何拍照识别植物?拍照识别植物的方法教学