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.

[参考译文] AM4377:适用于 AM4377 / Uniflash CLI 的 QSPI-Flash

Guru**** 651100 points
Other Parts Discussed in Thread: UNIFLASH, AM4377, DP83848K
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1189070/am4377-qspi-flash-for-am4377-uniflash-cli

器件型号:AM4377
主题中讨论的其他部件:UNIFLASHDP83848K

您好!

我使用 了 AM4377中提到的同一个项目:适用于 AM4377的 QSPI-Flash 、我们仍然遇到了电路板有时无法启动的问题。

当引导过程失败并且即使 SYSBOOT 配置处于 QSPI (110'0100'0000'0100'1010)模式、通信甚至无法启动时、我已经测量了 QSPI 的 DCLK 和 nCS。

是否有任何方法可确保我们处于正确的引导模式?

也许这是一个硬件问题、因为某些电路板工作正常、而其他电路板则每隔一段时间就会出现错误。 当器件开启且关断时间约为0.5s 时、我能够通过"坏"电路板持续重现故障。 如果设备关闭时间超过一秒、则引导时不会出现任何问题。 在这两种情况下、电源定序是相同的。 我认为这是一个针对硬件故障的参数。

我发现的一个可能相关的问题:

以下问题只是"坏"电路板发生、大约为20%。 与其他器件一起使用 UniFlash 进行编程是成功的。

通过 UniFlash CLI 对闪存进行编程时、在通过 JTAG 使用 USB560v2 System Trace 加载.out 文件后、尽管返回值成功、COM 端口上仍没有"C"输出。

CMD 行指令:

dslite.bat --mode load --config=path\TargetConfig\sqpAM437x.ccxml -f path\ProgFiles\UART_sqpAM437x_flash_programmer.out -n 1.

输出:

> "C:\TI\uniflash_8.1.1\deskdb\content\TICloudAgent\win\ccs_base\DebugServer\bin\DSLite" load --config=PATH\TargetConfig\sqpAM437x.ccxml -f PATH\ProgFiles\uart_sqpAM437x_flash_programmer.out -n 1

For more details and examples, please refer to the UniFlash Quick Start guide.

DSLite version 12.2.0.2919
Configuring Debugger (may take a few minutes on first launch)...
        Initializing Register Database...
        Initializing: IcePick_D_0
Loaded FPGA Image: C:\TI\uniflash_8.1.1\deskdb\content\TICloudAgent\win\ccs_base\common\uscif\dtc_top.jbc
        Executing Startup Scripts: IcePick_D_0
        Initializing: CS_DAP_M3
        Executing Startup Scripts: CS_DAP_M3
        Initializing: M3_wakeupSS_1
        Executing Startup Scripts: M3_wakeupSS_1
        Initializing: CS_DAP_DebugSS
        Executing Startup Scripts: CS_DAP_DebugSS
        Initializing: CortexA9
        Executing Startup Scripts: CortexA9
        Initializing: CSSTM_0
        Executing Startup Scripts: CSSTM_0
        Initializing: CSETB_0
        Executing Startup Scripts: CSETB_0
        Initializing: PRU_ICSS1_PRU0
        Executing Startup Scripts: PRU_ICSS1_PRU0
        Initializing: PRU_ICSS1_PRU1
        Executing Startup Scripts: PRU_ICSS1_PRU1
        Initializing: PRU_ICSS0_PRU0
        Executing Startup Scripts: PRU_ICSS0_PRU0
        Initializing: PRU_ICSS0_PRU1
        Executing Startup Scripts: PRU_ICSS0_PRU1
