STM32 SDRAM扩展及FSMC研究

STM32之FSMC初级研究篇V1.0
植物抗体一.FSMC简介 (2)
二.FSMC控制TFT彩屏的应用 (5)
三.FSMC扩展外部SRAM应用 (7)
技术交流QQ:99133698,86553920
一.FSMC简介
我们知道STM32是不带MMU的,但为了扩展外部存储器,高密度(256 KB以上FlaSh)的STM32内部带了一个类似MMU的FSMC(可变静态存储控制器),专门为100pin以上的STM32提供一个灵活的外部存储选项。FSMC不像MMU,他是不能实现管理虚拟内存的,也就是说STM32的地址线为32位,能访问的最大地址不能超过4G,但FSMC没有实现全部4G的管理,其最大能管理1Gbyte.
1.FSMC的特点:
①支持多种静态存储器类型。STM32通过FSMC可以与SRAM、ROM、PSRAM、NOR Flash和NANDFlash存储器的引脚直接相连。
②支持丰富的存储操作方法。FSMC不仅支持多种数据宽度的异步读/写操作,而且支持对NOR/PSRAM/NAND存储器的同步突发访问方式。
③支持同时扩展多种存储器。FSMC的映射地址空间中,不同的BANK是独立的,可用于扩展不同类型的存储器。当系统中扩展和使用多个外部存储器时,FSMC会通过总线悬空延迟时间参数的设置,防止各存储器对总线的访问冲突。
传送侦测怎么做④支持更为广泛的存储器型号。通过对FSMC的时间参数设置,扩大了系统中可用存储器的速度范围,为用户提供了灵活的存储芯片选择空间。金属丝的杨氏模量
⑤支持代码从FSMC扩展的外部存储器中直接运行,而不需要首先调入内部SRAM。
2.FSMC包含两种控制器:
1个NOR闪存/SRAM控制器,可以与NOR闪存、SRAM和PSRAM存储器接口。
1个NAND闪存/PC卡控制器,可以与NAND闪存、PC卡,CF卡和CF+存储器接口。
STM32微控制器之所以能够支持NOR Flash和NAND Flash这两类访问方式完全不同的存储器扩展,是因为FSMC内部实际包括NOR Flash和NAND/PC Card两个控制器,分别支持两种截然不同的存储器访问方式。在STM32内部,FSMC的一端通过内部高速总线AHB连接到内核Cortex-M3,另一端则是面向扩展存储器的外部总线。内核对外部存储器的访问信号发送到AHB总线后,经过FSMC转换为符合外部存储器通信规约的信号,送到外部存储器的相应引脚,实现内核与外部存储器之间的数据交互。FSMC起到桥梁作用,既能够进行信号类型的转换,又能够进行信号宽度和时序的调整,屏蔽掉不同存储类型的差异,使之对内核而言没有区别。
3.FSMC的地址映射
FSMC管理1 GB的映射地址空间。该空间划分为4个大小为256 MB的BANK,每个BANK又划分为4个64 MB的子BANK,如表1所列。FSMC的2个控制器管理的映射地址空间不同。NOR Flash控制器管理第1个BANK,NAND/PC Card控制器管理第2~4个BANK。由于两个控制器管理的存储器类型不同,扩展时应根据选用的存储设备类型确定其映射位置。其中,BANK1的4个子BANK拥有独立的片选线和控制寄存器,可分别扩展一个独立的存储设备,而BANK2~BANK4只有一组控制寄存器
二.FSMC控制TFT彩屏的应用
STM32使用彩屏,可以采用普通的接线方式也可以用FSMC总线。
净烟器
1.因为液晶屏一般都带有8080总线,包括WR,RD,CS控制线和还有数据总线,当然还有液
晶屏的特殊控制线RS(数据命令选择信号),没有地址线。由于普通接线方式在数据的读写时需要配置成不同的模式导致速度会较慢,而且普通IO口最大只能到50MHZ,读写驱动函数较为耗时,在有外部存储器扩展的情况下,TFT的数据总线只能接到A,B,C这三个口(D,E,F,G都带有FSMC控制线),用普通接线方式让带有FSMC的丰富接口的STM32造成了接口不丰富的假象,其他外设如NRF2401,eprom,网口等这些需要在A,B,C总线上其他复用功能的外设就得为彩屏绕道!!这是很大浪费不是吗。
液压式浮球阀2.采用FSMC总线来控制彩屏是最理想的。FSMC总线可到72Mhz,另外可以和外部存储器共
用总线,这样就大大提高了IO的利用率。同时FSMC访问液晶是以SRAM的方式访问的,访问速度非常快!只要配置好FSMC的寄存器就能很轻松控制彩屏了,按照官方的例程(多数国产开发板也是参照官方的:如红牛,野火,神州,红龙,原子),液晶屏都是接在NOR/SRAM区的第四块,也就是Bank1->NE4,也就是所地址是从0x6c000000开始的。
那为啥不接在NE1,NE2,NE3,而接在NE4呢,因为官方的评估板NE2是接NOR FLASH,NE3是接S
RAM.NE1好像也接了NOR/SRAM,所以用最后的NE4作为液晶的CS控制线;数据线直接接在FSMC上(液晶要引出16位数据线,8位兼容模式不太建议);WR接在FSMC_NWE,RD接在FSMC_NOE,最关键的是RS信号,我这里重点讲下。
FSMC对外部设备的地址映像从0x6000 0000开始,到0x9FFF FFFF结束,这里的地址指的是内部AHB总线上的地址,而外部其实只有0-25总共26根地址线(64MB)。以bank1为例:最大是256MB,NE1-NE4片选其实就是内部的高四位的地址线,这样就能表示4*64=256MB了。外部的地址线0-25是由内部的HADDR[25:0]映射出来的;半轴螺栓
这里的HADDR是需要转换到外部设备的内部AHB地址线,每个地址对应一个字节单元。因此,若外部设备的地址宽度是8位的,则 HADDR[25:0]与STM32的CPU引脚FSMC_A[25:0]一一对应,最大可以访问64M字节的空间。若外部设备的地址宽度是16位的,则是HADDR[25:1]与STM32的CPU引脚FSMC_A[24:0]一一对应。在应用的时候,可以将FSMC_A 总线连接到存储器或其他外设的地址总线引脚上。
使用FSMC控制器后,可以把FSMC提供的FSMC_A[25:0]作为地址线,而把FSMC提供的FSMC_D[15:0]作为数据总线。
看了上面也许你还一头雾水,我们拿官方评估板来说吧(请看上图):
下面是官方评估板移植STemWIN的代码,打开相应的文件,stm32f10e_eval_lcd.c是基本的彩屏驱动文件,LCDConf_stm32f10e_eval.c是移植emWIN时的液晶配置文件,我们可以看到FSMC的地址线线接到彩屏的只有A0,A0是作为RS(数据命令)的选通线。仔细点看,有个问题!!!!!既然是A0,那定义的那个LCD结构体LCD->LCD_REG访问的是
0x6c000000,LCD->LCD_RAM访问的是0x6c000002啊,那A0不是一直都是0么.不是的,这就是上面的讲的若外部设备的地址宽度是16位的,则是HADDR[25:1]与STM32的CPU引脚FSMC_A[24:0]一一对应。也就是说我们设置FSMC相关寄存器时候,设置外部访问数据是16bit的话,内部的HADDR[25:1]自动映射到外部IO的ADDR[24:0](也就是IO要开重映射功能时钟的原因吧?)。16bit数据宽度情况下,内部的HADDR的A1才是对于外部IO的A0.内部HADDR_A0始终是0的,所以他不会被映射出来,这就可以让外部地址可以连续的,感觉和访问8位数据一样。

本文发布于:2024-09-23 08:26:27,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/3/270478.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:存储器   地址   总线   访问   扩展
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议