一直阅读代码以及实验了一段时间,这次就趁着这个时间将过往的一些东西整理一下。
OMAPL138
是TI的一款DSP+ARM的双核工业处理器。
TI
的芯片上都有ROM(Read OnlyMemroy)内存,这块ROM
内存只能在芯片出厂时以掩膜的方式固化,一般用户是没有办法进行更改的。ROM里面的代码,也分许多版本,我所使用这款的ROM的ROMID是d800k008。
先说一下OMAPL138的启动过程吧。
1
、OMAPL138启动流程:
上电后,DSP核先启动,ARM在这个时候是禁用状态的。DSP的ROM里面的代码将会:
-
读某些寄存器,确认ARM核存在(不然将只有DSP做引导)
-
程序PDSP0准备ARM复位向量
-
将ARM复位,并让ARM从它自己的ROM运行(这就是与OMAPL137主要的不同,ARM有它自己的ROM,并且将会主导之后的引导进程)
- DSP
进入空闲循环状态。
2
、ARM开始从ROM执行后,它将会:
-
把DSP置为禁用状态
-
初始化硬件,例如,PSC,PLL,外部存储设备等
-
读bootcfg寄存器决定引导模式,它将会从适当的引导媒体去载入和运行ARM UBL,例如SPI
flash,NAND,NOR等
3
、ARM UBL开始运行。它的行为是软件定义的。例如:
- TI
提供的ARM UBL将会载入并运行UBoot,也将进一步运行Linux。Linux应用能通过DSPLINK去载入和运行DSP。这个模式与达芬奇模式一样
-
工业客户能在某些引导媒体选择载入并运行DSP AIS镜像。同时,ARM UBL也能开始引导UBOOT和Linux。以这种方式的话,DSP能在Linux引导结束前处理数据。
OMAPL138
的ROMBootloader支持多种启动模式,而启动模式是有硬件上的配置决定的,由芯片管脚
BOOTMODE[7:0]通过外部上、下拉电阻设置。ARM启动前的这一部分是看不到,只有到了ARM开始读取启动模式的时候才是可见的(实际上是我找不到相关的细节可以观察的了)。
这里所使用的启动方式是Nor Flash的模式,而Nor Flash的Boot模式包括三种:
1. LegacyNor boot(传统的Nor
引导)
2. DirectNor boot(直接引导)
3. AISNOR boot(AIS
文件的引导)
根据官方的文档Using theTMS320C6748/C6746/C6742 Bootloader所说的,所有的引导模式,除了HPI和2/3的Nor
Boot方式之外,其它所有的引导模式都使用AIS作为引导目标。这里这个AIS就很关键了,我在工作中所使用的这个模式就是这样第三种,使用AIS
NOR boot的方式,AIS文件后面说,先说一下Nor启动方式:
Nor Flash
的启动方式需要Nor Flash已经连接在了外部存储器接口(EMIFA)上的EMA_CS[2]接口上,对于这种启动模式,bootloader会将EMIFA配置成8-bit的访问模式去从Nor
Flash的上读取第一个字。这第一个字表明Nor Flash应该被8位或16位的访问方式访问,以及使用什么样的引导方法。
下面解释这个配置字:
Reserved
为保留位,这里不做解释;
COPY
:从Nor Flash的基地址拷贝到数字信号处理器(DSP)的L2
RAM的数据长度。这个值只在Legacy boot模式被使用,单位是KB。
范围:0x01 1KB
0x02 2KB
...
0x0E 14KB
0X0F 15KB
METHOD
:这个字段表明使用的是哪种Nor Boot
0x0
: Legacy NORboot
0x1
: Direct NORboot
0x2
: AIS NOR boot
ACCESS
: EMIFA的访问模式
0x0
: 8-bit的访问方式
0x1
: 16-bit的访问方式
如果ACCESS字段为0x01,那么bootloader在使用METHOD特定的引导方式之前将EMIFA重新配置为16-bit的访问方式。bootloader的默认配置是8-bit的访问方式。
Legacy Nor boot
对于这种引导方式,bootloader从NorFlash的开始(0x60000000)拷贝一块COPY字段大小的数据到DSP的L2
RAM的开始地址上(0x11800000)。这块数据应该被设置成为第二段bootloader。如下所示的:
Direct Nor boot
对于这种引导方式,bootloader通过分支地址0x60000004将控制权转移给存在于NorFlash中的第二段bootloader。第二段bootloader直接从这里执行。
AIS NOR Boot
对于这种引导方式,bootloader要求AIS镜像从0x6000004开始,然后被映射到NorFlash
在我所使用的系统上使用的方式是AISNORBOOT,所以介绍下AIS的文件:
AIS
是一种存储引导镜像的格式。除了上述提到的HPI和两种NOR-boot模式之外,所有的模式都是支持C6748/C6746/C6742的bootloader使用AI作为引导目标的。AIS是一种二进制语言,使用32位字段小端格式访问。AIS开始由一个魔术字(magic
word0x41504954)和某些AIS
命令bootloader会按照顺序去执行这些命令。Jump &Close(J&C
)命令标识了结尾。
每个AIS命令由一个Opcode,之后跟着一个或多个参数,再一些设置的数据组成。
Opcode和参数是以一个字的(4个字节)宽度。如果数据长度不足4个字节,那么将会用0去填充。
后续将对手头上的AIS文件进行实例分析。