Connecting...
GEL: CortexA9: Output: ****  AM437x SQP Initialization is in progress ..........
GEL: CortexA9: Output:  **** Device Type: GP
GEL: CortexA9: GEL Output: System input clock is 24MHz
GEL: CortexA9: GEL Output: ****  AM43xx NITRO (1000MHz) with CLKIN=24MHz is in progress .........
GEL: CortexA9: GEL Output:       ****  Going to Bypass...
GEL: CortexA9: GEL Output:       ****  Bypassed, changing values...
GEL: CortexA9: Output:   ****  Locking PLL
GEL: CortexA9: GEL Output:       ****  MPU PLL locked
GEL: CortexA9: GEL Output:       ****  Core Bypassed
GEL: CortexA9: GEL Output:       ****  Now locking Core...
GEL: CortexA9: GEL Output:       ****  Core locked
GEL: CortexA9: GEL Output:       ****  Calculated PER SD Divisor=4
GEL: CortexA9: GEL Output:       ****  PER DPLL Bypassed
GEL: CortexA9: GEL Output:       ****  PER DPLL Locked
GEL: CortexA9: GEL Output:       ****  Calculated EXTDEV SD Divisor=2
GEL: CortexA9: GEL Output:       ****  EXTDEV DPLL Bypassed
GEL: CortexA9: GEL Output:       ****  EXTDEV DPLL Locked
GEL: CortexA9: GEL Output:       ****  DISP PLL Config is in progress ..........
GEL: CortexA9: GEL Output:       ****  DISP PLL Locked
GEL: CortexA9: GEL Output:       ****  DDR DPLL Bypassed
GEL: CortexA9: GEL Output:       ****  DDR DPLL Locked
GEL: CortexA9: GEL Output: ****  Setting DDR3  = 400MHz
GEL: CortexA9: GEL Output: ****  AM43xx NITRO configuration is done .........
GEL: CortexA9: GEL Output: Starting DDR3 configuration...
GEL: CortexA9: Output: EMIF PRCM is in progress .......
GEL: CortexA9: Output: EMIF PRCM Done
GEL: CortexA9: GEL Output: EMIF CLK enabled...
GEL: CortexA9: GEL Output: Waiting for VTP Ready .......
GEL: CortexA9: GEL Output: VTP is Ready!
GEL: CortexA9: GEL Output: VTP controller enabled
GEL: CortexA9: GEL Output: Checking if DLL is ready...
GEL: CortexA9: GEL Output: DLL is ready
GEL: CortexA9: GEL Output: Configuring DDR IOs and Control Module registers...
GEL: CortexA9: GEL Output: Configuration of Control Module registers complete
GEL: CortexA9: GEL Output: Setting up DDR3 H/W leveling configuration...
GEL: CortexA9: GEL Output: Starting EMIF controller configuration...
GEL: CortexA9: GEL Output: EMIF Config for SQP
GEL: CortexA9: GEL Output:

DDR3 Hardware leveling complete... Outputing all the leveling results !!!

GEL: CortexA9: GEL Output: PHY_STATUS_12=0x07000099
GEL: CortexA9: GEL Output: PHY_STATUS_13=0x070000A0
GEL: CortexA9: GEL Output: PHY_STATUS_14=0x070000B4
GEL: CortexA9: GEL Output: PHY_STATUS_15=0x070000AD
GEL: CortexA9: GEL Output: PHY_STATUS_16=0x00000000
GEL: CortexA9: GEL Output: PHY_STATUS_7 =0x00000046
GEL: CortexA9: GEL Output: PHY_STATUS_8 =0x00000044
GEL: CortexA9: GEL Output: PHY_STATUS_9 =0x00000046
GEL: CortexA9: GEL Output: PHY_STATUS_10=0x00000044
GEL: CortexA9: GEL Output: PHY_STATUS_11=0x00000000
GEL: CortexA9: GEL Output: PHY_STATUS_17=0x012700D1
GEL: CortexA9: GEL Output: PHY_STATUS_18=0x000000CD
GEL: CortexA9: GEL Output: PHY_STATUS_19=0x019300E0
GEL: CortexA9: GEL Output: PHY_STATUS_20=0x010300DF
GEL: CortexA9: GEL Output: PHY_STATUS_21=0x00000000
GEL: CortexA9: GEL Output: PHY_STATUS_22=0x00E70091
GEL: CortexA9: GEL Output: PHY_STATUS_23=0x03C0008D
GEL: CortexA9: GEL Output: PHY_STATUS_24=0x015300A0
GEL: CortexA9: GEL Output: PHY_STATUS_25=0x00C3009F
GEL: CortexA9: GEL Output: PHY_STATUS_26=0x00000000
GEL: CortexA9: GEL Output:

DDR3 configuration is complete!!!

GEL: CortexA9: GEL Output: Turning on EDMA...
GEL: CortexA9: GEL Output: EDMA is turned on...
GEL: CortexA9: Output: ****  AM437x IDK EVM Initialization is Done ******************


