Chinaunix首页 | 论坛 | 博客
  • 博客访问: 291332
  • 博文数量: 109
  • 博客积分: 2116
  • 博客等级: 大尉
  • 技术积分: 1062
  • 用 户 组: 普通用户
  • 注册时间: 2009-10-22 15:38
文章分类

全部博文(109)

文章存档

2013年(2)

2011年(16)

2010年(90)

2009年(1)

我的朋友

分类: 嵌入式

2010-07-17 10:16:05

达芬奇 DM SoC 初始化流程

> 达芬奇 DMSoC 复位状态
DM644x 上电复位后,芯片的绝大部分模块都处于不工作状态。锁相环 PLL 处于旁路 (By pass) 模式; DSP 子系统的状态取决于 DSP_BT 引脚; UART1 和 UART2 也处于不工作状态, UART 0的状态取决于 BTSEL 引脚 ( 如果 BTSEL=11 , UART0 工作 ) ; EMIFA 处于工作状态,其数据总线宽度由EM_WIDTH 决定,地址总线宽度由 AEAW 决定;芯片的大部分引脚都被配置为 GPIO 引脚。引脚复用通过寄存器 PINMUX0 和 PINMUX1 控制。

> 达芬奇 DMSoC 初始化顺序
(1)DMSoC 复位。芯片的配置由 PSC 决定,取决于 BTSEL[0-3] 、 EM_WIDTH 、 AEWA 和 DSP_BT 的状态。
(2)ROM boot loader( 如果被选 ) 。 NAND 或者 UART0 的初始化。
(3) 引导加载 (Boot-loading) 。以 U-boot 为例, ① 使能电源域: DDR2 和 DSP ; ② 设置时钟频率 (ARM 、 DSP 和 DDR2 时钟的乘除系数 ) ; ③ 设置引脚复用控制器; ④ 设置 ARM 引导启动操作系统。
(4) 操作系统启动。以 Linux 为例, ① 初始化 ARM ; ② 初始化硬件系统; ③ 初始化 Linux环境。
 
> U-boot 初始化顺序
通常情况下, ARM Linux 要求 boot loader 中有少许的初始化。目前 TI 的 DVEVM 使用的是 U-boot-1.1.3 。 U-boot 代码中首先运行的是 u-boot/cpu/arm926ejs/start.S ,芯片和一些 DVEVM 板的硬件配置主要在 u-boot/board/davinci/platform.S 和 davinci.c 中完成。 其中 u-boot/board/davinci/platform.S 设置最基本的系统硬件环境,包括系统 PLL 及 DDR2的初始化、 PSC 的配置及使能 UART0 、 AEMIF 等硬件模块。有些工程师设计的达芬奇板可能用到了和 DVEVM 不同的 Flash ,那么就要根据用到的 Flash 参数修改 u-boot/board/davinc i/flash.c 。另外,关于 DM644x 支持的 NAND Flash ID ,请参考 TMS320DM644x DMSoC 的相关文档。

以 NOR Flash boot 为例, DVEVM u-boot 初始化下列的达芬奇 DMSoC 内容:
(1) 关中断和 MMU 。
(2) 使能 DSP 电源域 (PTCMD) ,把 DSP 置为复位状态。
(3) 初始化 PLL ,使能 DDR2 ,软复位 DDR2 并且重新使能 DDR2 ,使其脱离复位状态。
(4) 初始化系统 PLL 。
(5) 配置 AEMIF 引脚为 NOR Flash 接口。
(6)VTP 校准。
完成以上步骤之后, U-boot 准备引导 ARM Linux 。
(1) 配置系统的内存 ( 通过 ATAG_ MEM 块和 mem=)NAND Flash 和 DDR2 。
(2) 通过 TFTP 加载等加载方式,加载内核到指定的存储地址。
(3) 如果定义过,加载 RAM Disk 。
(4) 初始化传递到内核的引导参数 (EMAC 地址,串口,控制台,视频格式等 )
(5) 获得 ARM Linux 机类型值 (DVEVM 为# 901) 。
(6) 设置 kernel tagged list 。
(7) 用初始值设置 ARM 的寄存器。
(8) 调用内核。

> Linux 初始化步骤
(1)Linux 内核需要从引导加载程序 (U-boot) 中得到以下参数。
* 已经初始化的 memory 系统。
* R0 = 0 ; R1 为 ARM Linux 机类型值。
* R2 指向 ATAG 结构体的内容: ① 物理 memory 区; ② 是否使用 RAM DISK 及其压缩版的地址; ③ 视频驱动程序具体的初始化参数; ④ 内核命令行; ⑤ 其他参数 ( 串口和版本号 ) 。更多关于 Linux 内核引导参数的信息可以参考 Linux/Documentation/kernel-parameters.txt 。如果要想传递给内核更多的参数,再 u-boot 中的 bootargs 中设置就可以了。
(2) 对于压缩的内核 (aka uImage) , Linux 最初启动 Linux/arch/kernel/head.s 。
(3)start_kernel() 运行。位于 Linux/init/main.c 。
(4)Linux 的第一个进程 init() 运行。
阅读(572) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~