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.

[参考译文] AM263P4:OSPI 驱动程序代码中的 PHY 攻击向量是什么、如何使用此和 PHY 调优数据如何从 TRM 检索此信息

Guru**** 2908380 points

Other Parts Discussed in Thread: SYSCONFIG, UNIFLASH

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1572870/am263p4-what-is-phy-attack-vector-in-ospi-driver-code-what-is-the-use-of-this-and-phy-tuning-data-how-to-retrieve-this-info-from-trm

器件型号:AM263P4
Thread 中讨论的其他器件:SYSCONFIG、UNIFLASH

工具/软件:

尊敬的团队:

您好。

我目前正在查看 OSPI 驱动程序代码、以了解 SDK 提供的 SBL 工程中的 XIP 功能。 在这样做的时候、我遇到了这个术语 “PHY 攻击向量。“

我计划为我的工程实施自定义引导加载程序、在这里初始化 OSPI 外设并启用 XIP。 在 TRM 中、我注意到、如果引导开关设置为 xSPI 引导模式、则 RBL 会初始化 25MHz 上 XIP 的 OSPI 外设。 不过、我想覆盖这一点并将时钟频率初始化为 133MHz。 为此、我引用了 “sbl_OSPI_multiple_mcelf"</s>“ SDK 文件夹中的 SBL 工程(如果此工程不适合 XIP 实现,请更正我)。

我正在工作区中重新初始化 OSPI 外设寄存器、以将时钟频率设置为 133MHz。

我的疑问是:

  1. 到底是什么 PHY 攻击向量 PHY 调优参数 ? 他们的目的是什么? (据我所知,我在 TRM 中找不到有关此方面的任何信息。)

  2. PHY 启动矢量对于 OSPI XIP 实现是否是必需的? 在示例代码中的偏移量 0x80000 处、需要检查是否存在攻击向量。 如果不存在、代码会擦除该扇区并刷写此攻击向量(被定义为工程中的常量数组)。

  3. 我不确定 RBL 是否在 0x80000 处执行 PHY 攻击向量的刷写、以便我可以决定是否在我的实现中跳过此逻辑。

我们非常希望得到快速的答复。

