TI中文支持网
TI专业的中文技术问题搜集分享网站

关于DSP6747 boot Nor模式加载段问题

TI技术您好:

         我用的DSP6747的boot nor模式,Flash中的段需要自己烧写和加载,现在有两个问题咨询下:

        1、cmd中哪些段是必须烧写到Flash中的?我之前只知道vectors段和text段,后来经过测试发现,.cinit段也需要烧写和加载。其他必须要加载的段还有什么?有哪些官方文档可以参考?

        2、关于C6747 boot Nor模式的Configure Word,我看手册说上电后,CPU会自动读取4个字节,即Configure word,然后判断数据宽度和要加载的Secondbootloader大小,是1k还是多少,那么这个Configure word被cpu读取后放到哪个位置了,是L2RAM 首地址0x11800000吗?

            我看手册说是0x11800000,然后调到0x11800004位置开始执行second bootloader代码,我的second bootloader必须放到0x11800004位置吗?

   十分感谢。

beihang873:

回复 Shine:

Shine Zhang 您好:

   很高兴您能帮助解答问题,我还有一点疑问:

   就是除了.vectors段 .text段 ,cinit段以外,像是.far .bss这些需要烧写到Flash中吗?

  我再cmd中加入 .bss       : load = FLASH_BSS, run = BSS_L2RAM ,编译工程就会出现警告

  LOAD placement ignored for ".bss": linker.

  意思好像是加载被忽略了。.far也是同样问题,我理解的意思就是这两个不需要烧写到Flash,是吗?

十分感谢。

Shine:

回复 beihang873:

.bss段是非初始化段,不用烧写。你可以看一下map文件,里面会告诉哪些段是初始化段,哪些是非初始化段。

在hex工具转的时候,用-boot选项就可以把所有的初始化段转成hex文件。请看下面的文档第275页上的表。http://www.ti.com/lit/ug/spru186w/spru186w.pdf 

beihang873:

回复 Shine:

Shine Zhang您好:

  关于以下cfg_word的空间分配长度不应该是0x00000004吗,为什么是0x00000020,我试了以下,改成长度为4,结果生成的map文件运行地址给我改成了0x00000020,这个是为什么?

-stack 0x1000
-heap0x1000MEMORY {CFG_L2RAM:o = 0x11800000l = 0x00000020PROG_L2RAM:o = 0x11800020l = 0x00003FE0
}SECTIONS {.entryPoint >PROG_L2RAM.text	> PROG_L2RAM.data	> PROG_L2RAM.const	> PROG_L2RAM.far	> PROG_L2RAM.switch	> PROG_L2RAM.cinit	> PROG_L2RAM.bss	> PROG_L2RAM.cio	> PROG_L2RAM.stack	> PROG_L2RAM.sysmem	> PROG_L2RAM.nor_cfg_word > CFG_L2RAM
}

Shine:

回复 beihang873:

定义长度4也可以。请问你是怎么改的?map文件打开的是新生成的吧?

beihang873:

回复 Shine:

Shine Zhang您好:

   是这样的,我现在主要想弄明白为什么我的配置字给3个字节的00,二次启动代码运行位置在0x118000000的位置也能运行,而且我的用户程序都已经大于了64K了跑的也没问题。为了确认配置字的问题,我特意做了一个实验:

  我主板的配置: DSP6747+FPGA架构,DSP和FPGA共用FPGA的SPI Flash,DSP的复位引脚和EMIF总线和FPGA相连接。

我利用FPGA中的FIFO,用串口向FIFO中发送2个0x00,然后释放DSP复位引脚,发现DSP EMIF_Addr增加到了0x02,说明共读了两个字节停止了。

我利用FPGA中的FIFO,用串口向FIFO中发送3个0x00,然后释放DSP复位引脚,发现DSP在CS2空间读取了0x400个数据,刚好1K,加上3个配置字是0x403,

我利用FPGA中的FIFO,用串口向FIFO中发送4个0x00,然后释放DSP复位引脚,发现DSP在CS2空间读取了0x400个数据,刚好1K,加上3个配置字是0x403,

我不知道为什么,这个问题还是没想明白,这种现象是否正常?

多谢您。

Tony Tang:

回复 beihang873:

有啥不明白的,0不就是1KB的legacy NOR boot吗。

beihang873:

回复 Tony Tang:

Tony Tang 您好:

       这个配置的说明我再datasheet上看到了,我不明白的地方有两点:

      第一点事为什么我配置字写3个0x00,和写4个0x00,cpu都会自动拷贝1K,按照说法应该是4个0x00

     第二点,按照手册说法,应该是拷贝4个0x00,然后跳转到0x11800004处执行boot代码,为什么我放到0x11800000处,配置字是3个0x00,我的用户代码也可以正常执行。

十分感谢您。这个问题我想了好几天了,还是没想太明白。

Tony Tang:

回复 beihang873:

beihang873第一点事为什么我配置字写3个0x00,和写4个0x00,cpu都会自动拷贝1K,按照说法应该是4个0x00

DSP并不知道你配置了几个,它的动作只有一个,上电后从flash首地址去读4个byte,不管你配置了几个。所以你认为只配置了3了,那第4个byte的值是多少呢?是不是它读回的也是0呢。

beihang873     第二点,按照手册说法,应该是拷贝4个0x00,然后跳转到0x11800004处执行boot代码,为什么我放到0x11800000处,配置字是3个0x00,我的用户代码也可以正常执行。

你的cmd里的下面这句是根据什么来的?你的flash里的内容到底是什么样的?

.entryPoint >PROG_L2RAM

赞(0)
未经允许不得转载:TI中文支持网 » 关于DSP6747 boot Nor模式加载段问题
分享到: 更多 (0)