DSP篇--C6701功能调试系列之Bootloader程序自引导

news/2024/11/17 18:59:54/

目录

1、头文件法

2、一级boot

3、二级boot

4、flash程序3取2测试


        调试的前期准备可以参考前面的博文:DSP篇--C6701功能调试系列之前期准备_nanke_yh的博客-CSDN博客 

        boot程序的大小不能超过1KB它主要完成以下几个功能:第一是配置DSP的EMIF寄存器,然后从FLASH中把各个段中的程序和数据拷贝到用户指定的存储器物理地址中,同时跳到程序的入口点。在此应当注意:C程序的入口点并非main(),而是_c_int00,这是因为在调用main()函数之前,系统必须先建立C语言的运行环境。如为系统堆栈定义.stack段、建立初始化堆栈和祯指针、初始化全局和静态变量等。另外,由于boot程序本身也是COFF文件格式,所以也需格式转换。

1、头文件法

        使用的头文件法可参考:DSP篇--C6701 BOOT(头文件烧写法)_nanke_yh的博客-CSDN博客_dsp6701重建工程

2、一级boot

        目的:在CAN测试程序的基础上,利用头文件法将其一级boot烧写进flash中,并实现上电程序自启。

        方法:头文件法。保存出程序段和数据段。

注意:头文件保存过程:先连接仿真器,再load .out文件,进而利用CCS软件的File->Data->Save功能保存出.dat文件,最后转换成.h即可。

3、二级boot

        目的:在CAN测试程序的基础上,利用头文件法将其二级boot烧写进flash中,并实现上电程序自启。

注意:二级boot与一级boot之间的区别在于:

①在.c文件中加入代码#pragma CODE_SECTION(InitCAN, ".prog"),也就是需要将部分程序代码放置在flash以外的地址区域(这里放在的是SRAM区域)。

②在.cmd文件的MEMORY中需要增加新段:

         SRAM:  o = 2000000h l = 00200000h 

  同时,在SECTIONS中增加映射段:

         .prog >       SRAM

③在boot.asm文件中则需要对新增加的段进行地址映射:

_boot_loop:

ldh *B4++, B5

  mvkl BOOT_SIZE,B6

add 1,A1,A1

 || mvkh BOOT_SIZE,B6

cmplt A1,B6,B0

NOP

sth B5,*A4++

 [B0] B _boot_loop

NOP 5

mvkl EMIF_CE2,A4

 || mvkl EMIF_CE2_DATA,B4

mvkh EMIF_CE2,A4

 || mvkh EMIF_CE2_DATA,B4

stw B4, *A4

mvkl 0x02000000,A4

 || mvkl 0x01440000,B4

mvkh 0x02000000,A4

 || mvkh 0x01440000,B4

zero A1

_sramboot_loop:

ldw *B4++, B5

mvkl SRAM_BOOTSIZE,B6

add 1,A1,A1

 || mvkh SRAM_BOOTSIZE,B6

cmplt A1,B6,B0

NOP

stw B5,*A4++

 [B0] B _sramboot_loop

  NOP 5

mvkl .s2 _c_int00, B0

mvkh .s2 _c_int00, B0

B    .s2 B0

nop 5

④二级boot头文件法保存出来的将会有三段:程序段、数据段以及flash地址外映射段(SRAM段)。在烧写过程中也就需要多写入一个头文件。

4、flash程序3取2测试

        目的:在二级boot的CAN测试程序基础上,在 flash中烧写四份同样的数据,增加冗余以防止程序被打翻无法自启,从而设定3取2策略。如若主程序不能自启,FPGA则将主程序放置位置擦除,并比对剩下3份数据,写入正确程序以实现程序自启。

        方法:头文件法。

注意:在can测试程序的boot中需要更改映射地址,然后在flash烧写程序中改成相应的地址。改动的地址需要根据硬件师FPGA中设置的大小来调整。

        代码示例:

 for(i = 0 ; i < 4; i++)//写四份
{ProgramFlash (PRAM, 0x01400000 + i*0x40000, 0x6E0);//boot: 0x1400000ProgramFlash (DRAM, 0x01420000 + i*0x40000, 0x160); //boot:0x1410000ProgramFlash (SRAM, 0x01424000 + i*0x40000, 0x40); //boot: 0x1412000
}

        此处的flash读写和can测试boot的功能部分参考:

DSP篇--C6701功能调试系列之 FLASH测试_nanke_yh的博客-CSDN博客

DSP篇--C6701功能调试系列之CAN总线测试_nanke_yh的博客-CSDN博客


http://www.ppmy.cn/news/4221.html

相关文章

华为机试真题 Java 实现【投篮大赛】【2022.11 Q4 新题】

目录 题目 思路 考点 Code 题目 你现在是一场采用特殊赛制投篮大赛的记录员。这场比赛由若干回合组成,过去几回合的得分可能会影响以后几回合的得分。 比赛开始时,记录是空白的。 你会得到一个记录操作的字符串列表 ops,其中ops[i]是你需要记录的第i项操作,ops遵循下述…

第二十八章 linux-设备树二

第二十八章 linux-设备树二 文章目录第二十八章 linux-设备树二设备树是什么为什么需要设备树设备树技术如何工作设备树dts文件在哪里dts的格式简介dts的节点格式imx6ull-14x14-evk.dtsproperty常见预定义标准属性gpio实例驱动中device来源设备树是什么 device tree&#xff0…

【C++】list 的模拟实现

​&#x1f320; 作者&#xff1a;阿亮joy. &#x1f386;专栏&#xff1a;《吃透西嘎嘎》 &#x1f387; 座右铭&#xff1a;每个优秀的人都有一段沉默的时光&#xff0c;那段时光是付出了很多努力却得不到结果的日子&#xff0c;我们把它叫做扎根 目录&#x1f449;前言&…

软考《系统集成项目管理工程师》必备100题(3)

新一轮软考备考来啦~为了帮助大家提高备考效率&#xff0c;将2023上半年软考《系统集成项目管理工程师》必备100题&#xff0c;分享给大家&#xff0c;快来跟着一起打卡学习吧&#xff01; 11.项目可行性研究阶段包括哪些? (1)机会可行性研究 (2)初步可行性研究 (3) 详细可…

升级Linux服务器你必须要知道的事

服务器安全是每个系统管理员的头等大事。除了拥有第三方安全工具&#xff08;如防火墙&#xff0c;DDoS保护等&#xff09;外&#xff0c;使生产服务器上的所有代码保持最新也是极为重要的。 当您的应用程序投入生产时&#xff0c;升级它的风险更大。如果您的服务器由Linux驱动…

Oracle PL/SQL——高级查询

emp员工表结构 SQL> desc test.emp名称 是否为空? 类型----------------------------------------- -------- ----------------------------EMPNO NOT NULL NUMBERENAME …

通信技术原理考试题

1、指出FDMA与OFDMA两者有何差异 OFDMA&#xff0c;强调的是在OFDM这种调制方式下的多址。 FDMA&#xff0c;强调的是频分的多址方式&#xff0c;与之对应的是TDMA和CDMA。 因为OFDMA系统中的多址方式可以是FDMA,TDMA甚至CDMA(这个比较少)等多种方式的结合。 在几乎所有的频分…

基础知识点--继承

#include<iostream> using namespace std; // class A // 父类 { private: int privatedateA; protected: int protecteddateA; public: int publicdateA; }; // class B :public A // 基类 A 的派生类 B&#xff08;公有继承&#xff09; { publ…