STM32接口FSMCFMC难点的理解---写的比较明白,容易理解

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

STM32接⼝FSMCFMC难点的理解---写的⽐较明⽩,容易理解摘录者说:
这篇⽂章说明⽩了以下两件事:
(1)ARM CPU的的32位地址怎样对应到FSMC的25:0的26根地址线;
(2) 存储器宽度为8位应该怎样对应,存储器宽度为16位应该怎样对应;
⼀,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] 。

相关文档
最新文档