资料说stm32f103ze SRAM可以扩4*64MB, 想把外挂SRAM扩到64MB,不知道要用什么型号?多少钱一个? 打算用BANK1里的NE1 |
首先肯定的就是 使用STM32内部的FSMC模块,FSMC(Flexible Static Memory Controller,可变静态存储控制器)是STM32系列采用一种新型的存储器扩展技术。在外部存储器扩展方面具有独特的优势,可根据系统的应用需要,方便地进行不同类型大容量静态存储器的扩展, FSMC 包括4个模块: (1)AHB接口(包括FSMC配置寄存器) (2)NOR闪存和PSRAM控制器(驱动LCD的时候LCD就好像一个PSRAM的里面只有2个16位的存储空间,一个是DATA RAM 一个是CMD RAM) (3)NAND闪存和PC卡控制器 (4)外部设备接口 下图是扩展存储器的地址对应表 你所说的外扩sram就是使用的psram控制器来完成了 下面是fsmc模块寄存器配置片,用来选择扩展什么样的存储块 FSMC对外部设备的地址映像从0x6000 0000开始,到0x9FFF FFFF结束,共分4个地址块,每个地址块256M字节。可以看出,每个地址块又分为4个分地址块,大小64M。对NOR的地址映像来我们可以通过选择HADDR[27:26]来确定当前使用的是哪个64M的分地址块,如上表格。而这四个分存储块的片选,则使用NE[4:1]来选择。数据线/地址线/控制线是共享的。 NE1 ->Bank1 NE2->Bank2 NE3->Bank3 NE4->Bank4 若 NE1 连接, 则每小块NOR/PSRAM 64M 第一块:6000 0000h--63ff ffffh (DATA长度为8位情况下,由地址线FSMC_A[25:0]决定;DATA长度为16位情况下,由地址线FSMC_A[24:0]决定) 第二块:6400 0000h--67ff ffffh 第二块:6800 0000h--6bff ffffh 第三块:6c00 0000h--6fff ffffh 软件方面你可以设置一下keil 软件 target选项卡里面选择 外部ram 在里面RAM1打上对勾填写上对应的地址和空间大小,你编写程序定义变量的时候编译器就自动把变量分配到外部内存里了。芯片 你可以选择IS42S16400F-6TL 64M(4Mx16)存储器 。价格大概在15到20元左右,便宜的不能买质量不行,再给你来一张接口图 |
补充一下发一个转载的资料 stm32外接sram详细配置(基于MDK) 此配置实用st的官方例程,sram使用的区块为bank1,bank1的首地址为0x60000000尾地址为0x6fffffff,分为4个64M的区块。 其中: Bank1_SRAM1_ADDR = 0x60000000; Bank1_SRAM2_ADDR = 0x64000000; Bank1_SRAM3_ADDR = 0x68000000; Bank1_SRAM4_ADDR = 0x6c000000; 分别对应NE1,NE2,NE3,NE4四个片选,相应的IO口应按需要更改配置(下面有官方的例程,里面有详细代码)。 如果想把变量分配到外部SRAM需要配置“Target Options ” ,选择RAM1前的“default”,后面start添0x68000000,“size”添0x80000,此处配置为Bank1_SRAM3的配置。 但此时编译后运行会进入“HardFault_Handler()”函数的死循环,原因是配置了外部SRAM后变量会自动分配到外部SRAM但是代码中某些变量在SRAM初始化之前被编译,导致上述错误。 可以通过将SRAM初始化之前编译的“**.c”和“**.s”文件的“Meorry Assignment”定义到内部RAM的方法来解决。操作方法是:右击该“**.c”选择“option for Flie "**.c"”将“zero Initialized Data”和“otherData”定义到IRAM[0x20000000-0x20000FFFF]。 |
楼上讲解的不错 |
谢谢2楼,楼主问题是否已经解决了呢 |