历史上的今天
今天是:2025年04月18日(星期五)
2018年04月18日 | STM32接口FSMC/FMC难点的理解
2018-04-18 来源:eefocus
一,FSMC简
FSMC,即灵活的静态存储控制器,能够与同步或异步存储器和 16 位 PC 存储器卡连接,
STM32 的 FSMC 接口支持包括 SRAM、NAND FLASH、NOR FLASH 和 PSRAM 等存储器。
二,FSMC存储块
STM32F767的FMC将外部存储器划分为6个固定大小的256M的存储区域,如下图
如图:
FSMC分为4块,每块256M字节又被划分为4*64,即四个片选
NOR / PSRAM使用块1,共256M
NAND闪存使用块2,3,共512M
PC卡使用块4,共256M
三,存储块1(Bank1)寄存器
STM32 的 FSMC 存储块 1(Bank1)被分为 4 个区,每个区管理 64M 字节空间,每个区都
有独立的寄存器对所连接的存储器进行配置。Bank1 的 256M 字节空间由 28 根地址线
(HADDR[27:0])寻址。
这里 HADDR 是内部 AHB 地址总线,其中 HADDR[25:0]来自外部存储器地址
FSMC_A[25:0],而 HADDR[26:27]对 4 个区进行寻址。
我们要特别注意 HADDR[25:0]的对应关系:
当 Bank1 接的是 16 位宽度存储器的时候:HADDR[25:1]对应 FSMC-A[24:0]。
当 Bank1 接的是 8 位宽度存储器的时候:HADDR[25:0]对应FSMC_A[25:0]。
比如外部存储器接到FMC_NE1上面,那么外部存储器的地址为HADDR[26:27] +FMC_A[25:0]=0x60000000+FMC_A[25:0]。
注:不论外部接 8 位/16 位宽设备,FSMC_A[0] 永远接在外部设备地址 A[0] 。
HADDR[25:0] 位包含外部存储器地址,由于 HADDR 为字节地址,而存储器按字寻址,所以根据存储器数据宽度不同,
实际向存储器发送的地址也将有所不同,如图:
一个地址对应一个字节的数据,所以64M字节的地址量,就可以表示64x8=512M的数据,也就是说外部储存器的最大容量为512M.
当 Bank1 接的是 16 位宽度存储器的时候:HADDR[25:1]对应 FSMC-A[24:0]。
:一个地址就可以操作一个字(16位)的数据那么就不需要26根地址线了,HADDR[0]就没有用到,所以: HADDR[25:1] = FMC _A[24:0] 。
即:
0000对应FSMC_A[0]=0 (2字节)
0010对应FSMC_A[0]=1 (2字节)
0100对应FSMC_A[1]=1 (2字节)
所以对应关系需要除以2,内部右移一位对齐
此时最低位没用,访问最低位需要使用UB/LB
当 Bank1 接的是 8 位宽度存储器的时候:HADDR[25:0]对应 FSMC_A[25:0]。
:一个地址正好可以操作一个字节(8位)的数据,需要26根地址线:那么 HADDR[25:0] = FMC _A [25:0] 。
上一篇:关于STM32的存储器映像
下一篇:STM32的SYSTICK详解
史海拾趣
|
单片机(STC89C52)VCC是5V, GPS(MTK M89)VCC是4.3V RXD连TXD,TXD连RXD 用万用表量的时候GPS的串口是4.8V,GPS的是3.6V 不知道怎么的就烧了?为什么没接串口之前MCU的RXD、TXD都有4.8的电压? 小弟刚入门还请指点迷经,要怎么联才可以让MCU读到GPS ...… 查看全部问答> |
|
实时中断定时0.625ms,难道是中断的时间太快了?怎么For里面的循环都没有执行了呢? 现在想明白的就是一个问题,在进入中断响应的处理过程中,定时器是不是还在定时?我感觉应该在退出响应之后才可以,要不然,如果响应 ...… 查看全部问答> |
|
wince系统下 compact framework程序崩溃的求救 我的wince系统,已经按照过compact framwork 2.0 ,期间运行 dotnet 程序都很正常(程序比较经常读写文件)。大约持续运行1个月后,dotnet程序无法启动,报异常。而且我用任意一个dotnet程序都是出现这个异常。怀疑系统中产生了什么异常。具体不明 ...… 查看全部问答> |
|
IR new ic Rugged AEC-Q100 Qualified 600V ICs IR Introduces Family of Rugged AEC-Q100 Qualified 600V ICs for Energy-Efficient Automotive Gate Drive Applications International Rectifier has launched a family of rugged 600V ICs for energy-efficient automotive ga ...… 查看全部问答> |
|
用16F690做一个PWM信号的项目,但是总是不出来PWM信号,程序如下 #include #use delay(clock = 12000000) #fuses HS,NOWDT,NOPROTECT,PUT,NOBROWNOUT,MCLR #use fixed_io(c_outputs = PIN_C4,PIN_C6, PIN_C7) void main(void) { setup_ ...… 查看全部问答> |
|
本系统要采集的信号十分微弱,5~100uV,设计电路要放大40000倍。由于AD620放大倍数越大,误差就越大,故本电路用了两片AD620形成二级放大。其中U1放大100倍,U2放大10倍。图中IN1,IN2为经过差分放大后的信号,输入到U1。U1放大后形成一路信号输入到U ...… 查看全部问答> |




