OMAPL138_UBL移植

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

OMAPL138_UBL移植
OMAPL138_UBL移植
V1.0
xxxxx有限公司
2011年xx月
版本历史
目录
1OMAPL138工作流程 (1)
2OMAPL138启动方式 (4)
2.1Samsung_NAND_FLASH命名规则 (5) 2.2NON-AIS Boot modes (5)
2.3AIS Boot modes (6)
2.4启动方式实例分析 (7)
3Serial Boot and Flash Loading Utility (9) 3.1TI Flash and Boot Utilities (9)
3.2Serial Flasher Options (9)
3.3串口烧写 (10)
3.3.1步骤 (10)
3.3.2烧写信息 (10)
4UBL移植 (13)
4.1移植相关 (13)
4.2DMDL BOARD (15)
4.2.1DDR参数配置 (15)
4.2.2UART选择 (17)
4.2.3UART波特率设置 (17)
5UBL编译 (18)
5.1安装软件 (18)
5.2选型 (19)
5.3编译 (20)
5.4解决问题 (23)
5.4.1问题一 (23)
5.4.2问题二 (24)
6代码分析 (25)
6.1入门代码start.S (25)
6.2ubl.c (26)
6.2.1main函数 (26)
6.2.2LOCAL_boot函数 (26)
6.2.3DEVICE_init函数 (27)
6.2.4NANDBOOT_Copy函数 (29)
6.2.5UBL启动信息 (31)
7参考资料 (32)
8资料查询 (33)
8.1硬件平台相关 (33)
8.2Linux安装相关 (33)
8.3底层平台相关 (33)
8.4应用程序/硬件 (34)
1OMAPL138工作流程
对于OMAPL138,上电时默认的是ARM核被禁止,DSP核被使能。

所以开机时是DSP核先启动,
然后是DSP的ROM Bootloader做一些初始化后使能ARM核后,ARM核才开始运行。

不同的达芬奇处理器是不同的,比如
OMAPL137就是反过来的,弄不清楚的话就去看PSC模块中的ARM 和DSP核的默认值就可以了。

1.开机上电,用户在BOOT 管脚上配置的启动方式被锁定采样到SYSCFG模块的BOOTCFG寄
存器,从而确定处理器的启动方式。

2.PSC模块中的启动默认值是:ARM核休眠,DSP核使能。

所以这时候DSP启动,DSP从片内
DSP L2 ROM处读取指令执行。

这里有TI已经固化的仅DSP核可以访问的ROM Bloader,简
称DSP RBL。

3.DSP的RBL做一些简单的初始化后,就通过PSC模块使能ARM 核,休眠自己。

然后ARM就
开从片内的RAM Local ROM读取指令并执行,这里面有TI已经固化好的ARM ROM Bootloader,
简称ARM RBL。

4.ARM的RBL做一些初始化后,根据BOOTCFG寄存器的设定,从指定的地方读取用于启动
U-Boot的Bootloader,即U-Boot BootLoader,简称UBL(user boot loader)。

UBL可以通过串口
方式烧写(通过FlashAndBootUtils套件)或者仿真器(通过nand_write.out)烧写。

5.当ARM RBL读取到UBL后就根据AIS格式中的命令初始化、加载并运行UBL。

然后就是UBL
加载运行U-Boot,U-Boot根据启动参数启动Linux,Linux根据启动参数加载根文件系统。

6.ARM核上的Linux就运行起来,但DSP还处于休眠状态。

在Linux经过一系列初始化后会执
行根文件系统中/etc/profile的指令。

我们在这里添加插入DSP Link内核模块的命令,就会在/dev
目录下产生一个叫dsplink的设备文件。

这个DSP Link内核模块
就是通过前面所说的中断和PSC
设定就可以完成与DSP的通信与控制。

(当然并不一定要在/etc/profile中,也可以其他启动文件
中,如/etc/init.d/rcS)。

7.执行ARM端应用程序,在ARM端程序中使用DSP Link的库函数来访问dsplink设备,从而在
用户空间实现对DSP核的控制与通信。

