Thread 中讨论的其他器件:TDA4VH、 TDA4VM
工具/软件:
到目前为止、我们仅使用 hyperflash 作为 TDA4VH (j784s4)的 MCU 岛的引导介质、但当我们仅使用 sbl_hyperflash.c int 主 PDK 进行集成时、intization 函数中有 dataAbortion、就像所示
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.
工具/软件:
到目前为止、我们仅使用 hyperflash 作为 TDA4VH (j784s4)的 MCU 岛的引导介质、但当我们仅使用 sbl_hyperflash.c int 主 PDK 进行集成时、intization 函数中有 dataAbortion、就像所示
尊敬的 Zhen:
一样Unknown 说:]到目前为止、我们只使用 Hyperflash 作为 TDA4VH MCU 岛(j784s4)的引导介质、但当我们仅使用 主 PDK 的 sbl_dhyperflash.c 作为集成时、intilization 函数中有 dataAbortion、就像
TDA4VH 器件不支持 Hyperflash。
TDA4VM 器件支持 HyperFlash、您能否请参阅 J721E SDK 中随附的 CSL HyperBus 示例。
此致、
Karthik
您好 Karthikean、
感谢您的快速答复。
对于 hyperflash 示例、有一些关于附件的问题。
1.在 Stuct Board_Pinmux Config_t 中没有像 fsscfg 这样的成员,如下图所示:
项目是否存在任何不匹配的地方?
2.我想在加载系统固件或 CM4中的 tifs.bin 之前,您不能执行 Board_Init。 因为我们的系统固件已使用 Lauterbach 工具刷写到外部超闪存中。
3.我们首先需要在 Lauterbach 刷写后在 SBL 初始阶段加载系统固件、然后您可以使用 sciclient 相关功能来执行 Board_Init、如下所示:
所以在从 hyperflash 加载系统固件之前、我们需要在不使用 scient 相关函数的情况下执行 OSPI 初始操作、此后我们可以使用 Board_init、我是不是常设的吗?
尊敬的 Zhen:
1. 如下图所示、Stuct Board_Pinmux Config_t 中没有与 fsscfg 类似的成员:
我分享的示例特定于 J721e 平台、您提到的结构成员会有变化。 作为参考、我在这里添加了 Board_Pinmux 配置结构。 为了进行进一步更改和移植、我建议下载 J721E SDK
71 /* Structure to set the board pinmux configuration */ 72 typedef struct Board_PinmuxConfig_s 73 { 74 /** 75 * Pinmux auto config control 76 * BOARD_PINMUX_CUSTOM(0) - Pinmux is based on other add-on card 77 * settings of the pinmux config. 78 * BOARD_PINMUX_AUTO(1) - Pinmux is based on board detection by 79 * reading the board ID info from EEPROM. 80 * When auto mode is enabled, all other below fields of 81 * pinmux config will be ignored. 82 */ 83 uint8_t autoCfg; 84 85 /** 86 * Pinmux config control for GESI/Infotainment expansion connector 87 * BOARD_PINMUX_GESI_ICSSG(0) - GESI Board (ICSSG RGMII) 88 * BOARD_PINMUX_GESI_CPSW(1) - GESI Board (CPSW9G RGMII) 89 * BOARD_PINMUX_INFOTAINMENT(2) - Infotainment Board 90 */ 91 uint8_t gesiExp; 92 93 /** 94 * Pinmux config control for CSI expansion connector 95 * BOARD_PINMUX_CSI_FUSION(0) - Fusion-2 board 96 * BOARD_PINMUX_CSI_MV(1) - MV capture board 97 * BOARD_PINMUX_CSI_LI(2) - LI capture board 98 */ 99 uint8_t csiExp; 100 101 /** 102 * Pinmux config control for ENET expansion connector 103 * BOARD_PINMUX_ENET_QSGMII(0) - ENET QSGMII board 104 */ 105 uint8_t enetExp; 106 107 /** 108 * Pinmux config control for OSPI/Hyperflash mux 109 * BOARD_PINMUX_FSS_OSPI(0) - OSPI 110 * BOARD_PINMUX_FSS_HPB (1) - Hyperbus 111 */ 112 uint8_t fssCfg; 113 114 } Board_PinmuxConfig_t;
2. 我想在加载系统固件或 CM4中的 tifs.bin 之前、您无法执行 Board_Init。 因为我们的系统固件已使用 Lauterbach 工具刷写到外部 Hyperflash 中。
是的、不能在 tifs.bin 之前调用 board_init。 J721E 器件引导流程与 J784S4不同。 在移植示例期间、我们还必须处理引导流程更改。
所以我们需要在不使用 scient 相关函数的情况下执行 OSPI 初始操作、然后再从 hyperflash 加载系统固件、之后我们可以使用 Board_init、我的永久权利是吗?
否、首先必须从 Hyperflash 加载系统固件、然后调用 Board_init。
您能否解释一下 OSPI 初始操作?
此致、
Karthik
OSPI 初始操作是指超闪存初始化。 因此、首先需要确保在不使用 sciclient 函数的情况下进行超闪存初始化、然后从超闪存中读取 tifs.bin 并加载到 CM4中、最后可以使用 board_init 函数。
这就是为什么我说 J721e 的超闪存初始化示例也 不是 corrret。 因为在使用 board_init 函数之前、我没有看到任何加载 tifs.bin 等系统固件的过程。
尊敬的 Zhen:
感谢您的澄清。 您共享的器件型号需要与"hyperbus"连接。 我相信你也做过同样的事情。 如果它与 Hyperbus 连接、则不需要 OSPI 初始化。 但是、如果您想知道 OSPI 初始化将在 SBL OSPI 引导期间何时完成、其 步骤如下、初始化将在 SciClient_init ()之后进行。
sbl_main.c - > SBL_BootImage () - > sbl_slave_core_boot.c - > SBL_OSPIBootImage () -> sbl_ospi.c - > sbl_OSPI_Initialize ()
在 Hyperflash 初始化的情况下、它在 SciClient_init ()内部发生、如下所示。
sbl_main.c - > SBL_SciClientInit ()-> sbl_sci_client.c - > SBL_ReadSysfwImage ()-> sbl_hyperflash.c -> sbl_hyperflashInit()
因此、首先您需要确保在不使用 sciclient 函数的情况下进行 hyperflash 初始化、然后从 hyperflash 读取 tifs.bin 并加载到 CM4中、最后您可以使用 board_init 函数。
该语句适用于 J721e 平台。 但这未在 J784s4上验证。
是否可以在 SciClient 初始化后尝试初始化 Hyperflash?
此致、
Karthik
您好 Karthikean、
您可以在 SDK html 中看到以下说明:
问题是 这样 在从外部 Hyperflash 加载系统固件之前、不能使用 SBL_SciClientInit。
这意味着你需要首先手动初始化 hyperflash 驱动程序、第二次 从外部 hyperflash 获取系统固件与此驱动程序,最后调用 sbl_hyperflashInit()将是可以的。
因为它会在 sbl_hyperflashInit()中调用 Board_init;
但初始超闪存过程是获取系统固件的前提条件,我认为这是缺失的。
尊敬的 Zhen:
问题是 这样 在从外部 Hyperflash 加载系统固件之前、不能使用 SBL_SciClientInit。 [/报价]您所提到的文档是关于 Sciclient_init ()的、它在中调用 SBL_SciClientInit。
请参阅文件 sbl_sci_client.c
就像您提到的 sbl_hyperflashInit() 在 Sciclient_init()之前调用。
但初始超闪存过程是获取系统固件的前提条件、我认为该过程缺失。是的、这是正确的。 如果您请遵循 SBL_SciClientInit() 函数在 sbl_sci_client.c 文件中、可以观察到 sbl_hyperflashInit()是在加载系统固件之前调用的。 加载固件后、 将调用 Sciclient_init ()。
希望这能回答您的问题。
此致、
Karthik
[/quote]