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.

[参考译文] TMDS64EVM:如何为 32 位 PSRAM 接口配置 GPMC

Guru**** 2926660 points

Other Parts Discussed in Thread: SYSCONFIG

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1641324/tmds64evm-how-to-configure-gpmc-for-32-bit-psram-interface

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

您好:

当前使用 mcu_plus_sdk_am64x_10_01_00_32、用户的应用是在此 SDK 版本上构建的。 GPMC 的示例参考是 GPMC_PSRAM_IO 仅为 16 位。 但是、我创建了额外的 C 文件、以便为 PRG1_PRU0_GPO0-15 上的 I/O 的多路复用器模式 (8) 进行 AD [31:16]额外的引脚多路复用。 我还配置 gpmc0_config 寄存器 1 至 6 以正确设置 32 位器件和同步周期访问等

请注意、在设置为重复示例和适当设置以配置寄存器以进行 16 位访问(在非多路复用 22 位地址和 16 位数据中)时、应用程序使用 16 位器件接口

但我无法在 32 位数据接口总线上工作。 我也无法更改 example.syscfg 文件以更改 32 位的 GPMC 配置(仅设置了 16 位器件,无其他选项)。 这就是为什么我必须在 C 文件中进行额外的引脚多路复用配置的原因。

我在“SysConfig_1.27.0“中注意到、它允许配置为 32 位。 但是、在最新的 MCU_PLUS_SDK_am64x_11_02_00_24 中、GPMC PSRAM 示例的 example.syscfg 仍然相同、您没有更改自定义器件和/或将 AD 总线设置为 32 的选项。

我怎么能得到帮助来克服这个障碍? 任何人用户都有类似的经验? BTW;这用于 CCS 开发和 NORTOS 应用。 我认为在 Linux 中有问题、但这不是我的担心。

此致、

