zoukankan      html  css  js  c++  java
  • 达芬奇数字媒体片上系统的架构和 Linux 启动过程

    达芬奇数字媒体片上系统的架构和 Linux 启动过程

     德州仪器半导体技术(上海)有限公司 崔晶

       达芬奇(DaVinci)数字媒体技术平台TMS320DM6446/3采用了ARM+DSP双核的架构,本文从芯片硬件结构入手介绍达芬奇DMSoC硬件部分及Linux OS的启动过程。 达芬奇 DMSoC 硬件概述如图1所示,达芬奇数字媒体片上系统(DMSoC)提供:两个内核(ARM+DSP);视频处理子系统(VPSS);多种Boot模式(NOR Flash/NAND Flash/UART0 Boot Mode);两个电源域;多个时钟树;多个引脚独立或复用的外设。


      图1  DM6446功能结构框图

      ARM-DSP集成对于双核的达芬奇架构,大家最关心的就是两个核之间的资源分配、通信方式及如何高效地实现资源共享各尽其能。ARM独享(DSP不可用)的外设有:UART0/1/2,I2C,看门狗定时器,PWM0/1/2,ARM中断控制器USB2.0,ATA/CF,SPI,GPIO,VPSS,EMAC/MDIO,EMIFA CONTROL,VLYNQ,MMC/SD。DSP独享(ARM不可用)的外设有:DSP中断控制器,VICP。ARM和DSP共享的外设有:EDMA,Timer0/1,Power & Sleep Controller,ASP和EMIFA Data。

    图2  ARM-DSP集成结构

      如图2所示,可以很清楚地看到ARM可以访问DSP片内存储器(L2RAM和L1P/D);DSP可以访问ARM片内存储器;ARM和DSP共享DDR2和AEMIF。因此,通常情况下ARM只需传递需要处理的数据地址指针给DSP,而无须大块的数据搬移。ARM和DSP之间的通信可以通过相互中断实现。ARM可以中断DSP(通过4个通用中断和1个不可屏蔽中断);DSP可以通过2个通用中断来中断ARM。ARM控制DSP的电源、时钟、复位和引导。 DMSoC存储器映射达芬奇DMSoC多个片上存储器和两个处理器及不同的子系统相关。为了简化软件开发,DMSoC中所有的存储器统一编址,如表1所示。 

      

       DMSoC交换中心资源以上大家看到DMSoC有非常丰富的外设和视频处理硬件资源,而且ARM和DSP又共享DDR2等存储器资源,那么DMSoC又是如何确保ARM、DSP和VPSS同时访问外设或存储器资源时不会引起冲突呢?DMSoC中的交换中心资源(SCR:Switched Central Resource)会做出管理。如图3所示,把任何一个发起数据传输的源称为Master(每一个Master有一个专用的ID),这个Master要访问的目的地称为Slave,这样在Master和Slave之间就构成一条数据传输的通路。从图3中可以看到,在SCR中可以有很多并行的Master到Slave的数据通路。如果是不同的Master、相同的Slave,那么可以通过设置每一个Master的优先级来得到特殊应用系统的最佳性能。对于大多数的Master,可以通过寄存器MSTPRI0和MSTPRI1来设置它们的优先级。如果Master是C64x+、VPSS和EDMA,可以通过它们自己的相关寄存器控制它们自己的优先级,这样可以更加灵活、快速的实现高的视频数据吞吐带宽。详细信息可以参考DM6446的数据手册。

                                                            

                           图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。
                   

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

    • DMSoC复位。芯片的配置由PSC决定,取决于BTSEL[0-3]、EM_WIDTH、AEWA和DSP_BT的状态。
    • ROM boot loader(如果被选)。NAND或者UART0的初始化。
    • 引导加载(Boot-loading)。以U-boot为例,
      • 使能电源域:DDR2和DSP;
      • 设置时钟频率(ARM、DSP和DDR2时钟的乘除系数);
      • 设置引脚复用控制器;
      • 设置ARM引导启动操作系统。
    • 操作系统启动。以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内容:

    • 关中断和MMU。
    • 使能DSP电源域(PTCMD),把DSP置为复位状态。
    • 初始化PLL,使能DDR2,软复位DDR2并且重新使能DDR2,使其脱离复位状态。
    • 初始化系统PLL。
    • 配置AEMIF引脚为NOR Flash接口
    • VTP校准。

    完成以上步骤之后,U-boot准备引导ARM Linux。

    • 配置系统的内存(通过ATAG_ MEM块和mem=)NAND Flash和DDR2。
    • 通过TFTP加载等加载方式,加载内核到指定的存储地址。
    • 如果定义过,加载RAM Disk。
    • 初始化传递到内核的引导参数(EMAC地址,串口,控制台,视频格式等)
    • 获得ARM Linux机类型值(DVEVM为#901)。
    • 设置kernel tagged list。
    • 用初始值设置ARM的寄存器。
    • 调用内核。

    Linux 初始化步骤 :

    • Linux内核需要从引导加载程序(U-boot)中得到以下参数。

      * 已经初始化的memory系统。
      * R0=0;R1为ARM Linux机类型值。
      * R2指向ATAG结构体的内容:①物理memory区;②是否使用RAM DISK及其压缩版的地址;③视频驱动程序具体的初始化参数;④内核命令行;⑤其他参数(串口和版本号)。

      更多关于Linux内核引导参数的信息可以参考Linux/Documentation/kernel-parameters.txt。如果要想传递给内核更多的参数,再u-boot中的bootargs中设置就可以了。
    • 对于压缩的内核(aka uImage),Linux 最初启动Linux/arch/kernel/head.s。
    • start_kernel()运行。位于Linux/init/main.c。
    • Linux的第一个进程init()运行。

      总结经过上面介绍,很多DSP工程师可能会对达芬奇DMSoC及Linux启动流程有一个感性的认识,双核架构的达芬奇DMSoC带给我们的是一加一大于二的性价比,要想了解更多的细节,请参考数据手册和应用文档

  • 相关阅读:
    Java Spring Boot VS .NetCore (十) Java Interceptor vs .NetCore Interceptor
    Java Spring Boot VS .NetCore (九) Spring Security vs .NetCore Security
    IdentityServer4 And AspNetCore.Identity Get AccessToken 问题
    Java Spring Boot VS .NetCore (八) Java 注解 vs .NetCore Attribute
    Java Spring Boot VS .NetCore (七) 配置文件
    Java Spring Boot VS .NetCore (六) UI thymeleaf vs cshtml
    Java Spring Boot VS .NetCore (五)MyBatis vs EFCore
    Java Spring Boot VS .NetCore (四)数据库操作 Spring Data JPA vs EFCore
    Java Spring Boot VS .NetCore (三)Ioc容器处理
    Java Spring Boot VS .NetCore (二)实现一个过滤器Filter
  • 原文地址:https://www.cnblogs.com/just4fun/p/2101606.html
Copyright © 2011-2022 走看看