This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TMS320DM6446:DM6446上电时如何调用 ROM 引导加载程序?

Guru**** 2575375 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/629235/tms320dm6446-how-rom-boot-loader-is-invoked-at-power-on-in-dm6446

器件型号:TMS320DM6446

我试图了解 da Vinci DM6446 SoC 的启动顺序。

有人能不能帮助我了解启动是如何发生的、比如  
我们在复位矢量位置需要一个非易失性存储器(DM6446 RAM、地址为0x00000000)。 那么控制是如何到达 ROM 的  
引导加载程序(RBL),其起始地址为0x00004000。 我们是否有某种存储器映射重映射  
发生的事情。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Niran、您好!

    请参阅以下链接:

    www.ti.com/.../tms320dm6446.pdf -请参阅3.3.2 ARM 引导

    processors.wiki.ti.com/.../Understanding_u-boot-min_startup_for_DM814x

    此致、
    帕维尔
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    大家好、我已经阅读了数据表和数据表、其中提供了有关 ROM 引导加载程序将执行的操作的信息、但并未提供对引导加载程序的控制、因此请再次查看我的问题。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Nirav、

    复位或上电后立即运行的代码必须存储在片上 SoC 中;这称为 ROM 代码。 它在制造时被编程到芯片中。

    片上 ROM 代码是启动代码驻留在器件中的位置。 因此、在上电复位时、硬件必须从内部 ROM 访问第一条指令。

    U-boot 通常不是在处理器上执行的第一个引导加载程序。 TI 器件上的第一个加载程序是一个掩码编程的 ROM 引导加载程序(ROM 代码)、可将处理器唤醒至可启动 u-boot 的程度。 TI 器件具有一组必须在硬件中捆绑的物理引脚,以便处理器的复位矢量可以指向此“预引导加载程序”的存在位置。

    DM64x 复位矢量位于地址0x00004000、这是 ROM 代码开始的地方。 当 BTSEL[1:0]引脚配置为"ARM EMIFA 外部引导"时、一个例外情况是复位向量为0x02000000。

    此致、
    帕维尔

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    信息有点错误、
    您说 DM6446的复位矢量地址为0x00004000、但不是0x00004000、复位矢量地址为0x00000000、这是 RAM 位置、在将分支的 ARM 光电二极管复位到 ROM 的起始位置之前、SoC 的某些模块会写入 ARM、然后 ARM 会复位 重置它将尝试从 RAM 位置0x00000000中获取第一条指令、该位置分支到0x00004000处的 ROM 引导加载程序。
    我已经在调试器连接到 CCS 的情况下对其进行了测试、并在系统复位时看到了内存。
    感谢您在本说明中所做的任何更正



    谢谢,
    Nirav
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Nirav、

    [引用 user="nirav parmar13"]您说 DM6446的复位矢量地址为0x00004000,但它不是[/引用]

    DM64x TRM 第12.1节"引导模式概述"中对此进行了说明

    复位(POR、热复位或最大复位)后、ARM 程序在0000:4000h 开始在 ARM ROM 中执行、除非是 GP (通用)器件和 BTSEL[1:0]= 01、这表示一个 NOR 引导。

    我怀疑当您使用 JTAG 调试器连接到 CCS 时、您处于特殊的仿真/调试模式、在该模式下、复位矢量指向 TCM IRAM0起始地址、请参阅 DM64x TRM 第3.7节紧密耦合存储器

    另一个可能的解释是位于0x00000000的代码正在检查 BTSEL[1:0]引脚值、并且根据该值、它将跳转到0x00004000或0x02000000)。 因此、您在所有运算模式(调试和正常模式)下都有0x00000000的复位矢量、请参阅 DM64x TRM 第11.4.3节 ARM 引导模式配置

    BTSEL[1:0]输入决定 ARM 是从其 ROM 引导还是从异步 EMIF (AEMIF)引导。 当 ROM 引导被选中(BTSEL[1:0]= 00、10、或11)时、一个到内部 ROM 的跳转(0000:4000h)被强制进入第一个取指令字。 然后、嵌入式 ROM 引导加载程序代码(RBL)执行某些配置步骤、读取 BOOTCFG 寄存器以确定所需的引导方法、并分支到适当的引导功能(即 NAND 闪存加载程序实用程序或 UART 加载程序实用程序)。 如果选择了 EMIF 引导(BTSEL[1:0]= 01)、则强制跳转至最低的 EMIF 地址(0200:0000h)进入第一个获取的指令字。 然后、ARM 使用默认的 EMIF 时序继续从外部存储器执行、直到被软件修改

     

    此致、
    帕维尔