|
图3 DMSoC交换中心资源的结构框图。 |
电源域及复位
达芬奇DMSoC有两个电源域,分别是Always On域和DSP域。Always On域由CVDD ARM核电源供电,给ARM、总线、SCR和除VICP之外的所有外设提供电源;DSP电源域由CVDDDSP DSP核电源供电,给DSP和VICP提供电源。
双核架构的达芬奇DMSoC的功耗也非常有竞争力,这一方面取决于芯片本身的工艺,另一方面也取决于芯片内部时钟和电源的结构。如图4所示,达芬奇DMSoC有电源休眠控制器(Power & Sleep Controller)管理芯片电源的开关及复位。可以用软件控制DSP电源域,控制DSP及其模块时钟的开关和复位。PSC不支持ARM及其模块的断电控制、ARM的本地复位和ARM的时钟关断控制。同时PSC可以中断ARM和DSP,支持IcePick仿真(emulation)特性。
图4 DM6446的电源休眠控制器。 |
关于达芬奇DMSoC的复位类型、触发源及对应的复位对象请参考表2。
表2 DMSoC的复位类型。 |
达芬奇DMSoC初始化流程
> 达芬奇DMSoC复位状态
DM644x上电复位后,芯片的绝大部分模块都处于不工作状态。锁相环PLL处于旁路(Bypass)模式;DSP子系统的状态取决于DSP_BT引脚;UART1和UART2也处于不工作状态,UART0的状态取决于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/davinci/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()运行。
总结
经过上面介绍,很多DSP工程师可能会对达芬奇DMSoC及Linux启动流程有一个感性的认识,双核架构的达芬奇DMSoC带给我们的是一加一大于二的性价比,要想了解更多的细节,请参考数据手册和应用文档。
德州仪器半导体技术(上海)有限公司,崔晶
文章评论(0条评论)
登录后参与讨论