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:OSPI 闪存示例问题

Guru**** 2514925 points
Other Parts Discussed in Thread: TMDSCNCD263P, TCA6424, TCA6424A

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1549718/tmdscncd263p-ospi-flash-example-questions

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

工具/软件:

您好:

我尝试以您的示例了解 OSPI 闪存的使用情况。

我明白 E2 和 TMDSCNCD263P 的 A 之间存在硬件差异、这意味着 OSPI RESET 引脚 由函数 board_flash_reset () 中的不同外设切换。 但是、 对于同一 OSPI 闪存 IC、引脚逻辑电平之间仍然存在细微差异。

Rev E2(在 TCA6424_Flash_reset () 中)

status = TCA6424_setOutput(&gTCA6424_Config,IO_MUX_OSPI_RST_SEL_PORT_LINE,TCA6424_OUT_STATE_LOW);
status = TCA6424_setOutput(&gTCA6424_Config,IO_MUX_OSPI_RST_SEL_PORT_LINE,TCA6424_OUT_STATE_HIGH);

修订版 A:

OSPI_setResetPinStatus(oHandle, PIN_STATE_HIGH);
OSPI_setResetPinStatus(oHandle, PIN_STATE_LOW);

对于 E2 和 A、为什么逻辑电平序列相反?

所有 TI 示例都调用 flashFixUpOspiBoot()。 如果我的应用程序只是从 OSPI 闪存读取,我需要调用 flashFixUpOspiBoot() 吗 ? 换句话说,我什么时候需要 调用 flashFixUpOspiBoot()?

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

    尊敬的 Kier:

    [引述 userid=“47999" url="“ url="~“~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1549718/tmdscncd263p-ospi-flash-example-questions

    我明白 E2 和 TMDSCNCD263P 的 A 之间存在硬件差异、这意味着 OSPI RESET 引脚 由函数 board_flash_reset () 中的不同外设切换。 但是、 对于同一 OSPI 闪存 IC、引脚逻辑电平之间仍然存在细微差异。

    [/报价]

    在第一种情况下、通过 IO 扩展器进行复位。 在本例中、我们首先将其拉低、然后拉高。 这是根据闪存数据表预期的复位序列。

    在第二种情况下、对于版本、复位由 OSPI 控制器发出。 函数 OSPI_setResetPinStatus () 设置控制器的复位寄存器。 设置寄存器会发出复位。 因此、在这种情况下、高电平并不是指将线路拉高、而是设置 OSPI 存储器控制器的复位问题寄存器。  

      

    [引述 userid=“47999" url="“ url="~“~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1549718/tmdscncd263p-ospi-flash-example-questions

    所有 TI 示例都调用 flashFixUpOspiBoot()。 如果我的应用程序只是从 OSPI 闪存读取,我需要调用 flashFixUpOspiBoot() 吗 ? 换句话说,我什么时候需要 调用 flashFixUpOspiBoot()?

    [/报价]

    我在 SDK 中看到了这一点 FlashFixUpOspiBoot() 仅在的 SBL 示例中使用 示例/驱动程序/引导 文件夹。 此 API 会执行闪存复位。 只要闪存初始化完成、就需要进行闪存复位。 在初始化之前、这样做是为了确保闪存处于已知状态。 因此、在打开闪存驱动程序(或初始化闪存)之前、您需要调用闪存复位。

    此致、

    Aswin

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

    尊敬的 Aswin:

    很有道理、谢谢。

    还有一个问题。 在修订版 A 上、仍然有一个硬接线复位连接 OSPI0_RESET_OUT0:

    我是否认为切换 GPIO 引脚 (J1) 信号 OSPI0_RESET_OUT0 相当于使用 OSPI_setResetPinStatus ()? 它们只是实现相同目标的两种不同方法、正确吗?

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

    尊敬的 Kier:

    是的、它们是对 OSPI 闪存进行复位的不同方法。

    1. Rev E2 使用推挽式 IO 扩展器 (TCA6424A)。 因为采用外部 上拉由 P0.0 (GPIO_OSPI_RSTn) 上的 R120 完成、复位线路已处于高电平状态。
      因此、根据 IO_EXP 复位逻辑、“LOW 后跟 HIGH “会将复位传播到闪存。  
    2. 稍后我们意识到直接来自控制器的 OSPI_RESET0_OUT 被保持未使用、因此对 OSPI 复位架构进行了修改、以使用  OSPI_RESET0_OUT 作为与门的输入(以便我们可以将 IO.EXP 的 P0.0 用于任何其他通用应用)
      1. 如果使用  来自控制器的 OSPI_RESET0_OUT、则真值表如下:
        1. RESET_CFG_FLD RESET_CFG_FLD OSPI 复位线路逻辑电平
          1. 0 高电平
          1. 1. 驱动至低电平
          0 1. 驱动至低电平
          0 0 驱动至低电平
      • 我认为切换 GPIO 引脚 (J1) 信号 OSPI0_RESET_OUT0 等效于使用 OSPI_setResetPinStatus ()

      是的、从技术上讲、它是相同的。  到闪存的重置行应具有 high->low->high 转换。 由于 OSPI IP 有一个专用的复位引脚、因此 REV A 使用该功能。

    注释 :设计定制电路板时使用 WARM_RSTn 而不是 PORz 以及 OSPI_RESET_OUT、如下所示



    此致、
    Rijohn

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

    太棒了。 谢谢大家!