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.

[参考译文] AM2434:EMIF_CFG_0 模块的 LPSC 状态转换无效(DDR 开启)

Guru**** 2553260 points
Other Parts Discussed in Thread: AM2434

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1541315/am2434-invalid-lpsc-state-transition-for-emif_cfg_0-module-ddr-turn-on

器件型号:AM2434


工具/软件:

我在航空航天领域有一款使用 AM2434 芯片(现场安全型号)的新产品。 由于认证限制、我们选择通过执行安全交付操作来禁用 DMSC。 因此、我们现在要为系统控制功能编写自己的驱动程序。 我理解、这不是 TI 的建议。

当前我正在尝试为自定义 SBL 启用 DDR 接口、因此遇到令人费解的行为。 按照 TRM、AM243x SDK 和 TI GEL 文件、我能够复制 MPU、PLL 和 PSC 控制器以开始启用系统硬件。 问题是 EMIF_CFG_0 模块域的 LPSC 控制器。 我可以启用芯片中除该电源/模块域之外的所有电源/模块域。 我甚至可以启用 EMIF_DATA_0 模块、尽管 TRM 声称在启用 EMIF_CFG_0 域之前我无法启用该模块。  

我配置了电源转换的设置、发出 GO 命令、然后挂起等待 GOSTAT 清除。 重申一下、同一个驱动程序适用于所有其他模块域。我已根据 TI GEL 文件 (AM24_PLL_Params_OFC1.gel) 启用/配置了系统中的所有 PLL(MCU 除外)、我知道由于自动时钟门控功能、这是对 LPSC 模块正确使用的依赖。

我在系统 MD_STAT 寄存器块中观察到的是、我配置的所有模块域都最终处于“良好“状态 0x1F03、但 EMIF_CFG_0 域结束于 0x1A0D、这似乎与 SDK 中列出的枚举值没有任何意义。

我在这里遗漏了什么? 我可以启用 emif_data_0 域但不启用 CFG 域、这感觉不可思议地奇怪。 通过所有的外观,这两个连接在一起,因此满足其中一个的“打开“依赖关系应该启用另一个。

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

    我应该提到这发生在 AM243x EVM 板上、而不是定制 PCB 上。

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

    您好 Brandon、

    我会同意,这是奇怪的,不知道发生了什么.  在尝试启用 DDR 的 LPSC 之前、确保已启用和锁定 DDR PLL (PLL12)。   

    我假设您已将 GEL 脚本转换成一些 C 代码、以便在处理器上运行。  那么、您是否使用此自定义 SBL 进行引导? 或以某种方式将二进制文件下载到处理器?  只需尝试了解从给电路板上电到故障的整个环境。

    可能有一项测试: 代码配置失败后、您是否能够运行 GEL?  也许在它的执行中有一些不同的东西,这可能会给你一个线索。

    此致、

    James

      

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

    在尝试启用 DDR LPSC 模块时、我可以确认 PLLCTRL0 和 PLL12 已启用并锁定。


    是的、我当时使用了 GEL 脚本、SDK 驱动程序、以及另外两个公司产品、都使用了 J7 和 AM64x 系列芯片作为参考。 他们的 LPCS 驱动程序似乎非常相似,如果不是相同的。 当我尝试在未首先启用所有必要时钟的情况下启用 LPSC_ADC 域时、我看到了完全相同的 0x1A0D 行为、但是 PLL12 和 MAIN_SYSCLK0(通过 PLLCTRL0_PLLSTAT)依赖项均被锁定。 我很困惑、因为该行为意味着我在某个地方缺少 PLL 时钟。

    由于我的开发环境完全在 VSCode + Trace32 中、代码失败后无法运行 GEL 文件。 我将软件放入了一段时间 (1)、分离了 T32 并切换到 CCS、但是连接似乎会重置我的电路板并破坏我加载的配置。

    是否有一个直接从 DEV_BOOT 模式配置 DDR 的示例工程? 我之前在寻找要与 CCS 配合使用的产品、但可能错过了。

    就我的启动过程而言、我有一个 T32 脚本、它将芯片置于复位状态、然后释放 DMSC 以执行几秒钟来初始化器件、停止芯片并将 SBL 直接加载到 SRAM 中、并从 SRAM 继续执行。 首先、我要配置 MPU、然后加载 SYSFW (v11.0.0.15) 和 EVM 板默认配置十六进制头文件(成功)、然后继续执行安全交付(也成功)、最后继续执行 PLL、然后进行 PSC 配置、此时我会遇到所述的错误。

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

    您好 Brandon、

    在尝试切换到 CCS 时、您是否连接到 20 引脚 cTI 连接器?  如果是、则 JTAG_EMU_RSTn 信号可能导致此情况。  您可以尝试解决以下问题:

    -物理移除连接。  从我能看到的、在电路板上执行此操作并不容易。  我过去所做的是物理弯曲 JTAG 连接器上的针脚、使其不会与 POD 建立连接

    -您可能能够在错误发生前与 CCS 建立连接,在连接到其中一个内核后,您可以将其置于运行->自由运行模式,然后在失败后停止。  不确定其中是否有任何一个与您的 T32 连接冲突。   

    另一个选项:

    在 Lauterbach 网站上、有本质上是转换的 GEL 脚本的 CMM 脚本、用于配置 PSC/PLL 以及 DDR

    https://repo.lauterbach.com/cgi-bin/searchscript.pl?form=scripts&Terms=am243&searchresult=Searching+&fper=on&fmen=on&fhardware=on&fkernel=on&fcompiler=on&fflash=on&fmisc=on#hardware-arm~am24xx~am24x-skevm~scripts

    有了这些、您应该不需要切换 CCS 的 pods、然后可以运行 PSC 脚本、看看是否可以重做 PSC init 来查看它是否可以与脚本配合使用。

    您也可以尝试执行到安全切换点、然后从那里尝试 CMM 脚本初始化 PLL 和 PSC、看看您是否有不同的行为。

    此致、

    James  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您也可以尝试执行到安全切换点、然后从那里尝试 CMM 脚本初始化 PLL 和 PSC、看看您是否有不同的行为。

    这是非常有帮助的。 我通过与 Lauterbach 脚本进行比较找到了我的问题、您可以期望 Lauterbach 脚本正确配置硬件。

    问题是我遵循了 TRM PLL 配置说明、或者我误解了目的。 表 5-994 列出了该陈述:


    因此、很自然、我的软件中会进行检查、检查 CFG 寄存器中 HSDIV_PRSNC 设置的位数。 PLL12 仅列出 1 个分频器。


    这也与 PLL 的方框图相匹配:


    修复? 无论 HSDIV_PRSNC 计数如何、都必须始终启用 CLK_POSTDIV_EN。 不知道为什么会出现这种情况、但 TRM 需要更新以不包括该指令。 读取该位的说明会显示如果为 0、则所有同步分频时钟都保持低电平、但是表 5-987 声称这不应该影响 HSDIV、因为 HSDIV 的时钟来自 FPP、该 FOUTP 不受 CLK_POSTDIV_EN 选通。




    这很令人困惑、因为再走一页、您会看到这个图、表明 HSDIV[0-4]实际上是由 FOUTPOSTDIV 提供的。


    我现在知道我出了什么问题、但我确实觉得 TRM 可以通过删除/阐明禁用 CLK_POSTDIV_EN 的指令来实现改进。