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.

[参考译文] AM6421:GPMC 以133M 时钟工作时出现读取问题

Guru**** 2395145 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1462083/am6421-read-problem-while-gpmc-working-at-133m-clock

器件型号:AM6421

工具与软件:

尊敬的 TI 专家:

我们将 GPMC 配置为同步 NOR SRAM 接口以访问我们的 FPGA 的双端口 RAM。

如果我在133M 时钟设置"rdAccessTime = 2"、并且通过将"rdAccessTime=3"或更低的时钟设置为90m 来获得正确的数据、则 GPMC 读取错误的数据。

这是故事。

我的时间设置如下:

"…

.timingParams =

.csOnTime = 0U、
.csRdOffTime = 4U、
.csWrOffTime = 4U、
.advOnTime = 0U、
.advRdOffTime = 3U、
.advWrOffTime = 3U、
.advAadMuxOnTime = 1U、
.advAadMuxRdOffTime = 2U、
.advAadMuxWROffTime = 2U、
.weOnTtime = 1u、
.weOffTime = 3U、
.oeOnTime = 1u、
.oeOffTime = 3U、
.oeAadMuxOnTime = 1U、
.oeAadMuxOffTime = 2U、
.pageBurstAccess = 0u、
.rdAccessTime = 2U、
.wrAcessTime = 2U、
.rdCycleTime = 4U、
.wrCycleTime = 4U、
.wrDataOnMuxBusTime = 0U、
.cycle2CycleDelay = 0U、
.busTurnAroundTime = 0U、
.cycleDelaySameChipSel = CSL_GPMC_CONFIG6_CYCLE2CYCLESAMECSEN_NOC2CDELAY、
.cycleDelayDiffChipSel = CSL_GPMC_CONFIG6_CYCLE2CYCLEDIFFCSEN_NOC2CDELAY、
}、

…………

从 FPGA 端的捕获快照如下:

正确数据如下  

数据错误如下所示

D0和 D1数据正确

我通过 示波器捕获 D0和 D1引脚、这是 GPMC 时钟"15M"和"133M"的结果。 如果"rdAccessTime"为"2"、则 D0和 D1都正确。 无论"15M"或"133M"都是如此。

问题:

看起来在最大工作频率"133M"时、即使数据物理上正确、GPMC 也无法通过将"rdAccessTime"设置为"2"来正确读取。