GEL: CortexA9: Output:  **** PRU-ICSS PRCM Enable Step 1 is in progress ****
GEL: CortexA9: Output:  **** PRU-ICSS PRCM Enable Step 1 is Done ****
GEL: CortexA9: Output:  **** PRU-ICSS PRCM Enable Step 2 is in progress ****
GEL: CortexA9: Output:  **** PRU-ICSS PRCM Enable Step 2 is Done ****
Fill Memory
        Verifying 0x54410000
        Filling 0x54417FF0: 99%
        Verifying 0x54417FF0: 99%
        Filling 0x54418000: 100%
Loading Program: PATH\ProgFiles\uart_sqpAM437x_flash_programmer.out
        Preparing ...
        PT_LOAD[0]: 0 of 40084 at 0x40300000
        PT_LOAD[0]: 32752 of 40084 at 0x40300000: 81%
        Finished: 81%
        Setting PC to entry point.: 81%
Running...
Success

当使用 Code Composer Studio (10.4.0.00006)加载.out-file 时、COM 端口上的"C"输出存在、但在大多数情况下、当尝试刷写映像时、该过程会以8%的速度失败。

发生这种情况时、QSPI 通信也不会启动。 当我以这种方式尝试时、加载成功、每10次加载一次。

CMD 行指令:

C:\TI\uniflash_8.1.1>dslite.bat -模式处理器-c COM6 -f path\ProgFiles\bootloader_boot_qspi_a9host_release.bin -d 2 -o 0

输出:

Executing the following command:
> C:\TI\uniflash_8.1.1\processors\ProcessorSDKSerialFlash.exe -c COM6 -f PATH\ProgFiles\bootloader_boot_qspi_a9host_release.bin -d 2 -o 0

For more details and examples, please refer to the UniFlash Quick Start guide.

The file extension is .bin

----------------------------------------------------------------------------
ProcessorSDKSerialFlash CLI Tool
Copyright (C) 2017-2022 Texas Instruments Incorporated - http://www.ti.com/
Version 1.7.0.0
----------------------------------------------------------------------------
Transferring the Image to Flash Programmer..

Transferring Header Information..
Header Transfer Complete!

Flashing Image of size 37768 bytes
8% complete
Flash Programming Failed!!

在尝试删除闪存时、闪存和 am4377之间也没有通信、即使很困难、也表示闪存擦除成功!

CMD 行指令:

C:\TI\uniflash_8.1.1>dslite.bat -模式处理器-c COM6 -d 2 -e 0x200000

输出:

Executing the following command:
> C:\TI\uniflash_8.1.1\processors\ProcessorSDKSerialFlash.exe -c COM6 -d 2 -e 0x200000

For more details and examples, please refer to the UniFlash Quick Start guide.


----------------------------------------------------------------------------
ProcessorSDKSerialFlash CLI Tool
Copyright (C) 2017-2022 Texas Instruments Incorporated - http://www.ti.com/
Version 1.7.0.0
----------------------------------------------------------------------------
Erasing Flash....

Transferring Header information..
Header Transfer Complete!!
Flash Erase Success!

在 Quicik 开始指南中、它显示了%errorlever%、可以检查先前的操作是否通过。 在我的案例中,“dslite.bat --mode load....” 命令,但"dslite.bat --mode processors..."  即使所有内容都成功加载(引导加载程序和.bin 文件)、指令也始终返回1。

这是否是批处理文件的错误、或者是否确定有错误? 是否有其他方法可以确保该流程成功/失败?

您对如何继续有什么建议吗?

