28377D Bootloader
结构:上位机,28377D (Master), 28035 (slaver)。
通信方式:SCI。
28377D bootloader 采用bootloader + app 模式。
每颗芯片对应的程序为bl + app, 也就是两个工程文件。
首先,bootloader 的编写,bl中的主要内容是SCI通信加flash烧写。
在bl中要对cmd文件进行修改,配置好app程序存放地址和版本相应空间。
具体程序配置如下:
MEMORY
{
PAGE 0 : /* Program Memory *//* Memory (RAM/FLASH) blocks can be moved to PAGE1 for data allocation *//* BEGIN is used for the "boot to Flash" bootloader mode */BEGIN : origin = 0x080000, length = 0x000002RAMM0 : origin = 0x000122, length = 0x0002DERAMLS0 : origin = 0x008000, length = 0x001000RESET : origin = 0x3FFFC0, length = 0x000002/* Flash sectors */FLASHA : origin = 0x080002, length = 0x003FFE /* on-chip Flash */// FLASHB : origin = 0x082000, length = 0x002000 /* on-chip Flash */APPSIZE : origin = 0x088000, length = 0x000002 /* app size */FLASHE : origin = 0x088002, length = 0x007FFE /* on-chip Flash */FLASHF : origin = 0x090000, length = 0x008000 /* on-chip Flash */FLASHG : origin = 0x098000, length = 0x008000 /* on-chip Flash */FLASHH : origin = 0x0A0000, length = 0x008000 /* on-chip Flash */FLASHI : origin = 0x0A8000, length = 0x008000 /* on-chip Flash */FLASHJ : origin = 0x0B0000, length = 0x008000 /* on-chip Flash */FLASHK : origin = 0x0B8000, length = 0x002000 /* on-chip Flash */FLASHL : origin = 0x0BA000, length = 0x002000 /* on-chip Flash */FLASHM : origin = 0x0BC000, length = 0x002000 /* on-chip Flash */FLASHN : origin = 0x0BE000, length = 0x002000 /* on-chip Flash */ PAGE 1 : /* Data Memory *//* Memory (RAM/FLASH) blocks can be moved to PAGE0 for program allocation */BOOT_RSVD : origin = 0x000002, length = 0x000120 /* Part of M0, BOOT rom will use this for stack */UPLOADREQ : origin = 0x000400, length = 0x000004 /* on-chip RAM block M1 */RAMD0 : origin = 0x00B000, length = 0x000800RAMD1 : origin = 0x00B800, length = 0x000800RAMLS1 : origin = 0x009000, length = 0x002000// RAMLS3 : origin = 0x009800, length = 0x000800//RAMLS4 : origin = 0x00A000, length = 0x000800// RAMLS5 : origin = 0x00A800, length = 0x000800RAMGS0 : origin = 0x00C000, length = 0x001000RAMGS1 : origin = 0x00D000, length = 0x001000RAMGS2 : origin = 0x00E000, length = 0x001000RAMGS3 : origin = 0x00F000, length = 0x001000RAMGS4 : origin = 0x010000, length = 0x001000RAMGS5 : origin = 0x011000, length = 0x001000RAMGS6 : origin = 0x012000, length = 0x001000RAMGS7 : origin = 0x013000, length = 0x001000RAMGS8 : origin = 0x014000, length = 0x001000RAMGS9 : origin = 0x015000, length = 0x001000RAMGS10 : origin = 0x016000, length = 0x001000RAMGS11 : origin = 0x017000, length = 0x001000RAMGS12 : origin = 0x018000, length = 0x001000RAMGS13 : origin = 0x019000, length = 0x001000RAMGS14 : origin = 0x01A000, length = 0x001000RAMGS15 : origin = 0x01B000, length = 0x001000CPU2TOCPU1RAM : origin = 0x03F800, length = 0x000400CPU1TOCPU2RAM : origin = 0x03FC00, length = 0x000400
}SECTIONS
{/* Allocate program areas: */.cinit : > FLASHA PAGE = 0, ALIGN(4).pinit : > FLASHA, PAGE = 0, ALIGN(4).text : >> FLASHA PAGE = 0, ALIGN(4)AppSize : > APPSIZE PAGE = 0UpLoadReq : > UPLOADREQ PAGE = 1codestart : > BEGIN PAGE = 0, ALIGN(4)GROUP{ramfuncs{ -l F021_API_F2837xD_FPU32.lib}} LOAD = FLASHA,RUN = RAMLS0,LOAD_START(_RamfuncsLoadStart),LOAD_SIZE(_RamfuncsLoadSize),LOAD_END(_RamfuncsLoadEnd),RUN_START(_RamfuncsRunStart),RUN_SIZE(_RamfuncsRunSize),RUN_END(_RamfuncsRunEnd),PAGE = 0, ALIGN(4)/* Allocate uninitalized data sections: */.stack : > RAMD1 PAGE = 1.ebss : >> RAMD1 PAGE = 1.esysmem : > RAMD1 PAGE = 1/* Initalized sections go in Flash */.econst : >> FLASHA PAGE = 0, ALIGN(4).switch : > FLASHA PAGE = 0, ALIGN(4).reset : > RESET, PAGE = 0, TYPE = DSECT /* not used, */Filter_RegsFile : > RAMD1, PAGE = 1SHARE_C1TOC2 : > RAMGS7, PAGE = 1SHARE_C2TOC1 : > RAMGS15, PAGE = 1Cpu1Share2Cpu2 : > CPU1TOCPU2RAM, PAGE = 1Cpu2Share2Cpu1 : > CPU2TOCPU1RAM, PAGE = 1/* The following section definitions are required when using the IPC API Drivers */ GROUP : > CPU1TOCPU2RAM, PAGE = 1 {PUTBUFFER PUTWRITEIDX GETREADIDX }GROUP : > CPU2TOCPU1RAM, PAGE = 1{GETBUFFER : TYPE = DSECTGETWRITEIDX : TYPE = DSECTPUTREADIDX : TYPE = DSECT} }/*
//===========================================================================
// End of file.
//===========================================================================
*/
CMD文件完成后就是SCI通信,使用CommMonitor10.0.3和友善串口助手调试SCI。
bl调试完后就是APP编写了。
APP是应用程序,主要改变的是CMD和加入SCI通信功能。
// The user must define CLA_C in the project linker settings if using the
// CLA C compiler
// Project Properties -> C2000 Linker -> Advanced Options -> Command File
// Preprocessing -> --define
#ifdef CLA_C
// Define a size for the CLA scratchpad area that will be used
// by the CLA compiler for local symbols and temps
// Also force references to the special symbols that mark the
// scratchpad are.
CLA_SCRATCHPAD_SIZE = 0x100;
--undef_sym=__cla_scratchpad_end
--undef_sym=__cla_scratchpad_start
#endif //CLA_CMEMORY
{
PAGE 0 : /* Program Memory *///BEGIN : origin = 0x080000, length = 0x000002 /* BEGIN is used for the "boot to SARAM" bootloader mode */RAMM0 : origin = 0x000122, length = 0x0002DE//RAMLS0 : origin = 0x008000, length = 0x000800 /* Local shared between CPU and CLA *///RAMLS1 : origin = 0x008800, length = 0x000800 /* Local shared between CPU and CLA *///RAMLS2 : origin = 0x009000, length = 0x000800 /* Local shared between CPU and CLA *///RAMLS3 : origin = 0x009800, length = 0x000800 /* Local shared between CPU and CLA */RAM_CLA : origin = 0x008000, length = 0x002000//RAMLS0 : origin = 0x00A000, length = 0x000800 //add//RAMLS5 : origin = 0x00A800, length = 0x000800 /* Local shared between CPU and CLA *///RAMD0 : origin = 0x00B000, length = 0x000800//RAMD1 : origin = 0x00B800, length = 0x000800//RAMGS0 : origin = 0x00C000, length = 0x001000 /* Global shared between CPU1 and CPU2 *///RAMGS1 : origin = 0x00D000, length = 0x001000 /* Global shared between CPU1 and CPU2 */RAM_CPU : origin = 0x00A800, length = 0x003800 /* Local shared between CPU and CLA *///RESET : origin = 0x3FFFC0, length = 0x000002//FLASHA : origin = 0x080002, length = 0x001FFE /* on-chip Flash *///FLASHB : origin = 0x082000, length = 0x002000 /* on-chip Flash *///FLASHC : origin = 0x084000, length = 0x002000 /* on-chip Flash *///FLASHD : origin = 0x086000, length = 0x002000 /* on-chip Flash *///FLASHE : origin = 0x088000, length = 0x008000 /* on-chip Flash *///FLASHF : origin = 0x090000, length = 0x008000 /* on-chip Flash */FLASH_BL : origin = 0x080002, length = 0x003FFERESET : origin = 0x088000, length = 0x000002BEGIN : origin = 0x088002, length = 0x000002VERSION : origin = 0x088004, length = 0x000002 /* Part of FLASHE. Used for "boot to Flash" bootloader mode. */SIGNATURE1 : origin = 0x088006, length = 0x000002 /* Part of FLASHE. Used for "boot to Flash" bootloader mode. */SIGNATURE2 : origin = 0x088008, length = 0x000002 /* Part of FLASHE. Used for "boot to Flash" bootloader mode. */SIGNATURE3 : origin = 0x08800a, length = 0x000002 /* Part of FLASHE. Used for "boot to Flash" bootloader mode. */VERSION2 : origin = 0x08800C, length = 0x000002VERSION3 : origin = 0x08800E, length = 0x000002//PROG : origin = 0x082000, length = 0x016000PROG : origin = 0x088010, length = 0x017FF0//FLASHG : origin = 0x098000, length = 0x008000 /* on-chip Flash */FLASHH : origin = 0x0A0000, length = 0x008000 /* on-chip Flash */FLASHI : origin = 0x0A8000, length = 0x008000 /* on-chip Flash */FLASHJ : origin = 0x0B0000, length = 0x008000 /* on-chip Flash */FLASHK : origin = 0x0B8000, length = 0x002000 /* on-chip Flash */FLASHL : origin = 0x0BA000, length = 0x002000 /* on-chip Flash */FLASHM : origin = 0x0BC000, length = 0x002000 /* on-chip Flash */FLASHN : origin = 0x0BE000, length = 0x002000 /* on-chip Flash */PAGE 1 : /* Data Memory */BOOT_RSVD : origin = 0x000002, length = 0x000120 /* Part of M0, BOOT rom will use this for stack */RAMM1 : origin = 0x000400, length = 0x000400 /* on-chip RAM block M1 */RAMLS4 : origin = 0x00A000, length = 0x000800 /* Local shared between CPU and CLA */RAMGS0_1 : origin = 0x00C000, length = 0x002000 /* Global shared between CPU1 and CPU2 *///RAMGS2 : origin = 0x00E000, length = 0x001000 /* Global shared between CPU1 and CPU2 *///RAMGS3 : origin = 0x00F000, length = 0x001000 /* Global shared between CPU1 and CPU2 */RAMGS2_3 : origin = 0x00E000, length = 0x002000//RAMGS4 : origin = 0x010000, length = 0x001000 /* Global shared between CPU1 and CPU2 *///RAMGS5 : origin = 0x011000, length = 0x001000 /* Global shared between CPU1 and CPU2 *///RAMGS6 : origin = 0x012000, length = 0x001000 /* Global shared between CPU1 and CPU2 *///RAMGS7 : origin = 0x013000, length = 0x001000 /* Global shared between CPU1 and CPU2 *///RAMGS8 : origin = 0x014000, length = 0x001000 /* Global shared between CPU1 and CPU2 *///RAMGS9 : origin = 0x015000, length = 0x001000 /* Global shared between CPU1 and CPU2 *///RAMGS10 : origin = 0x016000, length = 0x001000 /* Global shared between CPU1 and CPU2 *///RAMGS11 : origin = 0x017000, length = 0x001000 /* Global shared between CPU1 and CPU2 *///RAMGS12 : origin = 0x018000, length = 0x001000 /* Only Available on F28379D, F28377D, F28375D devices. Remove line on other devices. *///RAMGS13 : origin = 0x019000, length = 0x001000 /* Only Available on F28379D, F28377D, F28375D devices. Remove line on other devices. *///RAMGS14 : origin = 0x01A000, length = 0x001000 /* Only Available on F28379D, F28377D, F28375D devices. Remove line on other devices. *///RAMGS15 : origin = 0x01B000, length = 0x001000 /* Only Available on F28379D, F28377D, F28375D devices. Remove line on other devices. */RAMGS15 : origin = 0x01B000, length = 0x001000CLA1_MSGRAMLOW : origin = 0x001480, length = 0x000080CLA1_MSGRAMHIGH : origin = 0x001500, length = 0x000080UPP_TXMSGRAM : origin = 0x006C00, length = 0x000200UPP_RXMSGRAM : origin = 0x006E00, length = 0x000200CPU2TOCPU1RAM : origin = 0x03F800, length = 0x000400CPU1TOCPU2RAM : origin = 0x03FC00, length = 0x000400CANA_MSG_RAM : origin = 0x049000, length = 0x000800CANB_MSG_RAM : origin = 0x04B000, length = 0x000800
}SECTIONS
{/* Allocate program areas: */.cinit : > PROG, PAGE = 0, ALIGN(4).pinit : > PROG, PAGE = 0, ALIGN(4).text : > PROG, PAGE = 0, ALIGN(4)codestart : > BEGIN, PAGE = 0version : > VERSION PAGE = 0signature1 : > SIGNATURE1 PAGE = 0signature2 : > SIGNATURE2 PAGE = 0signature3 : > SIGNATURE3 PAGE = 0version2 : > VERSION2 PAGE = 0version3 : > VERSION3 PAGE = 0/* Allocate uninitalized data sections: */.stack : > RAMM1, PAGE = 1.ebss : > RAMGS2_3, PAGE = 1.esysmem : > RAMGS2_3, PAGE = 1/* Initalized sections go in Flash */.econst : > PROG, PAGE = 0, ALIGN(4).switch : > PROG, PAGE = 0, ALIGN(4).reset : > RESET, PAGE = 0, TYPE = DSECT /* not used, *//* CLA specific sections */Cla1Prog : LOAD = PROG,RUN = RAM_CLA,LOAD_START(_Cla1funcsLoadStart),LOAD_END(_Cla1funcsLoadEnd),RUN_START(_Cla1funcsRunStart),LOAD_SIZE(_Cla1funcsLoadSize),PAGE = 0, ALIGN(4)Cla1ToCpuMsgRAM : > CLA1_MSGRAMLOW, PAGE = 1CpuToCla1MsgRAM : > CLA1_MSGRAMHIGH, PAGE = 1Cpu1ToCpu2MsgRAM : > RAMGS0_1, PAGE = 1Cpu2ToCpu1MsgRAM : > RAMGS15, PAGE = 1Cpu1Share2Cpu2 : > CPU1TOCPU2RAM, PAGE = 1Cpu2Share2Cpu1 : > CPU2TOCPU1RAM, PAGE = 1#ifdef __TI_COMPILER_VERSION__#if __TI_COMPILER_VERSION__ >= 15009000.TI.ramfunc : {} LOAD = PROG,RUN = RAM_CPU,LOAD_START(_RamfuncsLoadStart),LOAD_SIZE(_RamfuncsLoadSize),LOAD_END(_RamfuncsLoadEnd),RUN_START(_RamfuncsRunStart),RUN_SIZE(_RamfuncsRunSize),RUN_END(_RamfuncsRunEnd),PAGE = 0, ALIGN(4)#elseramfuncs : LOAD = PROG,RUN = RAM_CPU,LOAD_START(_RamfuncsLoadStart),LOAD_SIZE(_RamfuncsLoadSize),LOAD_END(_RamfuncsLoadEnd),RUN_START(_RamfuncsRunStart),RUN_SIZE(_RamfuncsRunSize),RUN_END(_RamfuncsRunEnd),PAGE = 0, ALIGN(4)#endif
#endif#ifdef CLA_C/* CLA C compiler sections *///// Must be allocated to memory the CLA has write access to//CLAscratch :{ *.obj(CLAscratch). += CLA_SCRATCHPAD_SIZE;*.obj(CLAscratch_end) } > RAMLS4, PAGE = 1.scratchpad : > RAMLS4, PAGE = 1.bss_cla : > RAMLS4, PAGE = 1.const_cla : LOAD = PROG,RUN = RAMLS4,RUN_START(_Cla1ConstRunStart),LOAD_START(_Cla1ConstLoadStart),LOAD_SIZE(_Cla1ConstLoadSize),PAGE = 1
#endif //CLA_C
}/*
//===========================================================================
// End of file.
//===========================================================================
*/
配置好app所在地址和版本地址。
app文件使用的是HEX文件,生成需使用hex2000.exe。
在build设置中调用批处理,产生hex文件。
D:\TI\ccsv6\tools\compiler\c2000_15.12.3.LTS\bin\hex2000.exe -i -romwidth 16 -o E:\ccs82\**\*.hex E:\ccs82\**\*.out
为使文件更清晰烧入更安全,对hex文件进行处理,加入版本号和crc校验码,
在烧入完成后,计算的crc值和保存的crc值进行比较,验证程序是否完整。
调试过程中遇到的问题:
1,当CPU主频为200M时,在烧入flash过程中会出现死机现象,
把Fapi_initializeAPI(F021_CPU0_BASE_ADDRESS, 150);//200
改为150M后,可正常烧入,怀疑是晶振精度问题。
2,CPU 从bl跳转到app时,cpu进入非法中断,在TI官网查了很久,
发现是硬件的boot mode 被改了,复位后进入等待。
把 boot pin 改好后,可正常跳转。
APP可以使用简单的亮灯程序,其中不能有 IPCBootCPU2(C1C2_BROM_BOOTMODE_BOOT_FROM_FLASH)。
调试时可进入flash看程序和HEX文件有没有对应上。
一步一步调试。
28377D Bootloader相关推荐
- ARM的位置无关程序设计在Bootloader中的应用
http://www.mcuol.com/tech/107/26052.htm 引言 基于位置无关代码PIC(PositionIndependent Code)的程序设计在嵌入式应用系统开发中具有重 ...
- BootLoader与MCU启动过程
STM32那点事(1)_STM32F40_41xx启动文件详解 STM32 官方为广大开发者提供一套统一开发固件,主要是屏蔽寄存器封装,提供初始化等功能,较少开发者负担.只需要调用相关模块封装,对相关 ...
- grub2引导linux内核,一种基于grub2的linux系统启动bootloader的制作方法与流程
技术领域 本发明涉及服务器应用技术领域,具体涉及一种基于grub2的linux系统启动bootloader的制作方法. 背景技术: 当前linux系统的内核版本已经升级至4.0以上,最新的linux系 ...
- Bootloader
在嵌入式操作系统中,BootLoader是在操作系统内核运行之前运行.可以初始化硬件设备.建立内存空间映射图,从而将系统的软硬件环境带到一个合适状态,以便为最终调用操作系统内核准备好正确的环境.在嵌入 ...
- 利用Arduino Nano 对于另外的Arduino控制板下载Bootloader
简 介: 测试了利用Nano板对于基于MEGA328的Arduino的Bootloader下载,在此基础之上,利用了FT232TL的USB-TTL UART模块对测试MEGA328下载执行程序. 关键 ...
- bootloader烧写
http://blog.chinaunix.net/space.php?uid=7313069&do=blog&id=1676091 关于bootloader,先简要地总结一下.经过了 ...
- Bootloader的分区和启动
Bootloader大多是两阶段启动过程.第一阶段使用汇编来实现,完成一些依赖于CPU体系结构的初始化,并调用第二阶段的代码:第二阶段则通常使用C语言来实现,这样可以实现更复杂的功能,有更好的可读性和 ...
- bootloader详解(转载)
一.bootloader介绍 bootloader是硬件在加电开机后,除BIOS固化程序外最先运行的软件,负责载入真正的操作系统,可以理解为一个超小型的os.目前在Linux平台中主要有lilo.gr ...
- mini2440通过JLink烧写BootLoader到Nor Flash
开发板:友善之臂mini2440,64M Nand Flash 操作系统:Win7 电脑:笔记本Lenovo Y450 连接器:由于我的笔记本没有并口,所有买了个J-Link和转接板 软件:JLink ...
最新文章
- springmuvc如何设置jsp的input跳转_如何扩大私域流量?「上线了」跳转小程序来帮你...
- 详解C中volatile关键字
- 3. Port scanners (端口扫描器 4个)
- java web压缩过滤器_Java Web过滤器Filter(五)
- spring suite tool 添加namespace时只有bean一个
- Nuxt如何发起跨域资源请求?
- php自定义框架,「php 框架」自定义php框架(篇一) - seo实验室
- SQL学习之SELECT子句顺序
- com.taobao.config.client.exception.ConfigClientException: cannot get serverlist, so exit jvm env=DEF
- C++编程教程教你如何从零学起(免费高速下载)TXT文档分享
- python类与对象-如何派生内置不可变类型并修其改实例化行为
- 新版“北京通”今天上线 一个APP可办650件事儿
- Windows XP图片查看器打不开图片的解决办法
- 两个表格数据合并怎么完成?
- 景深决定照相机什么特性_相机的景深是什么
- 面试官:Redis中哈希分布不均匀该怎么办
- java.lang.reflect.AccessibleObject
- 20210514:廉价机械键盘学习
- 平板触控笔有哪些用途?超高性价比的触控笔推荐
- Week4 常用类 麻了