DSP

OMPL138及U-Boot的启动过程分析(一)

2019-07-13 17:07发布

一直阅读代码以及实验了一段时间,这次就趁着这个时间将过往的一些东西整理一下。 OMAPL138TI的一款DSP+ARM的双核工业处理器。 TI的芯片上都有ROMRead OnlyMemroy)内存,这块ROM内存只能在芯片出厂时以掩膜的方式固化,一般用户是没有办法进行更改的。ROM里面的代码,也分许多版本,我所使用这款的ROMROMIDd800k008 先说一下OMAPL138的启动过程吧。 1OMAPL138启动流程:         上电后,DSP核先启动,ARM在这个时候是禁用状态的。DSPROM里面的代码将会:                 - 读某些寄存器,确认ARM核存在(不然将只有DSP做引导)                 - 程序PDSP0准备ARM复位向量                 - ARM复位,并让ARM从它自己的ROM运行(这就是与OMAPL137主要的不同,ARM有它自己的ROM,并且将会主导之后的引导进程)                 - DSP进入空闲循环状态。 2ARM开始从ROM执行后,它将会:                -  DSP置为禁用状态                -  初始化硬件,例如,PSCPLL,外部存储设备等                - bootcfg寄存器决定引导模式,它将会从适当的引导媒体去载入和运行ARM UBL,例如SPI flashNANDNOR 3ARM UBL开始运行。它的行为是软件定义的。例如:                 - TI提供的ARM UBL将会载入并运行UBoot,也将进一步运行LinuxLinux应用能通过DSPLINK去载入和运行DSP。这个模式与达芬奇模式一样                - 工业客户能在某些引导媒体选择载入并运行DSP AIS镜像。同时,ARM UBL也能开始引导UBOOTLinux。以这种方式的话,DSP能在Linux引导结束前处理数据。                OMAPL138ROMBootloader支持多种启动模式,而启动模式是有硬件上的配置决定的,由芯片管脚BOOTMODE[7:0]通过外部上、下拉电阻设置。ARM启动前的这一部分是看不到,只有到了ARM开始读取启动模式的时候才是可见的(实际上是我找不到相关的细节可以观察的了)。                这里所使用的启动方式是Nor Flash的模式,而Nor FlashBoot模式包括三种:                1. LegacyNor boot(传统的Nor引导)                2. DirectNor boot(直接引导)                3. AISNOR boot(AIS文件的引导)                根据官方的文档Using theTMS320C6748/C6746/C6742 Bootloader所说的,所有的引导模式,除了HPI2/3Nor 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 对于这种引导方式,bootloaderNorFlash的开始(0x60000000)拷贝一块COPY字段大小的数据到DSPL2 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/C6742bootloader使用AI作为引导目标的。AIS是一种二进制语言,使用32位字段小端格式访问。AIS开始由一个魔术字(magic word0x41504954)和某些AIS命令bootloader会按照顺序去执行这些命令。Jump &Close(J&C)命令标识了结尾。                            每个AIS命令由一个Opcode,之后跟着一个或多个参数,再一些设置的数据组成。 Opcode和参数是以一个字的(4个字节)宽度。如果数据长度不足4个字节,那么将会用0去填充。 后续将对手头上的AIS文件进行实例分析。