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.

[参考译文] AM620-Q1:[Valeo][AM625-Q1/10][SDK V.10]:使用 ECh 命令自动检测 NAND 闪存芯片的实现方案

Guru**** 2867690 points

Other Parts Discussed in Thread: AM623, AM625-Q1, AM620-Q1

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1633074/am620-q1-valeo-am625-q1-sdk-v-10-implementation-to-auto-detect-nand-flash-chip-using-ech-command

器件型号: AM625-Q1
主题中讨论的其他器件: AM623AM620-Q1

您好 TI 支持团队:

如您所知、NAND 闪存存储器供应商近期存在供应链短缺问题。
因此、我们的项目现在需要使用相同的软件灵活地支持多个 NAND 闪存版本、而无需重新编译每个芯片的静态二进制文件。

我们当前版本的 SDK (SDK 10.00.00 ) 预构建了静态配置,无法满足我们当前的需求。 首先、我们想问是否有能够实现此功能的较新版本的 SDK。
关于我们当前的 SDK、我们可能需要一个补丁来启用此功能。 我们将提出一个设计、希望与您讨论、以便在运行时使用检测连接的与非门芯片  ONFI 读取参数页面 (ECh)  命令。

我们建议的设计流程:

  1. 使用保守默认配置初始化 NAND。

  2. 问题 A  复位 (FFh)  作为第一个操作、因为某些供应商限制需要它。

  3. 发布  读取参数页面 (ECh)  具有 00h 地址周期的命令。

  4. 解析 256 字节参数复制并映射其数据、以根据这些结果在运行时重新配置 NAND 属性。

  5. 使用真实配置写入寄存器。

  6. 通常将 NAND 用作读取/写入命令。
我们有一些问题,我们需要您的支持来回答:
  1. ROM 代码支持:  我们 SoC 的当前 ROM 代码是否在初始启动阶段具有用于“ NAND 自动检测“的内置机制?
    如果是、 它是基于 我们建议的类似设计、还是有更好的方法?
    如果没有、您对此主题的建议是什么? 因为它会阻碍我们。
      
  2. 建议的设计:  您在建议的设计理念中看到了缺陷吗?
    使用默认配置启动 NAND 然后 在运行时重新配置 NAND 是否安全? 如果是、默认配置可以是什么? 尤其是时序参数。

  3. GPMC 时序参数:  我们已经观察到 .timingParams  gGpmcAttrs[] 内的数组中的结构 ti_drivers_config.c。 这些参数(例如,,,)是否 csRdOffTime rdAccessTime weOnTime要求使用每个 NAND 芯片的值都是唯一的?  
    如果时序必须变化、TI 建议 数据表中提到的标准 NAND 时序特性与 syscfg 工具生成的配置数组中的特定 GPMC 变量之间的官方映射是什么?  

  4. ECh 命令: ECh 命令的正确实现序列是什么?
    作为概念的证明,我们尝试了两个序列,但两个都给出了相同的 结果不正确 (命令返回成功,但数据错误)

     第 1 次试验序列:
     -使用列地址 0x00 和 params.checkReadypin = FALSE 发送 ECh 命令
     -发送读取状态命令 70h
     -发送读取模式命令 00h 以启用数据输出模式
     -使用 API GPMC_NandReadData() 获取数据  

     第 2 次试验序列:
     - 使用列地址 0x00 和 params.checkReadypin = FALSE 发送 ECh 命令
     -等待延迟(超过读取页面时间)
     -使用 API GPMC_NandReadData() 直接获取数据

我们期待您提供指导、说明这种动态方法是否能够与 GPMC 驱动程序架构和引导序列兼容、并在需要补丁时提供代码示例。