提前感谢。

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

    您好、

    到底是什么 PHY 攻击向量 PHY 调优参数 ? 他们的目的是什么? (据我所知,我在 TRM 中找不到有关此内容的任何信息。)

    PHY 攻击向量是闪存中的一组预定义值以及驱动程序代码。 为了修复 phy 调优参数、驱动程序读取写入闪存中的攻击向量。 它读取攻击向量并 与驱动程序代码中的攻击向量进行比较。 这是在通过 PHY 调优参数进行扫描时完成的、该参数基本上为 3 个延迟值(txdll、rddll 和周期延迟)。 如果从闪存读取的攻击向量和驱动程序代码中存在的攻击向量相同、则用于读取的延迟值被视为有效。

    调优参数是应用于 DQS 信号的延迟值、使其与采样的眼图对齐。 请参阅以下应用手册以了解详细报告:

    https://www.ti.com/lit/an/spract2/spract2.pdf?ts = 1759493111038&ref_url=https%253A%252F%252Fwww.google.com%252F

    PHY 攻击向量对于 OSPI XIP 实现是否是必需的? 在示例代码中的偏移量 0x80000 处、需要检查是否存在攻击向量。 如果不存在、代码将擦除该扇区并刷写此攻击向量、此攻击向量被定义为工程中的常量数组。

    PHY 调优需要 PHY 攻击向量。 PHY 是一个有助于加快 OSPI 通信的模块。 对于 XIP、PHY 不是必需的、但如果没有 PHY、通信速度会更慢

    我不确定 RBL 是否在 0x80000 执行 PHY 攻击向量的刷写、以便我可以决定是否在我的实现中跳过此逻辑。

    RBL 不会刷写攻击向量。 SDK 驱动程序就像您在问题中提到的那样。 此外、如果您使用 UART 刷写实用程序、也会执行该操作。

    此致、

    Aswin

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

    如 TRM 中所述、RBL 对 OSPI 进行了一些配置并将时钟频率设置为 25MHz、我想了解正在配置的寄存器以及写入这些寄存器的值是什么。

    在哪里可以获取这些代码或者至少获得带 25MHz 的 OSPI_XIP 的裸机逻辑?

    根据我的理解、XIP 实施不需要 DQS 线路是否正确? 请多多指教。

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

    尊敬的 Sanith:

    根据我的理解、XIP 实施不需要 DQS 行吗? 如果我错了、请纠正我。

    XIP 不需要 DQS。 它与使用 PHY(即高速)时的信号采样有关。  

    [引述 userid=“637661" url="“ url="~“~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1572870/am263p4-what-is-phy-attack-vector-in-ospi-driver-code-what-is-the-use-of-this-and-phy-tuning-data-how-to-retrieve-this-info-from-trm/6057242

    在哪里可以获取这些代码或者至少获得带 25MHz 的 OSPI_XIP 的裸机逻辑?

    [/报价]

    ROM 代码未公开提供。 要在 25MHz 执行 XIP、您可以通过时钟配置器将 OSPI 时钟配置为 200MHz、并禁用 PHY。 这将使 ospi 时钟为 ospi/8 200MHz = 25MHz。  

    在 sbl_ospi_morple_elf 上执行此操作、并使用 hello world XIP 示例。

    如 TRM 中所述、RBL 对 OSPI 进行了一些配置并将时钟频率设置为 25MHz、我想浏览正在配置的寄存器以及写入这些寄存器的值。

    请您详细说明这部分。 您指的是哪一部分引导模式部分? 可能有多种 ospi 引导模式。

    此致、

    Aswin

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    请详细说明这一部分。 您指的是哪一部分引导模式部分? 可能有多种 ospi 引导模式。

    我想使用 xSPI 引导模式、但在 TRM 中没有有关 xSPI 配置和加载过程的引导部分可供参考。 这里有关于 OSPI (1S)、OSPI (8S)、QSPI (4S) 和 UART 引导模式的部分、但我不想让 TI 团队提供 xSPI 引导加载程序操作和加载过程。

    在一些表格中、他们提到 xSPI 将在 25MHz 上运行、即、RBL 将以 25MHz 的频率配置 OSPI、并且该频率非常低、以便满足所有的时序要求。

    在 sbl_ospi_multiple_elf 上执行此操作、并使用 hello world XIP 示例。

    我是否可以将“sbl_ospi_multiple_elf"示“示例工程作为 XIP 实现的自定义 SBL 的参考?

    “Hello World XIP“示例的用途是什么? 为什么我应该选择此示例而不是其他示例? 在“Hello World XIP“示例中、他们使用 FSS1 存储器区域—此区域是什么?为什么需要它?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引述 userid=“637661" url="“ url="~“~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1572870/am263p4-what-is-phy-attack-vector-in-ospi-driver-code-what-is-the-use-of-this-and-phy-tuning-data-how-to-retrieve-this-info-from-trm/6058579

    我是否可以将“sbl_ospi_multiple_elf"示“示例工程作为 XIP 实现的自定义 SBL 的参考?

    “Hello World XIP“示例的用途是什么? 为什么我应该选择此示例而不是其他示例? 在“Hello World XIP“示例中、他们使用 FSS1 存储器区域—此区域是什么?为什么需要它?

    [/报价]

    是的、该工程可用于 SBL 参考。  

    、“Hello World XIP“示例的用途是什么? 为什么我应该选择此示例而不是其他示例? 在“Hello World XIP“示例中、他们使用 FSS1 存储器区域—此区域是什么以及为什么需要它?

    这是一个 XIP 示例。 在此示例中、.text 和.rodata 段配置为 在闪存中、这意味着代码将位于 XIP 中。
    在其他示例中、这些段配置为在 RAM 中。 这就是为什么使用 hello world 示例来实现 XIP 的原因。  
    您还可以使用其他外部、但在这种情况下、对于 XIP、需要执行配置以创建示例 XIP(即将代码保留在闪存中)。

    请参阅此文章、了解如何配置 XIP、

    software-dl.ti.com/.../BOOTFLOW_XIP.html

    我想使用 xSPI 引导模式、但在 TRM 中没有关于 xSPI 配置和加载过程的引导部分可供参考。 这里有关于 OSPI (1S)、OSPI (8S)、QSPI (4S) 和 UART 引导模式的部分、但没有 xSPI 引导加载程序操作和加载过程、我希望 TI 团队提供此信息。

    我会用这个信息回复您

    此致、

    Aswin

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    这是一个 XIP 示例。 在此示例中、.text 和.rodata 段配置为 在闪存中、这意味着代码将位于 XIP 中。
    在其他示例中、这些段配置为在 RAM 中。 这就是为什么使用 hello world 示例来实现 XIP 的原因。  [/报价]

    那么、SDK 文件夹“C:\ti\mcu_plus_sdk_am263px_10_02_00_15\examples\drivers\ospi“中提供的此示例“OSPI_Xi_Flash"的“的相关信息

    此示例是否用作 XIP?是否可以将此示例用作为 XIP 构建应用程序代码的参考?

    即、SBL 将“sbl_OSPI_multiple_elf"工程“工程作为示例和

    对于最终应用程序代码、我是否需要参考“hello world XIP“或“ospi_flash_XIP"工程“工程?

    提前感谢  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    对于最终应用程序代码、我是否需要将“hello world XIP“作为参考、或将“ospi_flash_XIP"工程“工程作为参考?

    这取决于您的用例。 如果需要将应用程序的整个代码保存在闪存中、则可以使用 hello world 示例。 通过检查此工程的 SysConfig、链接器或映射文件、您将看到.text 和.rodata 段位于闪存中。

    对于 ospi_flash_xIP 示例、大多数代码都在 ram 中、此示例有两个函数和一个保留在闪存中的常量。 因此、XIP 会针对这些内容发生。

    此致、

    Aswin

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

    ROM 将读取 SFDP 表。 方法是 1:1 - 1 - 1 模式。 然后它将获得读取命令。 之后、它将在 8D 引导模式下读取映像。 引导加载程序模式表 5.1.2 中介绍了这方面的详细信息。 应用程序不需要处理此问题。 这是由 RBL 本身完成的。 只需要确保引导模式正确。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引述 userid=“642990" url="“ url="~“~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1572870/am263p4-what-is-phy-attack-vector-in-ospi-driver-code-what-is-the-use-of-this-and-phy-tuning-data-how-to-retrieve-this-info-from-trm/6060384

    这取决于您的用例。 如果需要将应用程序的整个代码保存在闪存中、则可以使用 hello world 示例。 通过检查此工程的 SysConfig、链接器或映射文件、您将看到.text 和.rodata 段位于闪存中。

    对于 ospi_flash_xIP 示例、大多数代码都在 ram 中、此示例有两个函数和一个保留在闪存中的常量。 因此、XIP 会针对这些内容发生。

    [/报价]

    我懂了。 它现在更清晰、更有道理

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    ROM 将读取 SFDP 表。 方法是 1:1 - 1 - 1 模式。 然后它将获得读取命令。 之后、它将在 8D 引导模式下读取映像

    如果 SFDP 表的读取和解析是在 RBL 级别处理的、则无需在 SBL 或应用程序代码中实现 SFDP 加载和解析逻辑。 是这样吗?

    您能帮助我解决以下问题吗?

    在自定义 SBL 项目中实现 XIP(就地执行)所需的最低配置是什么?
    我打算在不依赖 SDK 提供的代码或 API 的情况下使用裸机逻辑实施 XIP。 我目前正在分析代码流程、重点是相关寄存器配置的顺序以及写入这些寄存器的值。

    目标是让我的自定义 SBL 从闪存中的特定偏移量加载应用程序代码、从而允许应用程序就地执行 (XIP)

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    如果 SFDP 表的读取和解析是在 RBL 级别处理的、则无需在 SBL 或应用程序代码中实现 SFDP 加载和解析逻辑。 是这样吗?

    通常、SBL ospi 会执行闪存复位并再次重新配置闪存、以在所需的协议下工作。  

    我来检查一下如何在不进行闪存复位和闪存重新配置的情况下完成该操作。 我会回来的。

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

    尊敬的 Sanith:

    这是可以实现的。 我通过以下方式进行了验证、

    1.以 sbl_ospi_morple_elf 工程为例、

    2.注释掉 flash_fixup_ospi_boot

    3.在 sysconfig 中勾选 skipHwInit 复选框

    4.同时取消勾选 pinmux 的 ospi 复位引脚

    5.不要尝试刷写并引导 SBL 和应用程序。

    您可以检查 SDK 代码流在此场景中的工作原理。

    此致、

    Aswin

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    要在您的定制 SBL 工程中实施 XIP(就地执行)、请按照以下系统步骤操作:

    感谢您的信息

    [引述 userid=“631337" url="“ url="~“~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1572870/am263p4-what-is-phy-attack-vector-in-ospi-driver-code-what-is-the-use-of-this-and-phy-tuning-data-how-to-retrieve-this-info-from-trm/6061939

    由于闪存始终在 1S-1S-1S SDR 模式下初始化、因此请配置您的 OSPI 控制器以在 1S 模式下开始通信。 这涉及设置:

    • 读取数据传输类型
    • 地址传输类型
    • 指令类型
    • 读取操作码
    • 写入操作码
    • 波特率
    [/报价]

    在这三个寄存器中、操作码字段确实令人困惑

    1.  OSPI_FLASH_CFG_DEV_INSTR_RD_CONFIG_REG .RD_OPCODE_NON_XIP_FLD[7:0]

    2.  OSPI_FLASH_CFG_DEV_INSTR_WR_CONFIG_REG .WR_OPCODE_FLD[7:0]

    3. OSPI_FLASH_CFG_FLASH_CMD_CTRL_REG .CMD_OPCODE_FLD[31:24]

    要发出任何 Stig、我需要配置  FLASH_CMD_CTRL_REG FLASH_CMD_ADDR_REG 并且需要将 CMD_EXE 位设为 1、以便发出 STIG、并且我可以看到 中接收到的数据(如果有)  OSPI_FLASH_CFG_FLASH_RD_DATA_UPPER_REG 和  OSPI_FLASH_CFG_FLASH_RD_DATA_LOWER_REG  分别取决于接收到的字节数。

    例如、为了读取 DEV ID:我用值 0x9FA00001 写入 FLASH_CMD_CTRL_REG、我可以看到值“0x00195A9D

    但是、中“RD_OPCODE"和“和“WR_OPCODE"字“字段的用法是什么  DEV_INSTR_RD_CONFIG_REG 和  DEV_INSTR_WR_CONFIG_REG 5V 的 LDO 选项。

    如果我在这些寄存器中写入任何 RD 操作码和 WR 操作码、则会如何执行该操作码。  

    我想 知道何时以及如何使用这 3 个寄存器。

    提前感谢

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引述 userid=“631337" url="“ url="~“~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1572870/am263p4-what-is-phy-attack-vector-in-ospi-driver-code-what-is-the-use-of-this-and-phy-tuning-data-how-to-retrieve-this-info-from-trm/6061939

    控制器模式配置

    将 OSPI 控制器配置为所选模式:

    • 8D-8D-8D(适用于 DDR 模式)或 8S-8S-8S(适用于 SDR 模式)
    • 程序读取数据传输类型、地址传输类型、指令类型、读取操作码、写入操作码、 和波特率
    [/报价]

    从 TRM I 读取后、XIP 仅在 xSPI(扩展的 SPI)接口和中受支持

    在闪存 ISSI IS25LX256 器件数据表中、他们提到命令阶段必须始终为 1S 、即命令通过 SDR 在 DQ0 上传输。

    我能否将协议配置为 1S-8D-8D 以加快执行速度?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引述 userid=“631337" url="“ url="~“~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1572870/am263p4-what-is-phy-attack-vector-in-ospi-driver-code-what-is-the-use-of-this-and-phy-tuning-data-how-to-retrieve-this-info-from-trm/6061939

    PHY 调优(针对最大频率运行)

    如果以最大频率运行 XIP、请执行 PHY 调优以优化:

    • RX_DLL 参数
    • TX_DLL 参数
    • 读取数据捕获延迟
    • PHY 调优过程:
      • 将已知数据模式写入闪存位置
      • 回读图形、同时迭代调整 Tx_DLL、Rx_DLL 和读取数据采集延迟值
      • 确定可靠运行的最佳参数
    [/报价]

    从这里可以得出这些参数值、

    我能否直接从 SDK sbl_OSPI_mcelf 示例代码中选择这些值。

    示例代码中有攻击向量缓冲区/数组、我可以直接在自定义 SBL 实现中使用它

      

    在代码中,我试图读取闪存偏移位置 (0x60080000 ),并将该数据与攻击向量数组元素进行比较,如果数据不匹配,那么我将通过 Stig (Flash_cmd_ctrl reg) 发出扇区擦除命令,如果擦除成功,那么我将尝试从偏移量 0x60080000 到 128 字节写入该攻击向量。

    但在我的示例中、扇区擦除命令不会擦除闪存。

    然后、在发出此芯片擦除命令 0xC7 (Flash_cmd_crl reg) 之前、我尝试了通过 Stig 发出芯片擦除命令 0xC7、然后在发出此芯片擦除之前、我读取状态 reg、所有位都为零、然后发出芯片擦除但没有使用。我的 CAN 数据存在于位置 0x60080000 和 0x60000000(其中存储了 SBL)

    能不能说明如何擦除芯片和扇区?

    我是否需要采取其他额外措施  ?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引述 userid=“631337" url="“ url="~“~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1572870/am263p4-what-is-phy-attack-vector-in-ospi-driver-code-what-is-the-use-of-this-and-phy-tuning-data-how-to-retrieve-this-info-from-trm/6061939

    初始通信设置

    由于闪存始终在 1S-1S-1S SDR 模式下初始化、因此请配置您的 OSPI 控制器以在 1S 模式下开始通信。 这涉及设置:

    • 读取数据传输类型
    • 地址传输类型
    • 指令类型
    • 读取操作码
    • 写入操作码
    • 波特率

     

    [/报价]

    为了将 OSPI 时钟配置为 133MHz、我选择了时钟源 Core_HSDIV0_Clkout_0、其值为 400MHz、选择了{MSS_RCM_OSPI0_CLK_SRC_SEL_reg=0x444}、时钟分频为 3{MSS_RCM_OSPI0_CLK_DIV_VAL 寄存器= 0x222}、因此/3 = 133Mhz。这馈送到 OSPI 参考时钟。

    在主器件波特率除数模式下、没有 1 分频选项。

      

    你能建议任何其他方法来生成 133Mhz 的时钟?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid=“637661" url="“ url="~“~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1572870/am263p4-what-is-phy-attack-vector-in-ospi-driver-code-what-is-the-use-of-this-and-phy-tuning-data-how-to-retrieve-this-info-from-trm/6062129 ]但在中使用了“RD_ophode"和“和“WR_ophode"字“字段  DEV_INSTR_RD_CONFIG_REG 和  DEV_INSTR_WR_CONFIG_REG 分别。

    请勿挑战  DEV_INSTR_RD_CONFIG_REG  和  DEV_INSTR_RD_CONFIG_REG  将在您对闪存执行读取/写入操作时使用。 例如、每当您向闪存抛出读取请求时、就会执行此操作  DEV_INSTR_RD_CONFIG_REG  将用于命令。  DEV_INSTR_RD_CONFIG_REG  取决于您所处的工作模式。 对于不同的模式和不同的供应商、这些字段将具有不同的值。

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

    我们提供支持 8D-8D-8D 八路 DDR 模式 ISSI IS25LX256 闪存器件的通用闪存。 我们建议使用此配置以实现最快的 XIP 执行、因为它支持在 8 条线路上同时传输所有命令、地址和数据。

    关于 TRM 参考: 您能否请让我回顾 TRM 中提到“仅 xSPI(扩展的 SPI)接口支持 XIP “的特定部分? 我想回顾准确的上下文和措辞、以提供准确的指导。 不同的 TRM 版本或部分可能包含有关不同 SPI 模式下 XIP 支持的不同详细信息。

    建议: 为配置您的 OSPI 控制器 8D-8D-8D 模式 使用适当的八进制 DDR 读取/写入操作码和波特率设置、以实现出色的 XIP 性能。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引述 userid=“637661" url="“ url="~“~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1572870/am263p4-what-is-phy-attack-vector-in-ospi-driver-code-what-is-the-use-of-this-and-phy-tuning-data-how-to-retrieve-this-info-from-trm/6062165

    从这里可以得出这些参数值、

    我能否直接从 SDK sbl_OSPI_mcelf 示例代码中选择这些值。

    示例代码中有攻击向量缓冲区/数组、我可以直接在自定义 SBL 实现中使用它

    [/报价]

    PHY 调优参数源:

    是的、您可以使用 SDK sbl_OSPI_mcelf 示例代码 作为 PHY 调优参数的起点。 该示例提供了以下项的基准值:

    • TX_DLL 和 RX_DLL 设置
    • 读取数据捕获延迟
    • 用于测试的攻击向量阵列

    不过、 可能仍需要进行微调 您可以根据您的特定电路板布局布线、布线长度和工作条件来选择合适的布线。


    [引述 userid=“637661" url="“ url="~“~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1572870/am263p4-what-is-phy-attack-vector-in-ospi-driver-code-what-is-the-use-of-this-and-phy-tuning-data-how-to-retrieve-this-info-from-trm/6062165

    能不能说明如何擦除芯片和扇区?

    我是否需要采取其他额外措施  ?

    [/报价]

    闪存擦除问题 — 根本原因:

    您的擦除命令可能会失败、因为您需要这样做 首先启用写入操作 。 以下是正确的顺序:

    正确的擦除序列:

    1. 写入启用 (0x06) -在执行任何擦除命令之前通过 Stig 发出
    2. 选中写入启用锁存 (WEL) -验证状态寄存器中的位 1 是否被置位
    3. 发出擦除命令 (扇区为 0x20、芯片为 0xC7)
    4. 轮询状态寄存器 -等待写入进行 (WIP) 位清零
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    带波特率分频器的 OSPI 时钟配置:

    您需要使用 最小波特分频器值 在主波特率除数寄存器中:

    • SDR 模式 :最小波特分频器= 4.
    • DDR 模式 :最小波特分频器= 8.

    时钟频率行为:

    非 PHY 模式:

    • 非 PHY SDR :有效时钟= 133MHz÷4 = 33.25MHz
    • 非 PHY DDR :有效时钟= 133MHz÷8 = 16.625MHz

    PHY 模式(关键点):

    • 启用 PHY :波特分频器是 由控制器旁路
    • 所有通信均以完整 133MHz 运行 任何 SDR/DDR 模式
    • 一旦启用 PHY、编程的波特分频器值就变得不再重要

    建议: 按计划配置 133MHz 基准时钟 (400MHz÷3)、设置适当的最小波特率分频器 (SDR 为 4、DDR 为 8)、然后 启用 PHY 模式 以实现全面的 133MHz 运行、从而实现卓越性能。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    thes  DEV_INSTR_RD_CONFIG_REG  和  DEV_INSTR_RD_CONFIG_REG  将在您对闪存执行读取/写入操作时使用。 例如、每当您向闪存抛出读取请求时、就会执行此操作  DEV_INSTR_RD_CONFIG_REG  将用于

    您能否详细说明这一点、比如如何发出读取请求。

    例如、假设:-

    1) 我想读取 Device ID、对于该命令、为 0x9F、然后在哪个操作码字段中、我必须放置此命令并发出此命令

    2) 我想从闪存位置读取 8 个字节的数据、例如 0x60080000

       命令为 0xCCh、这是“4 字节八路 I/O 快速读取“{可以是 1-8-8 或 8-8-8、虚拟周期= 16}

      那么我必须对此进行定义吗?  

    根据我的理解、我输入了此内容(如果我错了,请纠正我)

    在 FLASH_CMD_ADDR_ reg = 0x60080000、FLASH_CMD_CTRL reg = 0xCCFB0801

    然后、我期望数据会进来、坐在里面

    “OSPI_FLASH_CFG_FLASH_RD_DATA_LOWER_REG"和“和“OSPI_FLASH_CFG_FLASH_RD_DATA_UPPER_REG"。“。

    这里没有“  DEV_INSTR_RD_CONFIG_REG.RD_OPCODE_FLD “拍了拍照片、纠正我出了什么问题

    3) 要写入一些数据、我需要考虑哪些寄存器以及

    4) 芯片或扇区擦除我需要考虑哪些寄存器?

    提前感谢

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引述 userid=“631337" url="“ url="~“~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1572870/am263p4-what-is-phy-attack-vector-in-ospi-driver-code-what-is-the-use-of-this-and-phy-tuning-data-how-to-retrieve-this-info-from-trm/6062257 关于 TRM 参考: 您能否请让我回顾 TRM 中提到“仅 xSPI(扩展的 SPI)接口支持 XIP “的特定部分? 我想回顾准确的上下文和措辞、以提供准确的指导。 不同的 TRM 版本或部分可能包含有关不同 SPI 模式下 XIP 支持的不同详细信息。

    这里它说的是按照 JEDEC 标准读取 SFDP、这是什么?

    通过读取这些内容、我假设 XIP 仅在 xSPI 引导模式下工作、并且我们需要使用 xSPI 接口进行 XIP 实现。

    请多多指教。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引述 userid=“631337" url="“ url="~“~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1572870/am263p4-what-is-phy-attack-vector-in-ospi-driver-code-what-is-the-use-of-this-and-phy-tuning-data-how-to-retrieve-this-info-from-trm/6061939

    PHY 调优(针对最大频率运行)

    如果以最大频率运行 XIP、请执行 PHY 调优以优化:

    • RX_DLL 参数
    • TX_DLL 参数
    • 读取数据捕获延迟
    • PHY 调优过程:
      • 将已知数据模式写入闪存位置
      • 回读图形、同时迭代调整 Tx_DLL、Rx_DLL 和读取数据采集延迟值
      • 确定可靠运行的最佳参数
    [/报价]

    如何执行 PHY 调优?

    是否必须在 0x60080000 偏移量处刷写 PHY 攻击向量值(存在 SDK 文件 ospi_phy_lld.c 文件)。

    SDK 示例中的“gPhyTuneWindowParamsGTE133"和“和“gPhyTuneWindowParamsLT133"是“是强制性的、它们的用例是什么?

    这需要什么“OSPI_LLD_phyFindOTP1"和“和“OSPI_LLD_phyFindOTP2"</s>“

    提前感谢

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

    如何启用 DQS、您能否尽可能在 SDK 示例中指出特定的寄存器和 API?

    提前感谢

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    1) 我要读取 Device ID、对于该命令、为 0x9F、然后在哪个操作码字段中我必须放置此命令并发出此命令

    要在 8D-8D-8D 模式下读取器件 ID、必须将 0x9F 操作码更新为的位[31:24] 闪存命令控制寄存器(偏移 0x90) 并设置执行位。

    [引述 userid=“637661" url="“ url="~“~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1572870/am263p4-what-is-phy-attack-vector-in-ospi-driver-code-what-is-the-use-of-this-and-phy-tuning-data-how-to-retrieve-this-info-from-trm/6062406

    2) 我想从闪存位置读取 8 个字节的数据、例如 0x60080000

       命令为 0xCCh、这是“4 字节八路 I/O 快速读取“{可以是 1-8-8 或 8-8-8、虚拟周期= 16}

      那么我必须对此进行定义吗?  

    根据我的理解、我输入了此内容(如果我错了,请纠正我)

    在 FLASH_CMD_ADDR_ reg = 0x60080000、FLASH_CMD_CTRL reg = 0xCCFB0801

    然后、我期望数据会进来、坐在里面

    “OSPI_FLASH_CFG_FLASH_RD_DATA_LOWER_REG"和“和“OSPI_FLASH_CFG_FLASH_RD_DATA_UPPER_REG"。“。

    [/报价]

    对于读取、有三种不同的方法:

    1. DAC(直接访问控制器)读取 -内存映射访问
    2. INDAC(间接访问控制器)读取 -基于 FIFO 的访问
    3. STIG(软件触发指令生成器)读取 -基于命令的访问

    如果使用上述方法 (FLASH_CMD_ADDR_reg 和 FLASH_CMD_CTRL_reg)、则会使用 Stig 模式 。 优先使用此方法来读取闪存配置寄存器和器件信息。

    对于 DAC 读取(建议用于存储器访问):

    • 将读取操作码 0xCCh 编程到的位[7:0] 器件读取指令寄存器(偏移 0x04)
    • 在器件配置寄存器中配置协议设置 (1-8-8 或 8-8-8) 和虚拟周期
    • 对闪存地址的 CPU/DMA 读取请求会自动使用此操作码
    • Stig 方法有效、但 DAC 对于批量读取更有效
    3) 要编写一些数据、我需要考虑哪些寄存器以及

    对于写入操作:

    • 确保首先擦除目标扇区/页面
    • 将操作码写入的位[7:0] 器件写入指令寄存器(偏移 0x08)
    • 向闪存地址发出 CPU/DMA 写入请求
    • 配置写入完成轮询设置
    4) 要发出芯片或扇区擦除命令、我需要考虑哪些寄存器?

    对于擦除操作:

    • 应用 通过闪存命令控制寄存器启用 Stig 命令(偏移量 0x90)
    • 始终先发出“写入启用“(0x06)
    • 轮询闪存状态寄存器以确认完成

    要点: DAC 模式是存储器操作的首选模式、STIG 用于控制命令。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引述 userid=“631337" url="“ url="~“~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1572870/am263p4-what-is-phy-attack-vector-in-ospi-driver-code-what-is-the-use-of-this-and-phy-tuning-data-how-to-retrieve-this-info-from-trm/6063821

    对于 DAC 读取(建议用于存储器访问):

    • 将读取操作码 0xCCh 编程到的位[7:0] 器件读取指令寄存器(偏移 0x04)
    • 在器件配置寄存器中配置协议设置 (1-8-8 或 8-8-8) 和虚拟周期
    • 对闪存地址的 CPU/DMA 读取请求会自动使用此操作码
    • Stig 方法有效、但 DAC 对于批量读取更有效
    [/报价]

    现在、我对这一点有了一些清晰的了解、

    但是、如何使用“Dev_RD_STIG"发出“发出该读取/写入请求、比如、如果使用 Instr_Reg 方法、则使用“flash_CMD_CTRL"寄存“寄存器发出帧 cmd 和请求、一旦完成、就在同一寄存器中设置“EXE_CMD"位“位、以便在 STIG 方法中发出我的请求到闪存。

    同样、如果我使用“器件读取指令读取/写入寄存器“、是否有这样的事情、用所需的值填充这些寄存器、但为了发出请求、我是否需要设置任何位?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    如何启用 DQS、您能否在 SDK 示例中指出特定的寄存器和 API(如果可能)?

    您可以通过将 1'b1 直接写入读取数据采集寄存器 (0x10) 的位[8]来启用 DQS。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引述 userid=“637661" url="“ url="~“~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1572870/am263p4-what-is-phy-attack-vector-in-ospi-driver-code-what-is-the-use-of-this-and-phy-tuning-data-how-to-retrieve-this-info-from-trm/6063866

    现在、我对这一点有了一些清晰的了解、

    但是、如何使用“Dev_RD_STIG"发出“发出该读取/写入请求、比如、如果使用 Instr_Reg 方法、则使用“flash_CMD_CTRL"寄存“寄存器发出帧 cmd 和请求、一旦完成、就在同一寄存器中设置“EXE_CMD"位“位、以便在 STIG 方法中发出我的请求到闪存。

    同样、如果我使用“器件读取指令读取/写入寄存器“、是否有这样的事情、用所需的值填充这些寄存器、但为了发出请求、我是否需要设置任何位?

    [/报价]

    Dev_RD_Instr_Reg使用读取操作码进行配置

    配置协议设置(地址/数据宽度,虚拟周期)

    只需执行存储器读取/写入操作 -控制器自动处理一切

    没有要设置的执行位!

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引述 userid=“637661" url="“ url="~“~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1572870/am263p4-what-is-phy-attack-vector-in-ospi-driver-code-what-is-the-use-of-this-and-phy-tuning-data-how-to-retrieve-this-info-from-trm/6062744

    如何执行 PHY 调优?

    是否必须在 0x60080000 偏移量处刷写 PHY 攻击向量值(存在 SDK 文件 ospi_phy_lld.c 文件)。

    SDK 示例中的“gPhyTuneWindowParamsGTE133"和“和“gPhyTuneWindowParamsLT133"是“是强制性的、它们的用例是什么?

    这需要什么“OSPI_LLD_phyFindOTP1"和“和“OSPI_LLD_phyFindOTP2"</s>“

    [/报价]

    PHY 调优对于高频 OSPI 操作至关重要、可确保控制器和闪存之间的可靠数据通信。 它可补偿:

    • PCB 跟踪延迟 和阻抗变化
    • 温度和电压波动
    • 处理差异 同时在控制器和闪存器件中进行编程
    • 信号完整性问题 在高频下 (133MHz)


    不是必需的
    使用确切的 SDK 攻击向量值。  任何已知数据模式工作正常 为了方便起见,SDK 使用预定义的模式。  0x60080000 偏移只是一个示例 -您可以使用任何可擦写位置。 该模式应具有良好的效果 位转换 (0 和 1 的混合)以实现有效调优。

    以及此“OSPI_LLD_phyFindOTP1"和“和“OSPI_LLD_phyFindOTP2"
    的“的需求

    “OSPI_LLD_phyFindOTP1"和“和“OSPI_LLD_phyFindOTP2"是“是 SDK API、用于找到 Tx_DLL、Rx_DLL 和读取数据捕获延迟的理想值。

    您可以有一个简单的循环来搜索 Tx、Rx、读取数据延迟的正确值、只需运行搜索算法来查找闪存中的自定义攻击向量。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引述 userid=“637661" url="“ url="~“~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1572870/am263p4-what-is-phy-attack-vector-in-ospi-driver-code-what-is-the-use-of-this-and-phy-tuning-data-how-to-retrieve-this-info-from-trm/6062414

    这里它说的是按照 JEDEC 标准读取 SFDP、这是什么?

    通过读取这些内容、我假设 XIP 仅在 xSPI 引导模式下工作、并且我们需要使用 xSPI 接口进行 XIP 实现。

    请多多指教。

    [/报价]

    TRM 一节介绍了如何操作 ROM 引导加载程序 按照 JEDEC 标准读取 SFDP(串行闪存可发现参数)、以自动检测闪存功能。  SFDP 读数 是 ROM 用于确定闪存是否支持 xSPI 引导模式的方法。 这是 仅在初始启动阶段相关。  

    在 ROM 将控制权转移到 SBL 之后 、XIP 行为完全取决于 SBL 如何配置 OSPI 控制器。  XIP 不限于 xSPI 接口 -它可以在各种 SPI 模式下工作。 您的 SBL 可以在以下部分中为 XIP 配置 OSPI:

    • 标准 SPI 模式
    • 双/四通道 SPI 模式
    • 八路 SPI (xSPI) 模式
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引述 userid=“631337" url="“ url="~“~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1572870/am263p4-what-is-phy-attack-vector-in-ospi-driver-code-what-is-the-use-of-this-and-phy-tuning-data-how-to-retrieve-this-info-from-trm/6063821

    对于 DAC 读取(建议用于存储器访问):

    • 将读取操作码 0xCCh 编程到的位[7:0] 器件读取指令寄存器(偏移 0x04)
    • 在器件配置寄存器中配置协议设置 (1-8-8 或 8-8-8) 和虚拟周期
    • 对闪存地址的 CPU/DMA 读取请求会自动使用此操作码
    • Stig 方法有效、但 DAC 对于批量读取更有效
    [/报价]

    如上所述、假设我要 从地址(例如 0x60080000)读取一些 32 字节的数据

    假设 addr 字节的数量= 4、cmd 我要使用为 4 字节八路输出快速读取 (0x7Ch)、虚拟周期= 16 (8D-8D-8D) 或 8 (1s-1s-8D)

    对于 DAC 模式读取:-

    DEV_INSTR_RD_CONFIG_REG.RD_OPCODE_FLD = 0x7Ch;

    DEV_INSTR_RD_CONFIG_REG.DEMMUM_RD_CLK_CYCLES_FLD=16(对于 8D-8D-8D);

    DEV_INSTR_RD_CONFIG_REG.DATA_Xfer_Type = 0x3;

    DEV_INSTR_RD_CONFIG_REG.ADDR_Xfer_Type = 0x3;

    DEV_INSTR_RD_CONFIG_REG.INSTR_Type = 0x3;

    DEV_INSTR_RD_CONFIG_REG.DDR_EN=0x1;

    DEV_INSTR_RD_CONFIG_REG.MODE_BIT_EN=0x0;

    我已在 DEV_INSTR_RD_CONFIG_REG 中对此设置了框架、但在哪个寄存器中、我需要复制我要读取的地址和字节数、以及在哪个寄存器中写入读取的数据将出现并放置。

    由于“FLASH_CMD_CTRL"和“和“FLASH_CMD_ADDR"寄存“寄存器用于 STIG 方法、因此在 DAC 读取方法中、我需要使用哪个寄存器来表示地址和字节数、类似地、用于 DAC 写入

    提前感谢

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引述 userid=“631337" url="“ url="~“~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1572870/am263p4-what-is-phy-attack-vector-in-ospi-driver-code-what-is-the-use-of-this-and-phy-tuning-data-how-to-retrieve-this-info-from-trm/6063998

    TRM 一节介绍了如何操作 ROM 引导加载程序 按照 JEDEC 标准读取 SFDP(串行闪存可发现参数)、以自动检测闪存功能。  SFDP 读数 是 ROM 用于确定闪存是否支持 xSPI 引导模式的方法。 这是 仅在初始启动阶段相关。  

    在 ROM 将控制权转移到 SBL 之后 、XIP 行为完全取决于 SBL 如何配置 OSPI 控制器。  XIP 不限于 xSPI 接口 -它可以在各种 SPI 模式下工作。 您的 SBL 可以在以下部分中为 XIP 配置 OSPI:

    • 标准 SPI 模式
    • 双/四通道 SPI 模式
    • 八路 SPI (xSPI) 模式
    [/报价]

    然后、如果我选择 OSPI (8S) 引导模式、RBL 将在 33MHz{SYSCLK (200MHz) 除以 6}处配置 OSPI、它将发出命令 0x8Bh 并从 0x60000000 读取 SBL 映像。

    如果我选择 xSPI 引导模式、RBL 将 OSPI 外设配置为在 25MHz(可能是 200div x 8)下运行、然后发出 读取 SFDP 命令并根据 JEDEC 标准读取 SFDP(串行闪存可发现参数)以自动检测闪存功能。 之后、它将查找偏移量为 0x60000000 的 SBL 映像并加载 SBL 映像。

    然后、在 SBL 中、我们必须根据我们的要求重新初始化 OSPI 外设、例如将时钟频率增加到 133MHz、并将协议更改为 8D-8D-8D 模式 我的理解是否正确?

    在这两种模式下、RBL 都将初始化 PHY 模式和流水线模式?

    提前感谢

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引述 userid=“637661" url="“ url="~“~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1572870/am263p4-what-is-phy-attack-vector-in-ospi-driver-code-what-is-the-use-of-this-and-phy-tuning-data-how-to-retrieve-this-info-from-trm/6064025

    如上所述、假设我要 从地址(例如 0x60080000)读取一些 32 字节的数据

    假设 addr 字节的数量= 4、cmd 我要使用为 4 字节八路输出快速读取 (0x7Ch)、虚拟周期= 16 (8D-8D-8D) 或 8 (1s-1s-8D)

    对于 DAC 模式读取:-

    DEV_INSTR_RD_CONFIG_REG.RD_OPCODE_FLD = 0x7Ch;

    DEV_INSTR_RD_CONFIG_REG.DEMMUM_RD_CLK_CYCLES_FLD=16(对于 8D-8D-8D);

    DEV_INSTR_RD_CONFIG_REG.DATA_Xfer_Type = 0x3;

    DEV_INSTR_RD_CONFIG_REG.ADDR_Xfer_Type = 0x3;

    DEV_INSTR_RD_CONFIG_REG.INSTR_Type = 0x3;

    DEV_INSTR_RD_CONFIG_REG.DDR_EN=0x1;

    DEV_INSTR_RD_CONFIG_REG.MODE_BIT_EN=0x0;

    我已在 DEV_INSTR_RD_CONFIG_REG 中对此设置了框架、但在哪个寄存器中、我需要复制我要读取的地址和字节数、以及在哪个寄存器中写入读取的数据将出现并放置。

    由于“FLASH_CMD_CTRL"和“和“FLASH_CMD_ADDR"寄存“寄存器用于 STIG 方法、因此在 DAC 读取方法中、我需要使用哪个寄存器来表示地址和字节数、类似地、用于 DAC 写入

    提前感谢

    [/报价]

    指定 DAC 模式 不使用特定寄存器 用于地址和字节计数、如在 STIG 模式下。 而是:

    地址规格:

    // NO separate address register needed!
    // Address is specified directly in your memory access:
    uint32_t *flash_ptr = (uint32_t*)0x60080000;  // Address goes here


    数据位置和字节计数:
    // Read 32 bytes (8 x 32-bit words)
    uint32_t data[8];  // Data storage
    for(int i = 0; i < 8; i++) {
        data[i] = flash_ptr[i];  // Each read gets 4 bytes
    }
    
    // Or read as bytes
    uint8_t *byte_ptr = (uint8_t*)0x60080000;
    for(int i = 0; i < 32; i++) {
        data_buffer[i] = byte_ptr[i];  // Read byte by byte
    }


    配置:

    DEV_INSTR_RD_CONFIG_REG.RD_OPCODE_FLD = 0x7C;
    DEV_INSTR_RD_CONFIG_REG.DUMMY_RD_CLK_CYCLES_FLD = 16;
    // ... rest of your configuration


    读取数据:

    // Controller automatically uses your configuration
    volatile uint32_t *flash_address = (volatile uint32_t*)0x60080000;
    uint32_t read_data = *flash_address;  // Triggers automatic read with 0x7C command


    DAC 写入:

    // Configure DEV_INSTR_WR_CONFIG_REG similarly
    // Then write directly:
    *(volatile uint32_t*)0x60080000 = write_data;  // Triggers automatic write


    要点: DAC 模式为 存储器映射 -无需单独的地址/控制寄存器!

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [quote userid=“631337" url="“ url="~“~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1572870/am263p4-what-is-phy-attack-vector-in-ospi-driver-code-what-is-the-use-of-this-and-phy-tuning-data-how-to-retrieve-this-info-from-trm/6064163 DAC 模式 不使用特定寄存器 用于地址和字节计数、如在 STIG 模式下。 相反:

    好的、现在很清楚……谢谢你的回应…
    让我试试这是我的代码...如果我在这样做的时候遇到任何问题,让你知道

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引述 userid=“637661" url="“ url="~“~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1572870/am263p4-what-is-phy-attack-vector-in-ospi-driver-code-what-is-the-use-of-this-and-phy-tuning-data-how-to-retrieve-this-info-from-trm/6064049

    然后、如果我选择 OSPI (8S) 引导模式、RBL 将在 33MHz{SYSCLK (200MHz) 除以 6}处配置 OSPI、它将发出命令 0x8Bh 并从 0x60000000 读取 SBL 映像。

    如果我选择 xSPI 引导模式、RBL 将 OSPI 外设配置为在 25MHz(可能是 200div x 8)下运行、然后发出 读取 SFDP 命令并根据 JEDEC 标准读取 SFDP(串行闪存可发现参数)以自动检测闪存功能。 之后、它将查找偏移量为 0x60000000 的 SBL 映像并加载 SBL 映像。

    然后、在 SBL 中、我们必须根据我们的要求重新初始化 OSPI 外设、例如将时钟频率增加到 133MHz、并将协议更改为 8D-8D-8D 模式 我的理解是否正确?

    在这两种模式下、RBL 都将初始化 PHY 模式和流水线模式?

    提前感谢

    [/报价]

    是的、您的理解是正确的!

    SBL 重新配置:  在 SBL 中、您可以将 OSPI 控制器重新配置为更高的时钟频率 (133MHz)、并且您可以将协议更改为 8D-8D-8D 模式以实现卓越性能。

    RBL PHY 配置:  RBL 将会执行  未启用 PHY 模式 PHY 流水线 访问引导程序。 RBL 使用保守设置来确保在所有条件和闪存器件上实现可靠的引导。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引述 userid=“631337" url="“ url="~“~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1572870/am263p4-what-is-phy-attack-vector-in-ospi-driver-code-what-is-the-use-of-this-and-phy-tuning-data-how-to-retrieve-this-info-from-trm/6064290

    SBL 重新配置:  在 SBL 中、您可以将 OSPI 控制器重新配置为更高的时钟频率 (133MHz)、并且您可以将协议更改为 8D-8D-8D 模式以实现卓越性能。

    RBL PHY 配置:  RBL 将会执行  未启用 PHY 模式 PHY 流水线 访问引导程序。 RBL 使用保守设置来确保在所有条件和闪存器件上实现可靠的引导。

    [/报价]

    我正以这种方式思考(如果这种做法可行,请纠正我)

    我主要想证明我的自定义 SBL 在 XIP 中能正常工作、因此我想进行一些极小的设置、以便即使在低速下、应用程序代码也可以与 XIP 配合使用。

    由于 RBL 将使用一些设置来初始化 OSPI 外设。{像对于 xSPI 引导模式、clk 为 25MHz、协议 1S-1S-1S}

    我想继续使用相同的设置、如 1S-1S-1S 和 25MHz 时钟速度、启用 DAC、禁用 DMA、禁用 OSPI 中断、禁用 PHY 和 PHY 流水线(以便 PHY 调优器件到目前为止可以跳过)。 {在使用此方法后、稍后我将启用 PHY 并使功能在更高的频率下工作}

    我要做的是使用 uniflash GUI、我会分别在 0x60000000 位置刷写 SBL tiimage 文件、在 0x60081000 和 0xF0000000 位置刷写应用程序 mcelf 映像和应用程序 mcelf_XIP 映像。

    然后将引导开关保持在 xSPI 引导模式下、RBL 将执行并从闪存加载我的自定义 SBL、在我的 SBL 工程中只会像协议 1S-1S-1S 那样重新配置、并将时钟重新配置到某些 33MHz(SYSCLK 为 200MHz、然后是 6 分频)、并且未启用 DAC 模式、禁用 DMA、PHY、中断。

    我在 OSPI 和闪存器件中也会将地址字节设为 4、因为我的闪存大小为 32MB(大于 16MB)。

    然后通过检查通信是否正确

    1.我将发出写启用命令并读回状态寄存器、以检查 WEL 是否已设置

    2. 我将读取闪存设备 ID

    如果完成上述两个步骤、则通信设置可以正常进行。

    XIP 执行:-

    完成所有设置后、如何就地执行我的应用程序 (XIP)

    1.我是否需要设置位“ Enter_XIP_MODE_IMM_FLD “或“ Enter_XIP_MODE_FLD “  OSPI_FLASH_CFG_CONFIG_REG 这样我将开始执行位置为 0x60081000 的应用代码。

    2.如何调用应用程序代码或如何将控制权从 SBL 移交给应用程序。

    3.在“sbl_OSPI_Multiplec_mcelf"SDK 示“ 示例中、他们通过 mcelf 文件实现了解析、是真的需要、还是因为我已经知道应用程序映像地址 (0x60081000)、我可以跳过这部分、直接调用应用程序代码吗?

    4.在 0xF0000000 位置刷写应用程序映像的 mcelf_XIP 文件的作用是什么

    提前感谢

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

    尊敬的 Sanith:

    因为 RBL 将使用一些设置初始化 OSPI 外设。{像 xSPI 引导模式一样、clk 为 25MHz、协议 1S-1S-1S}

    RBL 不会将闪存配置为 1s-1s-1s 引导模式。 实际上、它以 1-1s-1s 引导模式读取 SFDP、并将闪存配置为 8d-8d-8d 引导模式。

    此外、当您说“SBL in XIP“时 、我希望这意味着您希望 SBL 以应用程序可以 XIP 的方式配置闪存和 OSPI。

    此致、

    Aswin

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    同样、当您说“SBL in XIP“时 、我希望这意味着您希望 SBL 以应用程序可以 XIP 的方式配置闪存和 OSPI。

    是的。

    我要证明的是、我的定制 SBL 项目将使用较小设置(即使是低速也可以,只是为了证明此概念)配置 OSPI 和闪存、以便应用可以设置为 XIP。

    我是否可以通过以下设置实现此目的:-

    1. 1S-1S-1S 模式(OSPI 和闪存端)

    2. 4 字节地址模式(OSPI 和闪存端)、因为 mu 闪存大小>16MB

    3.禁用 PHY

    4.低时钟速度使其为 16MHz { 400MHz(HSDIV0)/3 = 133MHz、然后是 133MHz / 8 = 16MHz }

    5. 启用 DAC

    完成后进行编程。

    现在、我需要调用应用程序(授予对应用程序的控制权,以便它可以 XIP)

    为了实现这一点、我需要在 OSPI_CONFIG_REG 中设置 EN_XIP 位、然后调用偏移量为 0x60081000 和的应用程序代码  

    还有一个疑问、CPU 如何从外部闪存一个接一个地获取指令(我的意思是硬件本身会考虑到这一点)

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

    尊敬的 Sanith:

    RBL 将在 xSPI 引导模式下将闪存配置为 8D-8D-8D 模式。  

    这是可以实现的。 我通过以下方式进行了验证、

    1.以 sbl_ospi_morple_elf 工程为例、

    2.注释掉 flash_fixup_ospi_boot

    3.在 sysconfig 中勾选 skipHwInit 复选框

    4.同时取消勾选 pinmux 的 ospi 复位引脚

    5.不要尝试刷写并引导 SBL 和应用程序。

    您可以检查 SDK 代码流在此场景中的工作原理。

    为了了解该流程、您可以在 SDK 的 SBL 中试用该流程。

    这将是

    闪存和 ospi 上的 8D-8D-8D 模式(由 RBL 完成)

    2. 4 字节 addr 模式(由 SBL 完成)

    PHY 启用/禁用(由 SBL 完成)

    4、如果启用 8MHz、则速度为 133MHz、如果禁用 PHY、则速度为 133/PHY

    一旦您能够使用 SDK 的 SBL 进行引导、就可以使用该参考来开发您自己的代码。

    此致、

    Aswin

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    还有一个疑问、CPU 如何从外部闪存依次获取指令

    是的、当 PC 中有闪存地址时、CPU 和总线足够智能、能够将获取结果路由到 ospi 控制器以从闪存中检索所需的数据。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我是否需要将“ Enter_XIP_MODE_IMM_FLD “或“ Enter_XIP_MODE_FLD “  OSPI_FLASH_CFG_CONFIG_REG 这样我将开始执行位于 0x60081000 位置的应用程序代码。

    不需要设置该位。 唯一的方法是启用 DAC 模式。 您还需要处理 MPU 配置。

    有关此方面的更多详细信息、请参阅 SDK 中的 XIP 示例。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    如何调用应用程序代码或如何将控制权从 SBL 移交给应用程序。

    在 SBL 中、您可以看到内核有加载和运行逻辑。 有关这方面的信息、请参阅 SBL OSPI 应用。 请参阅 TRM 的“ROM"一“一章、查看  R5 SBL 切换一节。

    ]应用程序映像的 mcelf_XIP 文件的作用是什么、该文件在位置 0xF0000000
    处刷写

    mcel_xip 是包含 XIP 内容的文件。 说到 XIP 内容、这意味着需要在闪存中包含的内容。 mcelf 文件只包含需要在 RAM 中的内容。 对于 XIP 应用、您需要刷写这两个文件。

    此致、

    Aswin

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    不需要设置此位。 只能启用 DAC 模式。

    那么这个位的使用是什么“ Enter_XIP_MODE_FLD “和“ Enter_XIP_MODE_IMM_FLD “、您能谈谈他们的使用案例、比如何时以及如何使用。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是的、这是必需的、如果您说应用程序在闪存中、仍然有启动代码 intvecs 等内容需要在 RAM 中。 由该 API 处理。

    我有一个关于这一点的疑问、因为我的自定义 SBL 已经包含启动代码、并且配置好了中断矢量并放置得当、所以我需要这样做。

    在本例中、我仅使用全部 4 个内核中的一个内核。

    因此、RBL 将在内核 0 上加载 SBL、然后我的定制 SBL 将具有启动代码、它还会初始化所有和 initvecs、以及在锁步中初始化其他内核。 然后、它将 OSPI 重新配置为 1S-1S-1S、运行一些时钟频率并启用 DAC 模式、那么我需要跳转到偏移为 0x60081000 的应用主函数、如何通过 mcelf 和 mcelf XIP 文件解析来实现这一点。

    mcel_XIP 是包含 XIP 内容的文件。 说到 XIP 内容、这意味着需要在闪存中包含的内容。 mcelf 文件只包含需要在 RAM 中的内容。 因此、对于 XIP 应用程序、您需要刷写这两个文件。

    如果 mcelf_XIP 文件包含 XIP 内容、那么这应该位于闪存中、但我们为什么要在闪存区域之外的偏移量 0xF0000000 处刷写该文件。

    SDK sbl_OPSI_mucore_elf 示例是否解析了 mcelf 和 mcelf_sip 文件?

    提前感谢...

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引述 userid=“642990" url="“ url="~“~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1572870/am263p4-what-is-phy-attack-vector-in-ospi-driver-code-what-is-the-use-of-this-and-phy-tuning-data-how-to-retrieve-this-info-from-trm/6066415

    RBL 将在 xSPI 引导模式下将闪存配置为 8D-8D-8D 模式。  

    这是可以实现的。 我通过以下方式进行了验证、

    1.以 sbl_ospi_morple_elf 工程为例、

    2.注释掉 flash_fixup_ospi_boot

    3.在 sysconfig 中勾选 skipHwInit 复选框

    4.同时取消勾选 pinmux 的 ospi 复位引脚

    5.不要尝试刷写并引导 SBL 和应用程序。

    您可以检查 SDK 代码流在此场景中的工作原理。

    为了了解该流程、您可以在 SDK 的 SBL 中试用该流程。

    这将是

    闪存和 ospi 上的 8D-8D-8D 模式(由 RBL 完成)

    2. 4 字节 addr 模式(由 SBL 完成)

    PHY 启用/禁用(由 SBL 完成)

    4、如果启用 8MHz、则速度为 133MHz、如果禁用 PHY、则速度为 133/PHY

    一旦您能够使用 SDK 的 SBL 进行引导、就可以使用该参考来开发您自己的代码。

    [/报价]

    为什么在上电期间需要注释掉“flash_fixup_ospi_boot",“,这、这是我们需要如何复位闪存器件、但为什么需要注释掉。

    我们为什么需要取消勾选复位引脚? 为什么不需要复位?

    我曾尝试 在开发引导模式下将 SDK 的 sbl_ospi_morple_elf 工程.out 文件加载到控制卡中。

    我执行了此处提到的步骤 https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1374233/faq-am263p4-how-to-debug-xip-application-in-am263px?utm_source=chatgpt.com

    我如前所述创建了新的目标配置、并在 main 函数之后保留了一个 forever_loop、当我加载.out 文件时、它进入运行模式、并暂停执行、它位于某个 Fiq 处理程序中

    您能帮助我逐步加载 SDK 的 SBL 示例和调试、以便完成“解析 mcelf 文件“代码流程吗

    提前感谢...

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引述 userid=“637661" url="“ url="~“~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1572870/am263p4-what-is-phy-attack-vector-in-ospi-driver-code-what-is-the-use-of-this-and-phy-tuning-data-how-to-retrieve-this-info-from-trm/6070610

    为什么在上电期间需要注释掉“flash_fixup_ospi_boot",“,这、这是我们需要如何复位闪存器件、但为什么需要注释掉。

    我们为什么需要取消勾选复位引脚? 为什么不需要复位?

    [/报价]

    最初讨论的是如何在 RBL 已经执行的情况下避免重新配置 SBL 中的闪存。 这就是我提到这些步骤的原因

    闪存复位是为了将闪存置于 1s-1s-1s 引导模式、因为 RBL 不会进行闪存复位。 如果在 xSPI 引导模式下引导、它会将其保留为八路 SPI DTR 模式。  

    SBL 示例是 SDK 对闪存进行重新配置。 这也是可以这样做的。

    [引述 userid=“637661" url="“ url="~“~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1572870/am263p4-what-is-phy-attack-vector-in-ospi-driver-code-what-is-the-use-of-this-and-phy-tuning-data-how-to-retrieve-this-info-from-trm/6070610

    我执行了此处提到的步骤 https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1374233/faq-am263p4-how-to-debug-xip-application-in-am263px?utm_source=chatgpt.com

    我如前所述创建了新的目标配置、并在 main 函数之后保留了一个 forever_loop、当我加载.out 文件时、它进入运行模式、并暂停执行、它位于某个 Fiq 处理程序中

    [/报价]

    此步骤适用于 XIP。 要调试 SBL、请按照此常见问题解答中的步骤操作

     【常见问题解答】 MCU-PLUS-SDK AM243X:如何调试 SBL_QSPI(适用于 am263 和 am273)或 SBL_ospi(适用于 am243)或通过 OSPI/QSPI 引导引导的应用? 

    此致、

    Aswin

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

    对延迟表示歉意、在 最后一个查询中错过了此问题

    我有一个关于这方面的问题、因为我的自定义 SBL 已经包含启动代码、并且正确配置和放置了中断向量、所以我需要执行相同的操作。

    这些代码与 SBL 相关、在应用程序端需要执行 MPU init、Cache init 等操作的相应启动代码。 应用程序还需要初始化启动代码。 SBL 启动应用程序后、PC 变为 0。

    如果 mcelf_XIP 文件包含 XIP 内容、则此内容应该位于闪存中、但我们为什么要以闪存区域之外的偏移量 0xF0000000 刷写该文件。

    该工具在内部使用偏移量来了解此偏移量是 XIP 文件。

    并且 SDK sbl_OPSI_multucore_elf 示例是否解析了 mcelf 和 mcelf_sip 文件?

    它仅解析 mcelf 文件。

    此致、

    Aswin

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    那么这个位“ Enter_XIP_MODE_FLD “和“ Enter_XIP_MODE_IMM_FLD “、您能谈谈他们的使用案例、例如何时以及如何使用。

    您能否详细说明或举个例子来说明设置此位时的行为、以及 OSPI 或 CPU 在设置此位时的行为

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    对延迟的道歉、在 最后一次查询中漏掉了这个问题

    不用担心...

    这些内容与 SBL 相关、在应用程序端需要执行相应的启动代码来执行 MPU init、Cache init 等。 应用程序还需要初始化启动代码。 SBL 启动应用程序后、PC 变为 0。

    在这种情况下、我需要与应用程序团队核实、我会让您知道。

    我最初认为应用程序会使用我在 SBL 中初始化的中断矢量表。 设置完所有内容后、我假设我可以直接使用偏移地址跳转到应用程序代码。 但在您解释之后、似乎将控制权移交给应用程序并不像我假设的那么简单。

    它只分析 mcelf 文件

    然后、应用将如何了解 0xF0000000 偏移的 XIP 内容。

    是的、当 PC 中有闪存地址时、CPU 和总线足够智能、可以将获取结果路由到 ospi 控制器、以便从闪存中检索所需的数据。

    如果 XIP 内容(即需要放置在闪存中并直接从闪存执行的代码—这是我的理解,如果我有误,请更正我)位于地址0xF0000000、且此地址已加载到 PC 中、CPU 和总线如何就地执行?

    如果我的理解不正确、请纠正我。

    提前感谢

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

    尊敬的 Sanith:

    对于闪存器件之间的 XIP 操作没有一致的标准。 每个制造商实现 XIP 的方式不同、因此这些控制位对于处理各种闪存器件行为至关重要。  Enter_XIP_MODE_FLD Enter_XIP_MODE_IMM_FLD 可通过一些位来解决闪存连接中的根本挑战。

    不依赖于不同供应商使用的复杂策略来实现 XIP、 我们直接使用 DAC(直接访问控制器)来发出这些 XIP 请求

    基于 DAC 的 XIP 的优势:

    • 无论闪存供应商如何、均可轻松配置
    • 由所有闪存供应商支持 — 无需特定于供应商的实现
    • 消除处理不同 XIP 协议的复杂性
    • 适用于所有闪存器件的统一接口

    谢谢、

    Mayank