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.

[FAQ] [参考译文] 【常见问题解答】AM2434:了解 UART Uniflash 和 OSPI 闪存编程

Guru**** 2889230 points

Other Parts Discussed in Thread: UNIFLASH, SYSCONFIG

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1636275/faq-am2434-understanding-uart-uniflash-and-ospi-flash-programming

器件型号: AM2434
Thread 中讨论的其他器件: UNIFLASHSYSCONFIG

uart_uniflash.py 允许将二进制文件刷写到 EVM 上的闪存。 UART 用作将文件发送到闪存到 EVM 的传输接口或接口。 执行 uart_uniflash.py 脚本时、会启动一个多级过程以通过 UART 对外部闪存进行编程。 以下过程从闪存和 OSPI 角度进行。

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

    1.初始 UART 引导加载程序传输

    在 PC 上执行以下命令后、

      python uart_uniflash.py -p COM3 --cfg=sbl_prebuilt/am243x-evm/sbl_uart_uniflash.cfg

    会发生以下情况:

    • 该脚本会与目标器件建立串行连接。
    • 目标器件的 ROM 引导加载程序在 UART 引导模式下正在等待、该模式通过引导引脚进行配置。
    • 然后、该脚本使用 XMODEM 协议通过 UART 将 SBL UART Uniflash 引导加载程序发送到器件。
    • 然后将此 SBL 加载到内部 RAM、即 OCMC RAM 或 MSRAM。 到目前为止没有闪存参与。


    2.由 SBL 完成 OSPI 控制器初始化

    在目标上运行 SBL_UART_UNIFLASH 后:

    • OSPI 外设配置如下:
      • 时钟配置
      • OSPI 信号(CLK、D0-D7、CS 线路)的引脚多路复用。
      • 协议模式选择 — 单通道,四通道,八通道。
    • 检测到闪存器件:
      • SBL 通过发出命令 0x9Fh 来读取 JEDEC ID、以识别闪存制造商和闪存器件。
      • 它还通过读取 SFDP 表中的参数来配置特定于闪存的参数(扇区大小,页面大小,寻址模式)。
      • 然后、使用适当的命令序列初始化闪存器件结构。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    3、闪存准备

    通常执行以下两个过程:

    • 用于复位闪存器件的闪存复位序列:
      •           OSPI_writeCmd(0x66);  // Reset Enable
        
                  OSPI_writeCmd(0x99);  // Reset Memory

        •  QE 位配置(请参阅 QE 位常见问题解答):
          • SBL 读取 QE 位的当前状态寄存器值、如果使用四路模式、则设置四路使能位。
          • 然后、SBL 写回修改后的状态寄存器。


        4.闪存编程操作

        对于.cfg 中的每个文件:

          --file=../path/to/app.release.appimage --operation=flash --flash-offset=0x80000


        会发生以下情况:

        • A.扇区擦除:
          • 针对目标偏移发出写入启用命令和扇区/块擦除命令。
          • 然后会轮询状态寄存器、直到进行中写入 (WIP) 位清零。
        • b.页面编程:
          • 数据通过 UART 从 PC 传输到器件。
          • 然后发出“写入启用“命令和“页面编程“命令。
          • 然后将数据写入闪存。
          • 系统会轮询状态寄存器、直到 WIP 位清除。


        5.闪存控制器状态

        编程期间、OSPI 控制器以以下方式运行:

        • SPI 模式。
        • QSPI 模式(如果 QE 位被设置)。
        • DAC 模式禁用:在英飞凌闪存器件的闪存写入期间不使用直接访问控制器。
      • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

        刷写后闪存的角色

        对闪存进行编程并且器件复位后、会发生以下情况:

        引导流程概述

        加电→ROM Boot→Flash Detection→Load SBL→SBL Execution→Load Application

        ROM 引导加载程序初始化

        • 引导模式选择:ROM 读取引导引脚以确定引导器件、在本例中为 OSPI 引导模式。
        • 然后、ROM 在基本 SPI 模式下初始化 OSPI 控制器

        2.通过 ROM 检测闪存设备

        • ROM 执行最少的闪存初始化。
        • 重要说明:ROM 不配置 QE 位或高级模式。


        3.引导加载程序映像标头读取

        ROM 从闪存(通常为 0x0)中的固定偏移量读取、闪存为引导映像标头、其中包含魔法编号、映像大小、加载地址、入口点。

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


        4. SBL 加载

        • ROM 将 SBL 二进制文件从闪存读取到内部 RAM 中。
        • 它使用基本的 SPI 读取命令并将其复制到标头中指定的加载地址。
        • 然后它将控制权转移到 SBL 入口点。


        5. SBL 现在控制闪存

        SBL 通过配置以下内容来重新初始化 OSPI 以获得出色性能:

        • 时钟频率:将 OSPI 时钟增加到支持的最大值、166MHz 或 SBL 的 SysConfig 中指定的值。
        • 协议:配置 QSPI 或八路模式。
        • DAC 模式:可以启用直接访问控制器。
        • PHY 模式:可以为高速运行启用 PHY。
        • QE 位:它还可以验证和设置 QE 位以用于四路模式运行。


        6.从闪存加载应用程序

        SBL 从闪存中从--flash-offset 参数中指定的偏移处读取应用程序映像:

        现在、每个应用程序都可以:

        • 复制到 RAM:SBL 加载到 MSRAM/DDR、CPU 从 RAM 执行。
        • XIP(就地执行):CPU 直接从闪存执行、需要 DAC 模式。