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