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.

[参考译文] TMDSCNCD263P:ECP:AM263P CC 在 OSPI 中启用 8D-8D-8D 协议时不一致

Guru**** 2663045 points

Other Parts Discussed in Thread: SYSCONFIG

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1579398/tmdscncd263p-ecp-am263p-cc-inconsistency-in-enabling-8d-8d-8d-protocol-in-ospi

器件型号: TMDSCNCD263P
主题: SysConfig 中讨论的其他器件

尊敬的团队:

您好。

我目前正在 8D-8D-8D 模式下使用 OSPI 来开发 XIP 功能。 为了启用所需的配置、我按照 SDK 中提到的设置进行了操作 SBL_OSPI_Multicory_elf 示例工程、并在自定义裸机工程中复制了相同的步骤。

在调试裸机代码时、我使用“Memory Browser“窗口手动将一些硬编码值写入寄存器。 发出读取器件 ID 命令后、我成功读取了两个命令 器件 ID 制造商 ID 。 使用指向闪存地址范围的指针、我还能够读取闪存中存储的正确数据。

然而、当我在没有分步调试的情况下运行相同的代码(即一次性调试)时、它无法可靠地工作。 有时、它直接进入while(1)循环、在其他情况下、读取状态寄存器时会卡住、状态寄存器值会保持不变 0xFF 、并且代码从不退出该状态。