在ARM端程序中使用DSP Link库函数加载DSP端的
应用程序到内存,使用DSP Link的PROC函数启动DSP核。

然后ARM核和DSP核就都各自
独立运行起来了,通过DSP Link来进行通信。

ARM926EJS架构,里边都有一个RBL。

UBL不是必须的
However if U-boot is converted to a bootable AIS image using the AISGen tool, the UBL really isn't
necessary and U-boot can be loaded directly by the ARM ROM boot loader. AISGen will convert your .out file in ELF or COFF format to AIS format, which the bootloader can understand。

The ROM boot loader looks for the UBL in address 0 of the flash, so it must be stored at address 0. Uboot can be placed anywhere but the UBL must be modified to match that address if it is changed from the default
0x10000。

2OMAPL138启动方式
Omapl138支持很多启动方式,如下表。

详细解释参考。

目前支持的NandFlash类型有:
虽然支持的方式很多,总体上分为两类:NON-AIS Boot Modes 及Application Image Script (AIS) Boot。

2.1Samsung_NAND_FLASH命名规则
1. Memory (K)
2. NAND Flash : 9
3. Small Classification
4~5. Density
12 : 512M 16 : 16M 28 : 128M
32 : 32M 40 : 4M 56 : 256M
64 : 64M 80 : 8M 1G : 1G
2G : 2G 4G : 4G 8G : 8G
AG : 16G BG : 32G CG : 64G
DG : 128G LG : 24G NG : 96G
ZG : 48G 00 : NONE
6~7. Organization
00 : NONE 08 : x8
16 : x16
8. Vcc
A : 1.65V~3.6V
B : 2.7V (2.5V~2.9V)
C : 5.0V (4.5V~5.5V)
D : 2.65V (2.4V ~ 2.9V)
E : 2.3V~3.6V R : 1.8V (1.65V~1.95V)
Q : 1.8V (1.7V ~ 1.95V) T : 2.4V~3.0V
U : 2.7V~3.6V V : 3.3V (3.0V~3.6V)
W : 2.7V~5.5V, 3.0V~5.5V 0 : NONE
9. Mode
10. Generation
2.2NON-AIS Boot modes
NON-AIS Boot Modes包括Legacy NOR Boot、Direct NOR Boot、HPI Boot。

NOR Flash(地址从0x60000000开始)的头四个字节为配置字节。

(注:0x60000000 EMIFA async data (CS2))
当为Legacy NOR Boot方式时,RBL(ARM RBL)从NOR flash的起始地址拷贝由COPY field决定的size 至Shared RAM (0x80000000,256K)。

拷贝完后,跳转至0x80000004开始执行。

2.3AIS Boot modes
AIS是TI boot image特有的一种格式,是一种binary language,以4个字节为单位,小端模式。

以magic word 0x41504954作为开始,后面为一序列命令。

由RBL顺序执行,直至遇到jump&close命令。

AIS格式及命令
以下为ubl_AM1808_NAND.bin实例:从中发现,UBL加载至0x80000000,加载结束后程序跳转至0x80000000执行,UBL开始执行。

ubl_AM1808_NAND.bin由ubl_AM1808_NAND.out通过工具AISgen utilities转换得到。

2.4启动方式实例分析
当前开发版通过电阻分压实现UART2启动与NAND8位启动两种方式,原理图如下:
BOOT[7:0] 00001110 NAND8
BOOT[7:0] xxx10100 UART2
3Serial Boot and Flash Loading Utility
3.1TI Flash and Boot Utilities
支持OMAP-L138、C6748、AM1808平台
这个开发包是利用串口在windows环境下通过命令行实现NAND, NOR, and SPI Flash of the OMAP
-L138 EVM的烧写。

烧写工具为sfh_OMAP-L138.exe。

开发板必须设置为UART boot mode,出现Waiting for BOOTM…,串口默认设置为The assumption is made that the UART of the device operates at 115200, 8N1。

(板子晶振最好跟EVM开发板一致:
24MHz)。