Huynh

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

    您好 Huynh、

    请看下面的图片。

    32 位模式仅支持同步模式下的地址和数据多路复用。

    您是否按如下所示配置了设置?

    是否可以与我们共享您的 32 位 PSRAM 代码、以便我们能够对问题进行故障排除?

    我认为运行模式和引脚多路复用器配置可能是问题。 在这一点上、我不想考虑任何其他问题。

    此致、

    Anil.

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

    您好 Anil、

    你是认真的吗? 您只从 TRM 中阅读典型应用、并确认这是唯一支持的模式。 您需要咨询 TI 内部设计组获取正确答案。 即使 MCU_SDK 示例仅针对 PSRAM 器件 IS67WVE4M16EBL70BLA1 支持 16 位非多路复用模式、但并不意味着 AM64xx 无法支持 32 位非多路复用模式。 如果向下滚动到第 12.3.3.1.1 节“GPMC 功能“的最后一个要点:  

    •外部 16 位和 32 位伪 SRAM (PSRAM) 器件

    如果您需要、我可以向您推荐 TI 专家、他过去回答了类似的问题、点击此处的链接:  

    https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1188914/am6411-processor-peripherals-gpmc-32-bit-a-d-non-multiplexed-interface/4479732?tisearch=e2e-sitesearch&keymatch=Asynchronous%25252520SRAM%25252520like%25252520memories%25252520GPMC%25252520interface#4479732

    还不止如此;如果您可以在 1.27 版上运行 SysConfig、您可以字面上将 GPMC 配置为非多路复用 32 位。

    我向您的内部固件专家提出的问题是如何操作生成的 16 位驱动程序并将其设置为 32 位。 您需要知道、在 example.syscfg 中无法选择 32 位器件。 因此、您必须从 board_open() 和 drivers_open() 中禁用 16 位驱动程序、并为 GPMC 调用 32 位驱动程序。 我的问题是:“告诉我如何正确地创建 32 位 GPMC 驱动程序和 RAM 句柄以便能够与 32 位器件通信?“

    您需要联系我、联系负责 MCU_SDK 的 TI 软件工程师、为我提供正确答案。

    非常感谢

    Huynh

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

    Anil、

    你还不明白我的问题? 当然、还有 23 位地址和 32 位数据(您缺少 A22)。 这不是我的问题。 您的最后一个答案是关闭和不正确、说 CPU 无法编程为 32 位非多路复用。 请再次阅读问题。 我重复:“我如何为 PSRAM 或任何具有 32 位非多路复用总线的设备构建驱动程序,因为 MCU_SDK 目前不支持 32 位并且自动生成的驱动程序和 PSRAM I/F 适用于 16 位? 我想在 board_open () 和 boardDriver_open () 处构建自己的驱动程序并禁用 16 位驱动程序。 我相信您并不是固件专家、大多数情况下都是查阅 TRM 或数据表来大致回答客户有关硬件的问题。 我非常肯定您对软件的了解、因此我们请求 GPMC SW 团队的某人给我解答。 我们知道它可以使用 Linux 驱动程序、但 TI MCU_SDK 未提供该驱动程序。 请发送 SW 专家来寻求帮助。

    H.

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

    您好 Huynh、

    请按照以下步骤支持 32 位 PSRAM。 如果您仍然遇到任何问题、请告诉我。

    如果您已经按照以下相同步骤操作、但仍然无法正常工作、请共享您的代码、我将对其进行审核并提供反馈。

    1.打开 16 位 PSRAM 示例并编译示例

    2.生成代码

    generated /ti_drivers_config.c
    Generated / ti_drivers_config.h
    generated /ti_drivers_open_close.c
    Generated /ti_pinmux_config.c
    generated /ti_board_config.c
    generated /ti_power_clock_config.c

    仅将这些文件复制到工程工作目录以更改 GPMC 代码。

    3.禁用从 SysConfig 生成 GPMC 代码

    防止 SysConfig 覆盖您的手动更改。

    4.更新生成的代码中的设备大小

    GPMC_PARAMS gGpmcParams[CONFIG_GPMC_NUM_Instances]=


    .devSize = CSL_GPMC_CONFIG1_devicesize_THIRTYTWOBITS、/* 32 位*/
    }
    };

    5.添加上部 16 地址线和字节使能引脚

    Static Pinmux_Per Cfg_t gPinMuxMainDomainCfg[]={
    /* GPMC0 控制信号*/


    /*字节使能(16 位和 32 位)*/
    { PIN_GPMC0_BE2N、( PIN_MODE (0)| PIN_PULL_DISABLE )}、/*仅 32 位*/
    { PIN_GPMC0_BE3N、( PIN_MODE (0)| PIN_PULL_DISABLE )}、/*仅 32 位*/


    /*数据线(仅限 32 位)*/
    { PIN_GPMC0_AD16、( PIN_MODE (0)| PIN_INPUT_ENABLE | PIN_PULL_DISABLE )}、
    { PIN_GPMC0_AD17、( PIN_MODE (0)| PIN_INPUT_ENABLE | PIN_PULL_DISABLE )}、
    { PIN_GPMC0_AD18、( PIN_MODE (0)| PIN_INPUT_ENABLE | PIN_PULL_DISABLE )}、
    { PIN_GPMC0_AD19、( PIN_MODE (0)| PIN_INPUT_ENABLE | PIN_PULL_DISABLE )}、
    { PIN_GPMC0_AD20、( PIN_MODE (0)| PIN_INPUT_ENABLE | PIN_PULL_DISABLE )}、
    { PIN_GPMC0_AD21、( PIN_MODE (0)| PIN_INPUT_ENABLE | PIN_PULL_DISABLE )}、
    { PIN_GPMC0_AD22、( PIN_MODE (0)| PIN_INPUT_ENABLE | PIN_PULL_DISABLE )}、
    { PIN_GPMC0_AD23、( PIN_MODE (0)| PIN_INPUT_ENABLE | PIN_PULL_DISABLE )}、
    { PIN_GPMC0_AD24、( PIN_MODE (0)| PIN_INPUT_ENABLE | PIN_PULL_DISABLE )}、
    { PIN_GPMC0_AD25,( PIN_MODE (0)| PIN_INPUT_ENABLE | PIN_PULL_DISABLE )}、
    { PIN_GPMC0_AD26、( PIN_MODE (0)| PIN_INPUT_ENABLE | PIN_PULL_DISABLE )}、
    { PIN_GPMC0_AD27、( PIN_MODE (0)| PIN_INPUT_ENABLE | PIN_PULL_DISABLE )}、
    { PIN_GPMC0_AD28、( PIN_MODE (0)| PIN_INPUT_ENABLE | PIN_PULL_DISABLE )}、
    { PIN_GPMC0_AD29、( PIN_MODE (0)| PIN_INPUT_ENABLE | PIN_PULL_DISABLE )}、
    { PIN_GPMC0_AD30、( PIN_MODE (0)| PIN_INPUT_ENABLE | PIN_PULL_DISABLE )}、
    { PIN_GPMC0_AD31、( PIN_MODE (0)| PIN_INPUT_ENABLE | PIN_PULL_DISABLE )}、
    };

    7.支持 32 位的 PSRAM 读写 API

    PSRAM 本机支持高达 16 位的读写操作。 对于 32 位支持、您需要编写以下代码。

    这是写入 API。 同样、您可以实现读取 API:

    Else if (devSize == CSL_GPMC_CONFIG1_devicesize_THIRTYTWOBITS)

    /* 32 位模式 — 32 位 PSRAM 的新增功能*/
    Volatile uint32_t *pSrc =(volatile uint32_t *)(偏移+ baseAddress);
    Volatile uint32_t *pDst =(volatile uint32_t *) buf;


    while (size != 0U)

    *pDst =*pSrc;
    pSrc++;
    pDst++;
    尺寸-= 4U;
    }



    此致、

    Anil