te2440使用dnw下载的时候地址为何设置为0x30800000

我看了te2440的bootloader源码,那个0x30800000并非在te2440的bootloader中规定的,而是当电脑的dnw向2440发送数据的时候,最先的4个字节是要下载到SDRAM的地址,接着后4个字节是要下载的数据的大小(这一步是在usb的中断中判断的,/usbout.c中的Ep3Handler())。


在option.h中看到如sdram分部:
//64MB
// 0x30000000 ~ 0x30ffffff : Download Area (16MB) Cacheable
// 0x31000000 ~ 0x33feffff : Non-Cacheable Area
// 0x33ff0000 ~ 0x33ff47ff : Heap & RW Area
// 0x33ff4800 ~ 0x33ff7fff : FIQ ~ User Stack Area
// 0x33ff8000 ~ 0x33fffeff : Not Useed Area
// 0x33ffff00 ~ 0x33ffffff : Exception & ISR Vector Table

 

也就是理论上bootloader规定:0x30000000 ~ 0x30ffffff都能作为在电脑上dnw里设置的下载地址。(待验证)(失败

 

 

DNW数据的收取是通过dma收取的,用的是dma2进行的,它对应的是usb的EP3 FIFO端点(2440有5个fifo端点,EP0是双向控制端点,EP(1~4)每个端点都支持中断或dma,是批量端点)

 

在连接脚本.lds里,设置了符号

//如下引用(需整理)

第四章 获取映像符号

4.1 获得连接器预定义符号

连接器定义了一些包含$$的符号。这些符号及其他所有包含$$的名称都是ARM的保留字。这些符号被用于指定域的基地址,输出段的基地址和输入段的基地址及其大小。

你可以在你的汇编语言程序中引用这些符号地址,把它们用作可重定位的地址,也可能在C或C++代码中使用exern关键字来引用它们。

4.1.1与域相关的符号

当armlink生成映像时产生与域相关的符号。对每个包含ZI输出段执行域来说,armlink都产生包含了$$ZI$$的附加符号。

Load$$region_name$$Base            域的装载地址

Image$$region_name$$Base           域的执行地址

Image$$region_name$$Length             执行域的长度(4*字节)

Image$$region_name$$Limit               超出执行域结尾的字节地址

Image$$region_name$$ZI$$Base         在此域中ZI输出段的执行地址

Image$$region_name$$ZI$$Length      ZI输出段的长度(4*字节)

Image$$region_name$$ZI$$Limit        超出执行域中ZI输出段结尾的字节地址

在ZI域以上放置堆栈:stack和heap

通常使用与域相关的符号来在ZI域以上直接设置堆栈。请参考ADS Development Giude中有关ROM的章节。

 

4.1.2段相关的符号

一个简单的映像有三个输出段(RO,RW和ZI),这三个段产生三个执行域。对每个映像中的输入段,armlink都产生如下的输入符号:

Image$$RO$$Base        RO输出段的起始地址

Image$$RO$$Limit              超出RO输出段结尾的第一个字节地址

Image$$RW$$Base       RW输出段的起始地址

Image$$RW$$Limt        超出RW输出段结尾的第一个字节地址

Image$$ZI$$Base         ZI输出段的起始地址

 

 

在2440init.s中引用了这些代码,尤其是在跳转到Main函数的时候,其实跳到了在.lds中设置的执行域的地址。(在以前已经把nand里的代码拷贝到了sdram),所以去sdram中执行Main就是去执行nand中4Kb以后的C函数了。

 

不能从0x30000000开始下载的原因是,此时bootloader已经在sdram中运行了,从0x30000000开始的。(待考证!)

 

 

在option.inc

        详解连接地址:这个Option.inc文件主要是为设置时钟服务的,选择好分频系数http://blog.csdn.net/redxu/archive/2010/12/09/6064975.aspx

你可能感兴趣的:(te2440使用dnw下载的时候地址为何设置为0x30800000)