提前感谢、

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

    你好 Reem Abo el Khair、

    感谢您的查询!

    请允许我们在内部讨论列表中的问题。

    我们可能需要邀请 ROM 和软件 GPMC 驱动程序专家来评估 ROM/SBL 软件灵活性

     将不同的 NAND 闪存适应 AM623(通过 0xEC 命令教学其参数)。

    问:是否请指定 SDK 类型 — 是 Linux 还是 SDK-MCU-PLUS(RTOS,裸机)

    由于美国的复活节假期、我们的回复可能会出现一些延迟。  

     

    谢谢

    此致

    Anastas Yordanov

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

    您好、Anastas、

    对于目标 AM625-Q1、它是 SDK-MCU(版本 10.00.00)。

    最棒的餐厅

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

    尊敬的 Reem Abo el Khair:

    感谢您更新我们的信息。

    我已转达给 AM620-Q1 GPMC 硬件和 ROM/SDK MCU +软件专家。 还在等待他们的答复。

    我会在收到他们的答复后立即通知你。

    此致、

    Anastas Yordanov

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

    你好 Reem Abo el Khair、

    我添加了软件支持来检查您的代码以查询参数页面。

    关于 ROM、AM62x 上的 ROM 不会从 NAND 闪存的参数页面中提取时序。 在使用支持的 NAND 时是刚性的、相关信息请参见 TRM 5.4.9.1 GPMC NAND 引导加载程序操作(抄写如下)。

    TRM 5.4.9.1 中的最后一行“GPMC 设置为符合 NAND 闪存的模式 0 时序“、请参阅随附的 ONFI 规范 — 表 12 时序模式 0、1 和 2。  https://onfi.org/files/onfi_1_0_gold.pdf

    TRM 表 5-38 中提供的寄存器尝试匹配这些 ONFI 模式 0 时序。

    这些慢速计时旨在支持所有符合 ONFI 1.0 标准的 NAND 闪存器件、而无需查询其计时。

    ROM 还对总线宽度(仅限 8 位)、密度(高达 2GB)、页面大小(仅限 2K、4K)、ECC(不允许闪存内部 ECC)、ECC(需要 BCH8)有限制。

    此致、
    标记

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

    您好、

    我看到您讨论的是 GPMC NAND、而不是串行 NAND 闪存、因此我要将此工单重新分配给正确的专家。

    此致、

    Vaibhav

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

    你好 Reem Abo el Khair、

    我已经查看了代码、似乎是正确的。

    您发送的是 EC、然后是 0x00、这是正确的。

    发出 768 字节的读取命令后、需要等待 0.2 秒才能读取数据。

    我建议将 WaitReady 引脚设置为 true(而不是使用延迟)、并在读取数据之前检查状态是否已就绪。

    在您的测试用例中、发出读取命令后到底会发生什么情况? 所有 768 个字节是否已损坏、或者前 256 个字节是否正确?

    您能解释一下您所面临的问题吗?

    与非器件时序参数可能会根据工作电压而变化。 我们在 1.8V 下为与非器件调整了这些时序参数。

    您当前使用的是哪个 NAND 器件? 工作电压是多少? 您还能分享数据表吗?

    此致、

    Anil.

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

    你好  Reem Abo el Khair、

    您是否还可以确认应用程序中使用的是 devConfig->cmdReadParameterPage?

    此致、

    Anil.

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

    您好:

    代码正常工作、我们能够读取参数页面。

    但是、我们仍然对 GPMC 时序配置有疑问。

    1- .timingParams  GPMC_HwAttrs gGpmcAttrs[CONFIG_GPMC_NUM_INSTANCES]如果我们使用的 NAND 芯片与当前的 NAND 芯片不同、时序配置(阵列静态中的部分)是否会有所不同?


    2-如果是、.timingParams数组中的默认值是什么 GPMC_HwAttrs gGpmcAttrs

    3-如何在数据表中的时序规格值与 
    GPMC_timingParams 结构元素之间进行映射?

    4- MCU SDK 的当前实现是否使用 ONFI 时序模式功能? 我们使用的计时模式是什么?

    5 对于 U-Boot、固件是否在使用 ECh 命令识别 NAND 芯片后加快时序(切换到更高的时序模式)? 还是一直保持在计时模式 0 直到闪烁结束?

    提前感谢、

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

    你好  Reem Abo el Khair、

    MCU SDK 的 GPMC 需要根据特定 NAND 器件和运行条件量身定制的时序参数。 这些参数并不是通用的、因为每个 NAND 制造商都有不同的电气特性。 工作电压也会显著影响时序。 较高的电压允许更快的访问、而较低的电压需要较慢且更保守的时序。

    我们分享了在 1.8V 电压下运行的 NAND 器件的时序参数。

    如果我们为几乎所有器件实现通用 NAND 时序参数支持、则性能会下降、类似于您已经遇到的性能下降。 此时、我们专门针对您的器件优化了时序参数。

    我们遵循 Excel 工作表方法。 您可以提供数据表中的所有时序详细信息、并且根据此信息、您可以选择适当的时序参数。

    /cfs-file/__key/communityserver-discussions-components-files/908/GPMC_2B00_tool.xlsm

    当前 MCU SDK 未实现 ONFI 模式。 SDK 不会发送模式切换命令来更改与非门时序行为。 GPMC 时序参数在 GPMC 初始化期间配置一次、并在整个运行过程中保持固定。

    这种方法是可以接受的、因为固定时序参数配置为与安装在 EVM 上的 NAND 器件一起使用。

    每个 NAND 读取操作都遵循正确的时序(甚至是 ONFI 命令)。 会根据配置的时序参数发送命令。 数据传输符合访问时间和周期时间规范以及现有的时序值。

    对于 uboot、在使用 ECH 命令识别 NAND 芯片后、固件是否会加快时序(切换到更高的时序模式)? 或者它是否保持在计时模式 0 直到闪烁结束?

    我正在将您的查询发送给 Linux 专家以获取上述评论。

    此致、

    Anil.

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

    您好 Anel、

    在随附的 Excel 工作表中、我可以看到选项卡“Reg Dump“、其中有一个编号为 0 至 6 的“GPMC Chip Select“下拉菜单。 您能否说明每个数字的映射? 它们是否代表不同的 ECU 目标或不同的 NAND 芯片?

    另外、如果我想支持的不同 NAND 芯片都具有相同的 1.8V 工作电压、我是否还需要为每个芯片配置不同的 GMPC 时序?

    此致、

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

    你好 Reem Abo el Khair、

    让我在 Linux SDK 的 u-boot/kernel 中添加 nand 器件配置。
    1/。 NAND 器件参数(即时序,总线宽度和芯片选择...) 在 GPMC_CONFIGx 寄存器中配置 (x=1 至 7)

    2/。 片上 ROM 中的 GPMC_CONFIGx 寄存器配置
    请参阅 Mark 早期答复中的注释。

    3。 GPMC_CONFIGx 在 SPL/u-boot/kernel 中寄存器配置
    通过驱动程序模型 (DM) 框架调用 GPMC-n 和器件树节点以配置 GPMC_CONFIGx 寄存器。 这种情况发生在驱动程序探测过程中、通常在访问子器件(如 NAND 闪存)时启动。 请参阅 u-boot 中使用的两个示例 dtsi/dtso 文件以供参考。
    https://git.ti.com/cgit/ti-u-boot/ti-u-boot/tree/dts/upstream/src arm64/ti/k3-am62-main.dtsi?h=12.00.00.07#n1274
    https://git.ti.com/cgit/ti-u-boot/ti-u-boot/tree/dts/upstream/src lp/arm64/ti/k3-am62-lp-sk-nand.dtso?h=12.00.00.07#n42

    4。 ONFI 参数是在 SPL/u-boot/kernel 阶段读取的、其中只有 nand 设备几何体(即页面大小,OOB 大小等)。 已使用、但不使用 nAND 器件时序参数(通过 dtsi/dts/dtso 等配置)。

    在 Linux SDK 中可考虑的一个选项:
    -将电路板 DT 节点与 GPMC-n 和设备绑定,并为特定的 GPMC-n 和设备配置 DT 节点
    -根据电路板检测动态加载 DT 节点或 DT 叠加

    此致、
    - Hong

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

    你好  Reem Abo el Khair、

    需要选中“Snand Times“选项卡。

    在此选项卡中、您需要在数据表的 E 列中输入存储器时序详细信息。

    根据此信息、您需要调整 B 列中的时序值。确保在更改这些值时、最小值和最大值保持在指定范围内。

    此致、

    Anil.