我试图了解 da Vinci DM6446 SoC 的启动顺序。
有人能不能帮助我了解启动是如何发生的、比如
我们在复位矢量位置需要一个非易失性存储器(DM6446 RAM、地址为0x00000000)。 那么控制是如何到达 ROM 的
引导加载程序(RBL),其起始地址为0x00004000。 我们是否有某种存储器映射重映射
发生的事情。
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.
我试图了解 da Vinci DM6446 SoC 的启动顺序。
有人能不能帮助我了解启动是如何发生的、比如
我们在复位矢量位置需要一个非易失性存储器(DM6446 RAM、地址为0x00000000)。 那么控制是如何到达 ROM 的
引导加载程序(RBL),其起始地址为0x00004000。 我们是否有某种存储器映射重映射
发生的事情。
Nirav、
复位或上电后立即运行的代码必须存储在片上 SoC 中;这称为 ROM 代码。 它在制造时被编程到芯片中。
片上 ROM 代码是启动代码驻留在器件中的位置。 因此、在上电复位时、硬件必须从内部 ROM 访问第一条指令。
U-boot 通常不是在处理器上执行的第一个引导加载程序。 TI 器件上的第一个加载程序是一个掩码编程的 ROM 引导加载程序(ROM 代码)、可将处理器唤醒至可启动 u-boot 的程度。 TI 器件具有一组必须在硬件中捆绑的物理引脚,以便处理器的复位矢量可以指向此“预引导加载程序”的存在位置。
DM64x 复位矢量位于地址0x00004000、这是 ROM 代码开始的地方。 当 BTSEL[1:0]引脚配置为"ARM EMIFA 外部引导"时、一个例外情况是复位向量为0x02000000。
此致、
帕维尔
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 时序继续从外部存储器执行、直到被软件修改
此致、
帕维尔