MC9S12XS128MAL Bootloader(1)

2021-07-22来源: eefocus关键字:Bootloader

首先BootLoader和用户程序是两个工程,两个工程代码通过修改PRM文件存储在不同的flash中,在通过PC指针的跳转实现两个工程的切换;


BootLoader程序


关中断

初始化时钟;

初始化CAN

初始化flash读写;

开中断,开CAN中断;

计时判断CAN是否收到bootloader开始报文;

时间到后没收到跳转到原用户程序启动向量;

收到后,开始读写flash,读写完后,PC指针跳转到用户程序地址(EEFE);

 

其中flash程序在读写flash时,要把代码copy到RAM中,因读写时不能再读flash中的代码


extern char __SEG_START_RAM_CODE[] ;


extern char __SEG_END_RAM_CODE[];


extern char __SEG_SIZE_RAM_CODE ;


void CopyCodeToRAM(void)


{

  memcpy((unsigned char *)0x3E00, (unsigned char *) __SEG_START_RAM_CODE,(unsigned int)  __SEG_SIZE_RAM_CODE);


}  //要写入的RAM地址0x3E00;    RAM_CODE是在prm中定义的需要复制到ram中的地址区域;


写完后再使用下代码跳转到EEFE;


_asm ldx $eefe;


_asm jmp 0,x;


Prm文件中修改如下,是代码压入指定位置:


ROM_F000      = READ_ONLY   DATA_NEAR  IBCC_NEAR 0XF000 TO   0xF5FF;


ROM_FB00      = READ_ONLY   DATA_NEAR  IBCC_NEAR 0XF600 TO   0xFDFF;


PLACEMENT


      _PRESTART,           


      STARTUP,                /* startup data structures */


      ROM_VAR,                /* constant variables */


      STRINGS,                /* string literals */


      VIRTUAL_TABLE_SEGMENT,  /* C++ virtual table segment */


      NON_BANKED,             /* runtime routines which must not be banked */


      COPY         


                            INTO  ROM_F000/*, ROM_4000*/;


 


      DEFAULT_ROM       INTO    ROM_FB00;  //  

关键字:Bootloader 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic542659.html

上一篇:飞思卡尔MC9S12XS TIME输入捕获
下一篇:mc9s12 c语言,飞思卡尔mc9s12的prm文件详解之二

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

MC9S12XS128MAL Bootloader(1)
首先BootLoader和用户程序是两个工程,两个工程代码通过修改PRM文件存储在不同的flash中,在通过PC指针的跳转实现两个工程的切换;BootLoader程序关中断初始化时钟;初始化CAN初始化flash读写;开中断,开CAN中断;计时判断CAN是否收到bootloader开始报文;时间到后没收到跳转到原用户程序启动向量;收到后,开始读写flash,读写完后,PC指针跳转到用户程序地址(EEFE);其中flash程序在读写flash时,要把代码copy到RAM中,因读写时不能再读flash中的代码extern char __SEG_START_RAM_CODE[] ;extern char __SEG_END_RAM
发表于 2021-07-26
MC9S12XS128 MAL BootLoader(2)
用户程序就按照正常程序写即可,需要注意以下几点程序写入固定的位置,不能和BootLoader程序的位置重合,否则有可能程序无法经过BootLoader下载后运行,同样也是在prm中进行相应的操作;需要用到中断的,要对中断向量进行偏移;对起始向量进行偏移;写入地址对齐。 1.BootLoader程序写入固定位置:ROM_C000      = READ_ONLY   DATA_NEAR IBCC_NEAR  0xC000 TO   0xEFDF;确保不会和BootLoader的F000开始的地址重合;INTO  ROM_C000
发表于 2021-07-26
嵌入式系统启动流程(学习笔记)
Bootloader启动阶段3个2两个阶段:汇编语言阶段,C语言阶段两次硬件初始化:基本硬件初始化,初始化时钟串口flash等大部分硬件初始化两次搬移:自搬移到内存,搬移内核到内存linux内核启动阶段自解压内核运行内核汇编部分,检测合法性(CPU类型等)运行内核C部分挂载rootfs运行第一个应用程序init(一般是linuxrc)根文件系统阶段(可运行应用程序)
发表于 2021-07-26
嵌入式系统启动流程(学习笔记)
【飞思卡尔 MC9S12】BootLoader 下位机
上一篇:【飞思卡尔 MC9S12】内部D-Flash模拟EEPROM本篇讲述BootLoader下位机的开发。刚到新公司第三天就接了一个项目,搞到现在才局部完成,更新比较慢了。先上传源码比较实际,再介绍基本功能。源码地址:https://download.csdn.net/download/u010875635/11692136实际上搞定CAN通信和Flash读写,Bootloader下位机就没什么问题了。注意一下Bootloader与App的分区划分。Bootloader与App分别占用2个非分页区。Bootloader: 0xC000-0xFFFF(实际到0xF7FF,保留一个sector给vector table
发表于 2021-07-16
【飞思卡尔 MC9S12】<font color='red'>BootLoader</font> 下位机
MC9S12XEP 的bootloader解析
MC9S12XEP 的bootloader 归纳总结 两个要点:1.ROM不要重叠,bootloader的代码与用户应用代码不要重叠。各自设置各自的ROM区域;2.bootloader有一部分代码是在RAM里运行的,所以RAM也不能重叠,RAM可以分为如下三种:       a.) 堆栈区域;       b.)bootloader代码变量区域;       c.)bootloader 中断地址;      上述三种RAM类型,不可重叠。先说bootloader部分,需要处理的步骤
发表于 2021-07-15
小广播
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2021 EEWORLD.com.cn, Inc. All rights reserved