您能否帮助我确定导致此不一致行为的原因?

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

    你好、 Mayank Shadwani 

    您能尝试重新安装 CCS 12.8.1 吗? 这应确保在安装过程中正确配置所有必要的软件库。

    我从 TI 站点下载了 CCS 12.8.1 版本的可执行文件、并于昨天下午进行安装。

    在安装时、我检查了自定义安装并选择了 Sitara MCU AMxx 全系列、C2000 系列和 TMS570 系列。

    这会产生任何问题吗?

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

    尊敬的 Sanith:

    在自定义安装期间选择多个器件系列 (Sitara MCU AMxx、C2000 和 TMS570) 不应导致任何问题。

    尽管如此、由于您的“可用软件站点“缺少几个预期选项、我建议重新安装 CCS 12.8.1。 这将确保正确初始化所有必要的软件库和组件。

    此致、
    Mayank Shadwani

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

    HiankShadwani Rijohn Pius 

    我重新安装了 CCS 12.8.1、并将 Sitara MCU 支持软件升级到版本 1.5.6(最新版本)。

    但是、在运行我的代码后、问题仍然存在、数据仍以随机顺序显示、如前面的屏幕截图所示。

    什么原因可能导致此问题? 您能提出任何其他可能的解决方案吗?

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

    尊敬的 Sanith:

    感谢您重新安装 CCS 12.8.1 并更新至 Sitara MCU 支持软件 1.5.6 版。

    为了帮助我们进一步调查数据重排问题、您能否澄清您提到的具体问题:

    1. 不正确的 GEL 脚本导致数据显示问题、或者
    2. 读取的器件 ID 不正确会导致随机化数据?

    此致、
    Mayank Shadwani

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

    嗨、 Mayank Shadwani Rijohn Pius Aswin Sankar 

    GEL 脚本不正确导致数据显示问题、或

    GEL 文件及其控制台输出现在与您之前共享的控制台输出相匹配。

    Cortex_R5_0: GEL Output: Gel files loading Complete
    Cortex_R5_0: GEL Output: ***OnTargetConnect() Launched***
    
    Cortex_R5_0: GEL Output: AM263Px Initialization Scripts Launched. 
    Please Wait...
    
    
    Cortex_R5_0: GEL Output: AM263Px_Cryst_Clock_Loss_Status() Launched
    Cortex_R5_0: GEL Output: Crystal Clock present 
    Cortex_R5_0: GEL Output: AM263Px_SOP_Mode() Launched
    Cortex_R5_0: GEL Output: SOP MODE = 0x0000000B    
    Cortex_R5_0: GEL Output: Dev Boot Mode 
    Cortex_R5_0: GEL Output: AM263Px_Read_Device_Type() Launched
    Cortex_R5_0: GEL Output: EFuse Device Type Value = 0x000000AA    
    Cortex_R5_0: GEL Output: AM263Px_dual_or_lockstep_mode() Launched
    Cortex_R5_0: GEL Output: r5fss0 = 0x00000101    
    Cortex_R5_0: GEL Output: r5fss1 = 0x00000100    
    Cortex_R5_0: GEL Output: R5FSS0 is in Lockstep mode 
    Cortex_R5_0: GEL Output: R5FSS1 is in Lockstep mode 
    Cortex_R5_0: GEL Output: MSS_CTRL Control Registers Unlocked
    Cortex_R5_0: GEL Output: MSS_TOP_RCM Control Registers Unlocked
    Cortex_R5_0: GEL Output: MSS_RCM Control Registers Unlocked
    Cortex_R5_0: GEL Output: MSS_IOMUX Control Registers Unlocked
    Cortex_R5_0: GEL Output: TOP_CTRL Control Registers Unlocked
    Cortex_R5_0: GEL Output: *** R5FSS0 DualCore Reset ***
    Cortex_R5_0: GEL Output: *** R5FSS1 DualCore Reset ***
    Cortex_R5_0: GEL Output: R5F ROM Eclipse
    Cortex_R5_0: GEL Output: R5FSS0_0 Released
    Cortex_R5_0: GEL Output: R5FSS0_1 Released
    Cortex_R5_0: GEL Output: R5FSS1_0 Released
    Cortex_R5_0: GEL Output: R5FSS1_1 Released
    Cortex_R5_0: GEL Output: L2 Mem Init Complete
    Cortex_R5_0: GEL Output: MailBox Mem Init Complete
    Cortex_R5_0: GEL Output: r5fss0 = 0x00000001    
    Cortex_R5_0: GEL Output: r5fss1 = 0x00000000    
    Cortex_R5_0: GEL Output: R5FSS0 is in Dual-Core mode 
    Cortex_R5_0: GEL Output: R5FSS1 is in Dual-Core mode 
    Cortex_R5_0: GEL Output: CORE PLL Configuration Complete
    Cortex_R5_0: GEL Output: PER PLL Configuration Complete
    Cortex_R5_0: GEL Output: SYS_CLK DIVBY2
    Cortex_R5_0: GEL Output: DPLL_CORE_HSDIV0_CLKOUT0 selected as CLK source for R5FSS & SYS CLKs
    Cortex_R5_0: GEL Output: CLK Programmed R5F=400MHz and SYS_CLK=200MHz 
    Cortex_R5_0: GEL Output: Configure all Peripheral clocks()
    Cortex_R5_0: GEL Output: 
    
     *** Enabling Peripheral Clocks *** 
    Cortex_R5_0: GEL Output: Enabling RTI[0:3] Clocks 
    Cortex_R5_0: GEL Output: RTI0 Clock Enabled (200MHz)
    Cortex_R5_0: GEL Output: RTI1 Clock Enabled (200MHz)
    Cortex_R5_0: GEL Output: RTI2 Clock Enabled (200MHz)
    Cortex_R5_0: GEL Output: RTI3 Clock Enabled (200MHz)
    Cortex_R5_0: GEL Output: Enabling RTI_WDT[0:3] Clocks 
    Cortex_R5_0: GEL Output: WDT0 Clock Enabled (200MHz)
    Cortex_R5_0: GEL Output: WDT1 Clock Enabled (200MHz)
    Cortex_R5_0: GEL Output: WDT2 Clock Enabled (200MHz)
    Cortex_R5_0: GEL Output: WDT3 Clock Enabled (200MHz)
    Cortex_R5_0: GEL Output: Enabling UART[0:5]/LIN[0:5] Clocks 
    Cortex_R5_0: GEL Output: LIN0_UART0 Clock Enabled (160MHz)
    Cortex_R5_0: GEL Output: LIN1_UART1 Clock Enabled (160MHz)
    Cortex_R5_0: GEL Output: LIN2_UART2 Clock Enabled (160MHz)
    Cortex_R5_0: GEL Output: LIN3_UART3 Clock Enabled (160MHz)
    Cortex_R5_0: GEL Output: LIN4_UART4 Clock Enabled (160MHz)
    Cortex_R5_0: GEL Output: LIN5_UART5 Clock Enabled (160MHz)
    Cortex_R5_0: GEL Output: Enabling OSPI Clocks 
    Cortex_R5_0: GEL Output: OSPI0 Clock Enabled (133MHz)
    Cortex_R5_0: GEL Output: Enabling I2C Clocks 
    Cortex_R5_0: GEL Output: I2C Clock Enabled (48MHz)
    Cortex_R5_0: GEL Output: Enabling TRACE Clocks 
    Cortex_R5_0: GEL Output: Trace Clock Enabled (250MHz)
    Cortex_R5_0: GEL Output: Enabling MCAN[0:3] Clocks 
    Cortex_R5_0: GEL Output: MCAN0 Clock Enabled (80MHz)
    Cortex_R5_0: GEL Output: MCAN1 Clock Enabled (80MHz)
    Cortex_R5_0: GEL Output: MCAN2 Clock Enabled (80MHz)
    Cortex_R5_0: GEL Output: MCAN3 Clock Enabled (80MHz)
    Cortex_R5_0: GEL Output: Enabling MMCSD Clocks 
    Cortex_R5_0: GEL Output: MMCSD Clock Enabled (48MHz)
    Cortex_R5_0: GEL Output: Enabling MCSPI[0:4] Clocks 
    Cortex_R5_0: GEL Output: MCSPI0 Clock Enabled (48MHz)
    Cortex_R5_0: GEL Output: MCSPI1 Clock Enabled (48MHz)
    Cortex_R5_0: GEL Output: MCSPI2 Clock Enabled (48MHz)
    Cortex_R5_0: GEL Output: MCSPI3 Clock Enabled (48MHz)
    Cortex_R5_0: GEL Output: MCSPI4 Clock Enabled (48MHz)
    Cortex_R5_0: GEL Output: Enabling CONTROLSS Clocks 
    Cortex_R5_0: GEL Output: CONTROLSS Clock Enabled (400MHz)
    Cortex_R5_0: GEL Output: Enabling CPTS Clocks 
    Cortex_R5_0: GEL Output: CPTS Clock Enabled (250MHz)
    Cortex_R5_0: GEL Output: Enabling RGMI[5,50,250] Clocks 
    Cortex_R5_0: GEL Output: RGMII5 Clock Enabled (5MHz)
    Cortex_R5_0: GEL Output: RGMII50 Clock Enabled (50MHz)
    Cortex_R5_0: GEL Output: RGMII250 Clock Enabled (250MHz)
    Cortex_R5_0: GEL Output: Enabling XTAL_TEMPSENSE_32K Clocks 
    Cortex_R5_0: GEL Output: TEMPSENSE Clock Enabled (32KHz)
    Cortex_R5_0: GEL Output: Enabling XTAL_MMC_32K Clocks 
    Cortex_R5_0: GEL Output: XTAL_MMC Clock Enabled (32KHz)
    Cortex_R5_0: GEL Output: 
    
     ***All IP Clocks are Enabled*** 
    
    Cortex_R5_0: AM263Px
    Cortex_R5_0: Board Selected : CC
    Cortex_R5_0: Part Selected : Standard
    Cortex_R5_0: GEL Output: CPU reset (soft reset) has been issued through GEL on program load.
    

    读取的器件 ID 不正确、导致数据混乱?

    读取的器件 ID 仍然不正确或混乱的数据。 请参阅下图

    所有寄存器配置与示例工程中的配置几乎相同。

    注意: OSPI 外设是否包含内置 DMA 引擎? 在示例代码中、我注意到正在配置 DMA、但在我的自定义实现中、我禁用了 DMA 及其相关逻辑。

    根据 TRM、OSPI 外设不支持 DMA;但是、SDK 仍执行一些与 DMA 相关的配置。 我不知道为什么会出现这种情况。 请参阅下图

    我还观察到 SDK 使用与 DMA 相关的中断。 您能解释一下在这种情况下使用该中断的目的吗?

    提前感谢…

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

     梅安克·沙德瓦尼 ·里约恩·皮乌斯, 你可以看看这个

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

    尊敬的 Sanith:  

    SDK 代码正常工作、这可能是寄存器配置问题。 您能否在自定义代码的闪存初始化例程中读取 ID? 由于您的代码基于 SDK 的 OSPI — 闪存驱动程序,因此您能否在读取 ID 之前转储 ospi 寄存器空间。 然后执行 SDK 代码、直到这时再次获取寄存器转储。 我们可以检查此场景中与两个代码不同的配置。

    此致、

    Aswin

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

    尊敬的 Sanith:  

    也可以在 1s-1s-1s 模式下检查该值。 对不起、我要参加本次在线研讨会。 如果我遗漏了一些要点,就表示歉意。

    此致、

    Aswin

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您也可以在 1s-1s-1s 模式下进行检查。 对不起、我要参加本次在线研讨会。 如果我遗漏了一些要点、则表示歉意。

    你好、 Aswin Sankar 

    没有任何问题, 很高兴有你,请跳在任何必要的时候.

    我在 1s-1s-1s 模式下尝试过、认为工作正常、此 API “Bootloader_parseAndLoadMultiCoreELF"会“会返回预期的值零 (SystemP_Success)。

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

    你好 Aswin Sankar Mayank Shadwani Rijohn Pius 

    我观察到配置结构值初始化存在差异。 这实际上有什么作用?它如何影响 OSPI 闪存操作? 例如、 在' OSPI_FLASH_IO_am263px-cc “ SDK 示例、则是 Flash_Dev 配置 结构使用进行初始化。 fourByteAddrEnSeq = 0xA1 和。 xspiWipRdCmd = 0x00 、  

    而在' sbl_ospi_multiple_elf ' SDK 示例、结构成员设置为。 fourByteAddrEnSeq = 0x0 和。 xspiWipRdCmd = 0x05 。 这一差异如何影响 OSPI 闪存的工作?“

    提前感谢...

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

    尊敬的 Sanith:  

    xSPI 读取状态寄存器命令应为 0x05。 读取状态寄存器命令也是 0x05。 这不会导致工作中出现问题或差异。 我来检查一下四字节地址使能序列并返回。  

    此致、

    Aswin

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

    你好 Aswin Sankar Mayank Shadwani 

    xSPI 读状态寄存器命令应为 0x05。 读取状态寄存器命令也是 0x05。

    为什么“sbl_OSPI_multiple"示“示例工程需要此项?为什么“OSPI_flash_io"示“示例工程中不需要此项?

    1) 在 sbl_OSPI_Multicore 示例工程中、自xspiWipRdCmd  =  0x05 、如果条件是  OSPI_FLASH_CFG_FLASH_CMD_CTRL_REG 值为 0x059B0800。

    为什么读取状态寄存器需要地址。(如果我有误,请更正我,只需读取易失性或非易失性寄存器即可读取地址)

    2) 在 OSPI_FLASH_IO 示例项目中、自 xspiWipRdCmd  =  0x00 、如果条件失败、则相同;如果条件为 true 并执行、则相同。

    OSPI_FLASH_CFG_FLASH_CMD_CTRL_REG 值为 0x05900800、此处没有设置“EN_CMD_ADDR_FLD"位“位和“NUM_ADDR_BYTES"字“字段。

    为什么要在两个不同的工程中读取相同的状态寄存器、这种行为?

      

    这样做的依据是什么?  

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

    Mayank Shadwani Aswin Sankar Hi 团队,你能看看这个

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

    尊敬的 Sanith:  

    对延迟深表歉意。 我正在研究这个

    此致、
    Aswin

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

    你好 Aswin Sankar Mayank Shadwani 任何人都可以看到这一点

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

    尊敬的 Sanith:

    这似乎是 SDK 示例中的一个错误。 对于此闪存、如果您查看闪存数据表中的 05h 命令、会显示如下所示。

    此命令不需要地址。 您的陈述正确。 正确的配置是发送命令、然后是虚拟周期。  05h 的命令集摘要中也提到了这一点。  

    发送地址时它似乎能正常工作的原因是、 设置了 ENB_COMD_ADDR_FLD 时。 控制器将以格式发送事务

    CMD ->虚拟周期->地址 而不是 CMD ->虚拟周期

    但是、当闪存看到命令本身时、它将在虚拟周期后开始吸出读回值。 因此、即使在正确数量的虚拟周期后未完成采样点、ospi 也始终可以获得正确采样的数据。

    此致、

    Aswin

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引述 userid=“642990" url="“ url="~“~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1579398/tmdscncd263p-ecp-am263p-cc-inconsistency-in-enabling-8d-8d-8d-protocol-in-ospi/6140764

    这似乎是 SDK 示例中的一个错误。 对于此闪存、如果您查看闪存数据表中的 05h 命令、会显示如下所示。

    [/报价]

    如果这是一个错误,那么它是可以的。

    我在自定义工程中按照“OSPI_FLASH_IO 示例工程“进行配置设置。

    感谢您的宝贵时间

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

    我已使用给定的链接提交了一个错误、用于内部跟踪

    jira.itg.ti.com/.../MCUSDK-15080