dsPIC(dsPIC30F4011) Bootloader原理及应用
一.实现原理
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原理及应用相关推荐
- 超详细BootLoader原理分析
[摘要]本文详细地介绍了基于嵌入式系统中的 OS 启动加载程序 ―― BootLoader 的概念.软件设计的主要任务以及结构框架等内容. 在拿到空PCB板之后,硬件工程师首先会测试各主要线路是否通连 ...
- linux bootloader原理,Bootloader原理详解
文章一: 1.BootLoader 的介绍 引导加载程序BootLoader 是系统加电后运行的第一段代码.我们熟悉的PC 中的引导程序一般由BIOS 和位于硬盘MBR中的OS bootloader( ...
- Arduino通过USB转TTL无BootLoader烧录程序的两种办法
Arduino通过USB转TTL无BootLoader(引导程序)烧录程序的两种办法 注意 (这个实验室基于stm32duino的,avr单片机并不直接通用,不过如果你准备尝试使用串口来给avr单片机 ...
- 浅谈bootloader【谈的很清晰明白】
文章目录 什么是Bootloader ECU的Bootloader Bootloader框架 ECU Bootloader原理 1.预编程阶段 2.编程阶段 3.编程结束 总体流程 Bootloade ...
- S5PV210开发 -- 前言
这段时间终于把图像和流媒体部分的内容如 FFmpeg.MP4V2.LIVE555.RTSP.H.264 等过了一遍,然后做了一个PM2.5采集项目,学习了MQTT. 接下来我们会以基于 210v3开发 ...
- 学习嵌入式的书籍推荐,嵌入式编程入门教程学习大纲
嵌入式系统是当前热门.具发展前景的IT应用领域之一,很多数字包括手机.电子字典.可视电话.数字相机.数字摄像机.机顶盒.智能玩具医疗仪器和航空航天设备等都是典型的嵌入式系统.越来越多的人想要了解学习嵌 ...
- 安卓修炼之路必要要知道的要求和建议
偶然在一个群中看到有人转发了这篇文章,感觉写得真不错,所以转发下来.向大师学习! (一)成为Android高手必须掌握的8项基本要求 [1] Android操作系统概述 1. Android系统架构. ...
- 嵌入式软件开发培训笔记——ARM架构Linux系统下交叉编译环境搭建、NFS、TFTP服务配置及Nandflash的读写
bootloader原理和开发-->kernel构建-->文件系统/根文件系统(filesystem/rootfs) APP 一.配置交叉编译环境(可参考嵌入式Linux移植与驱动开发co ...
- 应届毕业生面试宝典(仅限IT行业)------大学毕业时准备的资料
突然看到以前整理的资料,拿来给大家分享一下.包括C.系统编程.网络编程.BS等....你要是应届毕业生若是会这些,基本上哪家公司都会抢着要你. <一> c语言整理资料 大学期间主要是针对w ...
最新文章
- Java Windows 环境配置
- neo4j 添加属性_Neo4j:动态添加属性/设置动态属性
- spring之依赖注入
- win10添加环境变量后没用_python 学习之在 win10 下安装 Anaconda
- octave存储文档
- 腾讯云直播开发日记 (二)附近直播-直播礼物-直播回放
- 任天堂残酷马里奥游戏
- fabao_get.y
- SLAM学习 | 使用小觅相机MYNTEYE-S1030收集数据集
- 洛谷P1179 [NOIP2010 普及组] 数字统计题解
- 软件测试需求频繁变更,软件测试人员如何测试需求频繁变动的项目
- 用python处理excel数据、求线性回归方程的r值_Python 线性回归计算r-squared方法
- 介绍一个产品的思维导图_产品经理可以用思维导图做什么?
- 【百人计划】图形3.5 纹理压缩的格式
- 海量数据处理-分而治之和hash映射
- MapReduce之单词统计
- 现在银行基金还有希望吗?
- U盘安装ubuntu20.04 Linux系统分区方案 Invalid Partition Table
- 第三课总结吴恩达 ChatGPT Prompt 免费视频
- 数据信号采集系统设计之数据采集系统整体设计