DaVinci Serial Boot and Flashing下载地址:从表可看出,不同的开发平台对应不同的UBL开发包。

UBL开发包编译可在windows 或者linux环境下进行。

/projects/dvflashutils/files/
3.2Serial Flasher Options
如下例子:
nand_erase.bat
sfh_OMAP-L138.exe -erase -targetType AM1808 -flashType NAND -p COM8
nand_flash_nand.bat
sfh_OMAP-L138.exe -flash -targetType AM1808 -flashType NAND -v -p COM8 ubl_AM1808_NAND.bin u-boot.bin For C6748 devices, use the following option: "-targetType C6748"
For AM1808 devices, use the following option: "-targetType AM1808"
3.3串口烧写
3.3.1步骤
1.开发板启动模式选择为uart mode(选择的串口的跟ubl开发包配置一致)
2.把PC与开发板通过串口线连接起来
3.准备好nand_erase.bat及nand_flash_nand.bat、sfh_OMAP-L138.exe、ubl_AM1808_NAND.bin、
u-boot.bin文件。

其中ubl_AM1808_NAND.bin、sfh_OMAP-L138.exe两文件在ubl开发包make成功后生成。

而u-boot.bin在linux环境下编译dvsdk后生成。

4.点击nand_erase.bat,开发板上电。

nand_erase.bat操作完后,点击nand_flash_nand.bat把ubl,uboot
烧写进nand flash。

3.3.2烧写信息
1.擦除NAND_FLASH
板子复位后:
2.Flashing UBL ubl_AM1808_NAND.bin at 0x00000000
3.Flashing application u-boot.bin at 0x00010000
4.Writing header and image data to Block 0x00000006
(网上引用)
4UBL移植
4.1移植相关
由于下载的UBL开发包是针对TI EVM开发板的,故我们可能需要定制开发板上的芯片对UBL开发包中的文件进行些简单的修改。

一般做如下修改:
(1).DDR参数配置
(2).UART选择
(3).UART波特率设置(跟PLL相关)
涉及的文件及函数有
\OMAP-L138\Common\src\device.c DEVICE_init()函数
\OMAP-L138\Common\include\Device_uart.h
DEVICE_UART_PERIPHNUM声明
\OMAP-L138\Common\src\Device_uart.c
DEVICE_UART_config变量初始化
其中DDR2参数可通过下excel表计算:
K:\OMAP\omap\
MDDR_DDR2_Memory_Co
Uint32 DEVICE_PLL0Init(Uint8 clk_src, Uint8 pllm, Uint8 prediv, Uint8 postdiv, Uint8 div1 ,Uint8 div3,Uint8 div7)
Uint32 DEVICE_PLL1Init( Uint8 pllm, Uint8 postdiv, Uint8 div1, Uint8 div2, Uint8 div3 )
当我们选择为omapL138,ARM及dsp运行在300MHz。

输入为24MHz.
PLL0:SYSCLK1、SYSCLK6输出24*(24+1)/(1+1) = 300MHz PLL1:SYSCLK2输出24*(24+1)/(1+1)/(1+1)=150MHz
PLL1:SYSCLK1输出24*(24+1)/(1+1)=300MHz 作为DDR2 memory controller的2X_CLK。

当arm跑456MHz,输入为24MHz时
PLL0:SYSCLK1、SYSCLK6输出:24*(18+1) = 456MHz
下面是u-boot启动信息
当我们需UART波特率为115200时:(arm,dsp运行在300MHz 时)
divisor=150MHz/(16*115200)=81
注意:2X_CLK should be configured to clock at twice the frequency of the desired DDR2/mDDR memory clock。

故DDR2/mDDR clock为150MHz时,2X_CLK需配置为300MHz。

4.2DMDL BOARD
4.2.1DDR参数配置
DDR2:K4T1G164QQ-HCE6
Uint32 DEVICE_ExternalMemInit(Uint32 ddrphycr, Uint32 sdcr, Uint32 sdtimr, Uint32 sdtimr2, Uint32 sdrcr, Uint32 sdcr2)。

相关文档
最新文档