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.

[参考译文] PROCESSOR-SDK-AM335X:GPMC SRAM 配置

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/664596/processor-sdk-am335x-gpmc-sram-configuration

器件型号:PROCESSOR-SDK-AM335X

我正在尝试映射一个 SRAM 芯片、该芯片在 u-boot 中具有一个16位接口(CY62137FV18)。 此芯片为128K x 16位、因此它应响应128k 地址并在每个位置存储16位、总大小为256KB 或2MB。

但是、当我在 uboot 中写入/读取某些地址时、它会为每个地址提供一个字节。 当我尝试从一个地址读取时、我会得到一个字节、如果我尝试读取一个16位字(例如从0x10000000读取)、我会得到该地址的内容和下一个地址的内容(返回0x10000000和0x10000001的内容)。 因此、当我映射此16位器件时、每个地址只能请求8位、这意味着我只能获得一半的存储空间。 如果存储器映射的大小是大小的两倍(从0x10000000扩展到0x10040000)、这可能是可以的、但情况并非如此。 当我写入0x10020000时、地址0x10000000也会更新、这意味着它忽略位17、并且内存的可用大小仅为0x20000字节、或128KB。

我认为我的 GPMC 寄存器和硬件可能还不错、但无论如何我都将它们粘贴在下面。

#define STATIC_RAM_GPMC_CONFIG1 0x00001200       // 16位、地址和数据复用
#define STATIC_RAM_GPMC_CONFIG2 0x000A0900       // cswroff = A*fclk,csrdoff = 9*fclk
#define STATIC_RAM_GPMC_CONFIG3 0x0020200       //advrdoff =2*fclk,advwroff =2*fclk
#define STATIC_RAM_GPMC_CONFIG4 0x0A030903      //oeontime =3*fclk,oeofftime =9*fclk,weontime =3*fclk,weofftime =a*fclk
#define STATIC_RAM_GPMC_CONFIG5 0x000D0E0E     //rdcycletime = E*fclk,wrcycletime = e*fclk,rdaccesstime = D*fclk
#define STATIC_RAM_GPMC_CONFIG6 0x0D040000     //wrdataonadmuxbus = 4*fclk、wraccesstime = d*fclk
#define STATIC_RAM_GPMC_CONFIG7 0x0000F50


我的 uboot 器件树如下所示:

GPMC{
  状态="正常";
   pinctrl-names ="default";
   pinctrl-0 =</nandflash_pins_s0>;
   范围=<0 0x08000000 0x1000000
               1 0 0x10000000 0x1000000>;
   NAND@0、0{
      /*省略了这些内容,因为它不相关*/
   };
   SRAM@1、0{
      reg =<1 0 0x40000>;
   };
};
使用这些设置、我可以在 CCS 中看到映射的存储器并编辑这些值、但(在存储器查看器中)所有值都在0x10020000之后重复。
我缺少什么/做什么错了?

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

    根据我的理解、要使用16位(2字节)、您需要具有以下连接:

    AM335x SRAM
    GPMC_BE0n_cle -> BLEn
    GPMC_be1n -> BHEn

    确保您已进行正确的引脚多路复用、并且 GPMC_be0n_cle /GPMC_be1n 上具有预期的有效信号。

    我还看到您已设置 GPMC_CONFIG1[9:8] MUXADDATA = 0x2 (地址和数据复用连接设备)。 您能描述一下连接到 SRAM 地址/数据引脚的 AM335x GPMC 地址/数据引脚吗? 确保您已与 AM335x TRM 保持一致:
    表7-5. GPMC 引脚复用选项
    图7-3. GPMC 至16位地址/数据多路复用存储器

    此致、
    帕维尔
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我将 BLEn 和 BHEn 都接地。 我是否应该不能一次读取两个字节? 还是这不正确?

    此外、我还将 GPMC AD 16引脚通过锁存器(由 ADV 启用)连接到 SRAM。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用 user="Kevin Boldingh)]我将 BLEn 和 BHEn 都接地。 我是否应该不能一次读取两个字节? 或者、这是否不正确?

    为了读取16位字、两个 AM335x GPMC BE0n/BE1n 应该都为低电平、因此您应该能够读取偶数地址:0x10000000、0x10000002、0x10000004等

    [引用 user="Kevin Boldingh"]此外,我还将 GPMC AD 16引脚通过 LATCH (由 ADV 启用)连接到 SRAM。

    您是否遵循 TRM 指南? 不应使用 AM335x GPMC_A0、应将 GPMC_A1连接到 SRAM A16引脚。

    另请查看以下部分:

    7.1.2.3.10.1.1.1地址/数据多路复用器件上的异步单次读取操作

    7.1.2.3.10.1.1.2地址/数据多路复用器件上的异步单次读取

    此致、
    帕维尔

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

    e2e.ti.com/.../325969
    e2e.ti.com/.../512464

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

    看起来我发现了问题。 我将 GPMC_A1-A3引脚复用为 GPMC_a17-A19、方法是将其设置为 MODE (4)。 当我将其设置回模式(0)时、它开始工作。

    感谢您的帮助、
    Kevin