我正在尝试映射一个 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之后重复。
我缺少什么/做什么错了?
