Chinaunix首页 | 论坛 | 博客
  • 博客访问: 128362
  • 博文数量: 22
  • 博客积分: 1410
  • 博客等级: 上尉
  • 技术积分: 225
  • 用 户 组: 普通用户
  • 注册时间: 2008-12-15 19:03
文章分类

全部博文(22)

文章存档

2011年(1)

2010年(1)

2009年(20)

我的朋友

分类: 嵌入式

2009-10-30 11:56:46

0.
omap L137与ti的 Dm6446,OMAP3530 处理器都是基于arm+DSP双核的架构。但是omapl137与后两者的不同就是137的dsp和arm都是“主”的,都能看到所有外设。而后两者DSP是“辅”的除了极少的几个arm给dsp的中断、dsp的定时器等极少片上设备外,DSP看不到其它的设备。因此在后两者的应用时,把DSP几乎是作为一个纯的协处理使用的。137上电时ARM处于挂起状态,等待DSP给它复位。而后两者是DSP处于挂起状态,等待ARM给他复位。

omap L137内部固化有D800K001 Bootloader,能实现DSP端的各种方式的引导(详细请参考SPRAB04)。能实现SPI,NOR,NAND,HPI,UART等引导方式。原装板子通过SPI引导,瑞泰的板子用NAND来引导。

NAND必须挂载在 EMIFA的CS3上。NOR必须挂载在CS2上。D800K001 会读取NAND FLASH的块1,块0不被读取。块1上烧写有 DSP AIS 。瑞泰的板子上的flash型号是ST NAND512W3A2BN6,此NAND 为8位模式,每个page为512+16byte,每个block包含32个page,这样算下来每个block为16K字节大小,所以DSP AIS镜像不能超过16K ,查看PSP_02_20_00_07/bin/dsp-nand-ais.bin 只有12K,满足要求。

AIS镜像是这么一种机制,能使得D800K001 Bootloader,把镜像copy到内存的相应地址去执行,这种AIS文件可以通过TI提供的工具AISgenD800K001-0.8.0.0-setup.exe生成

1.
看flash_writers的代码实现(这个工具会通过仿真器把dspais镜像,armubl镜像和uboot烧写进NANDflash),它把dspais写进NAND的第1个block(块号从0开始),然后把armubl写进第2、3块,再把Uboot写进第4,5,...块,具体多少取决于uboot的长度。并且会附加上magic number(后面会用到)

2.
看dspubl的代码,看其cmd文件

MEMORY
{
 L2RAM  org=0x80010000 len=0x00010000 /* L2 RAM/Cache */
}

SECTIONS
{
 .text       > L2RAM
 .const      > L2RAM
 .bss        > L2RAM
 .far  > L2RAM
 .switch  > L2RAM
 .stack      > L2RAM
 .data       > L2RAM
 .cinit  > L2RAM
 .sysmem  > L2RAM
 .cio  > L2RAM
}
这样bootloader会自动把DSP的执行镜像copy到0x80010000执行的。为什么是0x80010000,从0x80000000处会放arm的启动代码。
分析源代码,发现其会从NAND中加载ARM的镜像到gNandBoot.entryPoint,其值为0x80000000,见flash_writers的代码
              NAND_readPage(hNandInfo,block,page++,(&rxBuf[i*(hNandInfo->dataBytesPerPage)]));  /* Copy the data */
ti的处理器电源管理做的比较好,很多模块都可以实现断电以便达到节能效果。所以代码接着上电dMAX(一个快速copy的模块,672x的文档有讲),然后通过dmax把一小段arm执行代码复制到 0xffff0000处(reset后缺省arm的ram,rom是Enable的)。然后唤醒arm。这时DSP端就退出main了,此时DSP处于什么状态,我还不清楚,以后再研究。

3.
再看ARM端。2已经提过,0xffff0000处已经有启动代码了,这个启动代码,其实就是跳转到0x80000000,这正好不会覆盖dsp的代码(0x80010000),不过此时dsp已经退出main了。
arm首先把DSP设置为reseting状态,接着做一些SDRAM等外设的初始化。然后把从块2开始的uboot代码copy到0xc1080000的sdram处然后执行。过程和2类似,这就不再描述。

 

阅读(2546) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

TsuiLei2009-11-19 15:34:42

最近在做omapl137的东西,看到这篇文字,受益颇多。谢谢了。