因此、对于"133M"、是否存在这样的时间限制(如"rdAccessTime")必须大于2?

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

    此处是 GPMC 时钟"15M"和"133M"的示波器显示的 D0和 D1引脚快照:

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

    尊敬的 

    感谢您的提问。

    不清楚您正在使用哪个内核和操作系统?

    此致

    Ashwani

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

    尊敬的 

    我使用 A53内核、不过是 DMA 通过 GPMC 进行数据传输。

    此外、我将使用此 SDK "mcu_plus_sdk_am64x_10_00_00_20"、它是"FreeRTOS"。

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

    也就是说,这是 A53运行 FreeRTOS +应用程序,使用 DMA + GPMC ?

    此致

    Ashwani

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

    有。

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

    尊敬的 

    是否有此问题的更新?

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

    首先、我要确保"rdAccessTime = 2"表示该图像中的访问时间是"red line"、对吧?

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

    您好、Jenny、

    我假设您没有更改 syscfg 中的任何 GPMC 时序参数。

    因此、 SYSCfg 中提供的所有时序参数都支持异步 NAND 器件和 PSRAM 异步、而不支持同步 NOR。

    在本例中、您将 FPGA 作为 NOR 与同步类型进行连接、时序参数属于 NAND 或 PSRAM 存储器。

    这可能是问题所在。 现在、要  在133 MHz 时钟上实现 GPMC NOR 同步、我们需要根据 NOR 存储器调整 GPMC 时序参数。

    请分享 GPMC DMA 项目并检查您的代码、因为我们在 MCU+SDK 中不支持 GPMC DMA。

    支持1:将计时参数调整到 NOR 同步存储器  

    支持2:查看 GPMC DMA 应用程序项目。

    我将把您的查询发送给硬件专家以获得支持1、然后我可以查看您的 GPMC DMA 应用。

    此致、

    Anil。

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

    尊敬的 Swargam:

    我确实更改了 syscfg 中的 GPMC 时序参数以适应同步 NOR。

    此外、I pinMode 设置 GPMC_FCLK 引脚以同步为 FPGA 生成时钟。

    我已附加"syscfg"和生成的所有配置文件、请查看。

    关键计时参数是"rdAccessTime"、您是否可以帮助确保这是我设置的确切位置?

    感谢让硬件专家参与支持1、我想确保您使用133MHz 将读取的数据精确调整到"rdAccessTime=2"、对吧?

    期待您的回应,这是一个紧迫的问题,目前阻止了我们的项目。

    Jenny Zhou

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

    您好、Jenny Zhou、

    我已经将您的问题发送给硬件专家、我也会发送邮件。

    同时、您可以针对具体用例尝试 PSRAM 时序设置、然后发现是否仍然遇到了问题。

    此致、

    Anil。

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

    尊敬的 Anil:

    我已经更改了计时设置、这里适合我的 FPGA RAM、我在这里附加了文件、您可以查看"ti_drivers_config.c'e2e.ti.com/.../2262.Board.zip

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

    大家好!

    是否有此问题的更新?

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

    尊敬的 Anil:

    是否有此问题的更新? 您是否查看过我的计时设置? 出什么问题了吗?

    我何时可以获得更新?

    我们的项目非常紧迫、取决于这一问题、我们预计将在本周2/7前解决问题。

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

    尊敬的 Anil:

    我有了一个全新的初始结构、GPMC 引脚具有"切换特性"、因此几乎所有引脚都可以延迟。

    那么、如果 GPMC_OE 发生延迟、即使 rdAccessTime=2、这意味着即使数据不在 OE 的中间位置进行采样、也可能在很短的时间之前、对吧?

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

    尊敬的 Jenny:

    为耽误您的时间而道歉。

    133M 波形的时序分析显示出建立时间的边缘性。
    133MHz 的周期为7.5ns。 从波形来看、数据信号的上升/下降时间似乎为~3ns。 这样在引脚上留下的建立时间少于4.5ns (不计算 OEn 的下降时间或 FPGA 中看起来很小的周转时间)。

    然而、在 GPMC 异步模式下、锁存数据的时钟位于内核内部(GPMC 功能时钟)。 通过 IO 缓冲区的延迟将从数据设置时间中进一步减去。 将 READACCETIME 从2增加到3后、133MHz 的建立时间就增加了7.5ns (保持时间延长了7.5ns)。

    获得更多建立时间的另一种方法是、在更早的时候将 OEONTIME 更改为1个 CLK 周期或1/2个 CLK 周期。 这可以通过 OEONTIME = 0 (1CLK 周期)或 OEEXTRADELAY = 1 (1/2 CLK 周期)来实现。 这假设 FPGA 可在 CSn 变为下降沿后接受 OEN 1/2周期。

    正如您观察到的、获得更多设置时间的另一种方法是降低时钟频率。

    上述方法可能会解决设置时间裕度问题、但它们不考虑在内部 GPMC 功能时钟锁存之前通过 IO 缓冲区为数据提供的可变延迟。 TI 需要解决异步模式的数据表中的这种不确定性。

    锁存数据的另外一种方法是配置同步读取(READTYPE = 1)、即使 CLK 实际上并不用来锁存控制信号。 使用同步模式的好处是、CLK 用于通过输入 IO 缓冲器(时钟环回)将数据从输出 IO 缓冲器锁存回。 因此、通过输出缓冲器时 CLK 会延迟、通过其输入缓冲器时 CLK 会再次延迟。 输出延迟与 OEn 大致相同、输入延迟与通过其 IO 缓冲器的数据相同。 更为有益的是、可以对照自由运行的 GPMC0_CLK 来检查数据表设置时间和保持时间(F12、F13)、从而确保满足设置和保持时间要求。

    CLK 到 OE (F10、F11)的数据表可变性确实使133MHz 处的关闭时序更加困难、但我认为此数据表参数过于悲观。 但是、为了使系统能够处理这个时序不确定性、我仍然建议提前启动 OEN 1/2 CLK 周期。 对于同步读取、设置 READTYPE=1。 将 OEONTIME 更改为0、并将 OEEXTRADELAY 设置为1。 将 RDACCESSTIME 保持为2。

    进行时序分析。

    您可以尝试上述方法并让我们知道结果。 首选方法是最后一个同步选项。

    此致、
    标记

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

    尊敬的 Mark:

    感谢您的评论。

    以下是一些评论和更新:

    1.我的设置是"同步模式"而不是"异步模式"、这是整个设置、有关详细信息、您可以参考我先前共享中的"ti_drivers_config.c"文件。

    '{

    .gpmcBaseAddr = CSL_GPMC0_CFG_base
    .dataBaseAddr = CSL_GPMC0_DATA_BASE
    .elmBaseAddr = CSL_ELM0_BASE
    .inputClkFreq = 1333333U、
    .intrNum = 138、
    .intrPriority = 4U、
    .chipSelBaseAddr = 1342177280U、
    .chipSelAddrSize = GPMC_CS_MASK_ADDR_Size_16MB、
    .clkDivider = CSL_GPMC_CONFIG1_GPMCFCLKDIVIDER_DIVBY1
    .waitPinNum = CSL_GPMC_CONFIG1_WAITPINSELECT_W0、
    .addrDataMux = CSL_GPMC_CONFIG1_MUXADDDATA_NONMUX、
    .timeLatency = CSL_GPMC_CONFIG1_TIMEPARAGRANULARITY_X1
    .waitPinPoll = CSL_GPMC_CONFIG_WAIT0PINPOLARITY_W0ACTIVEL
    .readType = CSL_GPMC_CONFIG1_READTYPE_RDSYNC、
    .writeType = CSL_GPMC_CONFIG1_WRITETYPE_WRSYNC、
    .timingParams =

    .csOnTime = 0U、
    .csRdOffTime = 4U、
    .csWrOffTime = 4U、
    .advOnTime = 0U、
    .advRdOffTime = 1U、
    .advWrOffTime = 1U、
    .advAadMuxOnTime = 1U、
    .advAadMuxRdOffTime = 2U、
    .advAadMuxWROffTime = 2U、
    .weOnTtime = 1u、
    .weOffTime = 3U、
    .oeOnTime = 1u、
    .oeOffTime = 3U、
    .oeAadMuxOnTime = 1U、
    .oeAadMuxOffTime = 2U、
    .pageBurstAccess = 0u、
    .rdAccessTime = 3U、
    .wrAcessTime = 2U、
    .rdCycleTime = 4U、
    .wrCycleTime = 4U、
    .wrDataOnMuxBusTime = 0U、
    .cycle2CycleDelay = 0U、
    .busTurnAroundTime = 0U、
    .cycleDelaySameChipSel = CSL_GPMC_CONFIG6_CYCLE2CYCLESAMECSEN_NOC2CDELAY、
    .cycleDelayDiffChipSel = CSL_GPMC_CONFIG6_CYCLE2CYCLEDIFFCSEN_NOC2CDELAY、
    }、

    2.我尝试过你的建议如下,但没有改变。

    '将 OEONTIME 更改为0、OEEXTRADELAY 设置为1。 将 RDACCESSTIME 保持为2'

    3.我们 FPGA 的行为是在"GPMC_CS"被置为有效后的下一个时钟时数据会出来。 即"1"、从"csOnTime"开始、"周期开始"也开始。

    尽管具有设置时间、波形显示为"2"、但数据已经稳定。 因此、如果"rdAccessTime=2"、我们应该能获得正确的数据。

    4.您能否确认在"同步模式"下、如果我设置"rdAccessTime=2"、GPMC 在"2'nd 时钟从读取周期开始时"读取"数据? 会有一些进展或延迟? 会是什么?

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

    尊敬的 Mark:

    是否还有此问题的更新?

    我可以得出结论吗:  

    即使在同步模式下、由于"rdAccessTime"和"获取数据的实际时间"之间存在内部延迟(设置时间)、因此我们需要将接入点从"2"扩展到"3"、以适应 GPMC 控制器的设置时间、即使波形显示数据已经稳定在"2"处、也会发生事件。  

    对吧?

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

    尊敬的 Jenny:

    好的、感谢您澄清了 FPGA 在时钟上升沿之后的第一个时钟上升沿(CS 为低电平)启动数据。 这就是为什么更早的 oen 1/2周期没有改变任何东西的原因。

    在观察了波形后、我同意应该满足1.12ns 的数据设置时间。
     -如果 CLK 也被探测,这将会有帮助。
     -信号是否探测到非常靠近 SOC 引脚?
     -您可以在133MHz 共享另一个波形-捕获 CLK、CS 以及经常错误捕获的位之一-例如 Data[1]或 Data[5]

    您是否还可以提供 GPMC 寄存器十六进制内容的转储、其中以下 n 是所使用的芯片选择?
     - GPMC_CONFIG1_n
     - GPMC_CONFIG2_n
     - GPMC_CONFIG3_n
     - GPMC_CONFIG4_n
     - GPMC_CONFIG5_n
     - GPMC_CONFIG6_n
     - GPMC_CONFIG7_n

    具体来说、我想知道 WAITREADMONITORING 位是否置位了。 如果设置了该位、如果清除了该位、会出现什么行为?

    我希望是证明存在设置时间违例、或者通过 ReadAccessTime = 2正确锁存数据。

    另一个实验是查看您是否可以延迟 CS 1/2周期并使用 ReadAccessTime = 3可靠地采集数据。 只需使 CSEXTRADELAY = 1且 ReadAccessTime = 3。 这对于在 CLK 到 CSN (F2、F3)的整个可变性情况下可靠工作可能是必要的。 将来收到的器件上从 CLK 到 CS 的延迟可能会有所不同。 它们的行为可能与您测试的器件不完全相同。 它们可能位于数据表参数的两端、您应该对 GPMC 时序进行编程以适用于两个极端。

    此致、
    标记

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

    尊敬的 Mark:

    此波形除"D"之外已有"D"。

    这是  GPMC 寄存器十六进制内容的转储、我看到"WAITREADMONITORINing"尚未设置。

    我已尝试 CSEXTRADELAY = 1和 ReadAccessTime = 3、是的、数据可以正确读取。 根据我的理解、只要"ReadAccessTime = 3"、无论"CSEXTRADELAY = 1或0"、数据都可以正确读取。

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

    尊敬的 Jenny:

    并且我尝试了"CSEXTRADELAY = 1"及 ReadAccessTime = 3"、是的、可以正确读取数据。 根据我的理解、只要"ReadAccessTime = 3"、无论"CSEXTRADELAY = 1或0"、数据都可以正确读取。

    我建议保持 CSEXTRADELAY = 1且 ReadAccessTime = 3。 这些时序更符合 CLK 到 CSn (F2、F3)的整个可变性范围。

    感谢您确认配置正常工作。

    此致、
    标记

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

    您好!

    因为没有进一步的响应。 我们将关闭该主题。

    如果您想继续讨论、请随时回过头来。

    此致

    Ashwani