此致、Timo

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

    Timo、您是否看到与另一个 e2e 帖子相同的行为?  另一篇文章提到、每次尝试其他尝试时引导都成功。  20%发生故障的电路板是否表现出这种行为、或者它们是否在每次引导尝试时都发生故障。

    我回顾了另一篇文章、我们有一些调试 q 和 A、我假设 CTRL_STS 和跟踪矢量现在也是如此?

    -您是否通过对电路板进行循环供电来引导?  您是否能够仅切换复位信号(POR 或热复位)?  如果是、电路板是否仅通过复位切换失败?  

    -如何执行快速开/关?  POR 输入信号在尝试失败时是什么样的?  在此快速开/关期间、电源是否会完全下降然后再次上升?  执行快速开/关时、检查 POR 复位信号是否仍然符合数据表中的电源时序图。  特别重要的是、在整个电源排序(上升和下降)发生时、复位信号应该为低电平。  它还需要保持低电平、直到输入时钟(clk_m_osc)稳定

    此致、

    James

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

    大家好、James、感谢您的回答。

    是的、我将通过对电路板进行下电上电来引导、这实际上取决于时序。 如上所述、如果关断时间大约为0.5s、则每次都失败。 但这只是我在办公桌上重现错误的一种方法。

    否 CTRL_STS 和跟踪矢量不相同:

    - CTRL_STS 和0x40338E48在显示的值之间变化,其他值始终保持不变

    - Ctrl_STS: 0x0600340 or 0x0640036E or 0x0650036C
    - Tracing Vectors
    	0x40338E40	:   0000001E   
    	0x40338E44  :   00000000
    	0x40338E48  :   00000004 or 00000008
    	0x40338E4B  :   00000000
    	0x40338E50  :   00000000

    我可以执行热复位(使用 WARMRSTn/引脚 G22)、如果启动周期运行一次、则在热重置时始终可以正常启动。 但是、如果它没有启动并且我尝试热复位、它就不起作用了。

    在两种情况下、POR 复位信号看起来相同:它在所有电源之前变为低电平、在~200ms 正确电源定序后再次升高(在这两种情况下、clk_m_osc 也是稳定的)。

    是的、电源完全下降。

    此致、

    Timo

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

    好的、问题肯定出在引导模式信号上。  由于 CTRL_STS 寄存器中的结果不同、这意味着处理器锁存的引导模式可能不同、因此引导顺序不同、甚至可能不包括 QSPI。

    由于您已经检查了复位和时钟信号、我猜是由于引导模式信号由拉电阻器控制、因此没有足够的时间稳定至有效的电压电平。  此外、如果在引导模式信号上有其他组件(例如、连接到其他外设)、则其他器件可能会加载这些信号、并且可能需要一段时间才能斜升至有效电压电平、尤其是在存在弱拉电流的情况下。  此外、如果它们连接到其他器件、则在确定外部拉电阻器的适当电阻值时、您必须考虑这些器件的 IO 上施加的拉电阻

    您要么必须延长 POR 以留出时间让引导模式信号稳定下来、要么对引导模式信号施加更强的拉电阻、使其更快地稳定至有效电压。  

    此致、

    James

       

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

    尊敬的 James:

    感谢您的建议、我发现了问题。

    自举与 AM437x 工业 EVM 非常相似、但我们使用 TI 的 DP83848K 作为 PHY。

    当自举失败时、DP83848K 的 TXD_0至 TXD_3全部上拉至3.3V。
    由于自举配置、TXD1 (Sysboot4)和 TXD3 (Sysboot2)也会被下拉(使用4.7K 电阻器)。 我最终会得到大约2.2V 的电压、因此处于错误的引导模式。

    当然、我未焊接 PHY、然后始终正确引导。
    我不知道为什么驱动引脚 TXD_0至 TXD_3 (引脚4-7)、我认为这是不可能的。

    这些引脚驱动的路/模式是否存在、或者是否存在 硬件错误?

    此致、

    Timo

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

    很抱歉、Timo、我有点困惑。  您介绍的是以太网 PHY (TXD0-3)的自举引脚。  我认为您在使用 Uniflash 进行 QSPI 引导或 QSPI 编程时遇到了问题。  以太网端口是如何参与的?

    如果它进一步集成到引导加载程序中、您可以在其中初始化以太网端口、则一定要考虑确保 PHY 正确锁存其自举。  当 PHY 复位无效时、必须确保连接到以太网 PHY 自举信号的任何信号都不会被驱动。  您是否具有 PHY 复位的软件控制?

    此致、

    James   

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

    很抱歉、现在我的解释不是很清楚。

    问题仍然是 QSPI 引导和使用 Uniflash 进行编程。

    正如您建议的、我检查了引导模式是否发生变化、发现有时对于 QSPI 引导和编程都不正确。

    我使用的自举配置:

    这些信号进入三态收发器、该收发器在启动后切换到高阻态。

    nSysReset 是热复位信号:

    在一侧、它们被路由到 PHY:

    在处理器的另一侧:

    我对 PHY 复位具有软件控制、但我认为问题发生在启动前/启动时。

    我测量了 POR 信号(C1)和 ECAT0_TXD3 (C3):

    TXD3信号应在整个时间内为零。 信号大约为2.2V 时的~150ms 电阻器 R29下拉、但也有一些东西驱动该线路。 热复位信号变为高电平后、U22进入高阻态模式、TXD3变为3.3V。

    TXD1信号表现出相同的行为。 在这两个信号为"高电平"的情况下、引导模式显然不正确(NAND_I2C、而不是 QSPI)。

    移除 PHY (U16)后、引导模式始终正确、我从未测量过这半个电压。

    因此、我认为 PHY 会干扰处理器的启动。

    我认为 PHY 的自举与此没有任何关系:

    PHY 的引导模式选择不需要 TXD_#信号、我很困惑、因为在我看来这些引脚只是输入引脚?

     我可以对 AM4377的引导模式信号施加更强的拉取、但这并不是一个真正令人满意的解决方案。

    您是否对 DP83848K 的行为有建议?

    非常感谢、

    Timo

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

    您能向我展示 PHY_RESETn 的电路、还是它的来源?  我认为、所发生的情况是、PHY 在处理器锁存 sysboot 信号之前或期间结束复位、并且其任何输出可能与 sysboot 信号电平发生冲突。  因此、可能不是 TXD 信号被妨碍(正如您所说的、它们不应该是 PHY 的输入)、而是一些其他 PHY 输出。

    此致、

    James

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

    原理图如下:

    我进行了一些测量

    C1:PORz

    C2:ECAT_RESETn

    C3:PHY_RESETn

    在首次 PHY_RESETn 信号处于高电平状态大约16us 时、放大了 ECAT_RESETn 为低电平的时间:

    我不确定为什么 ECAT_RESETn 在启动之前仍然处于高电平、这可能是问题所在?

    此致、

    Timo

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

    Timo、包含这些新信息的几个问题;

    -最新原理图显示 GPIO2_25 (引脚 A24)连接到 ECAT_RESETn、该 ECAT_RESETn 通过一个2K 电阻器下拉。  然而、在早期的原理图中、您会显示信号 SysBoot18 (该引脚应连接到同一引脚)以4.7K 的电流上拉。  因此、您将同一信号连接到74LVC245缓冲器的两侧。  我想这就是为什么您在复位的上升沿附近获得短脉冲的原因。  这对于引导并不是一个很大的问题、因为 SysBoot18只控制 CLKOUT 信号(也就是说、它不会以任何方式影响引导)、但是应该被修复、因为它会影响 PHY 复位。   

    -现在您需要检查一些其他引导模式信号、以查看是否存在类似的问题。  例如、C17、D17、D19 (和其他引脚)都是引导模式引脚、在您的电路板上、这些引脚也连接到 PHY、可能还连接到 SysBootxx 信号。  可能存在与前面所述类似的意外连接。  这些很可能会导致您的变量引导模式锁存。   

    -显示信号 nSys_Reset。  该信号的来源是什么?  您显示的示波器截图似乎是热复位的结果。  如何触发这些复位信号?  对电路板进行完全下电上电?  热复位的按钮切换?  还有其他方法吗?

    此致、

    James

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

    尊敬的 James:

    你们对双方的联系是正确的,不知怎么说,这使我不能注意到,谢谢。
    ECAT0_RXER / D19 / Sysboot13也存在相同的问题、但当我测量它时、它始终在 nSysReset 变为高电平后以正确的方式从低电平变为高电平。

    下面是 nSysReset 的原理图:

    我以全功率循环触发复位信号。

    此致、

    Timo

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

    您好、Timo、  

    我还想回到这样一个事实、即您在不同引导时将不同的值锁存到 CTRL_STS 中、这当然需要更正。  BOOT 引脚在 PORz 的上升沿附近被锁存、因此这些信号在该点必须处于正确的状态。  此时、PHY 应该处于复位状态、并且应该启用 sysboot 拉电流的收发器(这应该由热复位信号 nSysReset 来保证

    其中一个示波器截图显示 PHY_RESET 上的16us 脉冲、这意味着 nSysReset 也很高、恰好在 PORz 上升沿附近。  不应出现这种情况、因为热复位输出应通过 PORz 延长一定的时间、该时间由 PRM_RSTTIME1决定。   

    此设计中是否实现了 TRM 的图6-26 (请参阅下文)?  这将有助于在电源斜升期间的通电期间将 nSysReset 保持为低电平:

    此致、

    James