1灵活的静态存储控制器FSMC2培训内容FSMC特性简介和FSMC框图外挂存储器地址映射AHB接口NOR/PSRAM控制器接口信号支持的存储器和访问方式异步传输同步突发传输NAND/PCcard控制器接口信号支持的存储器和访问方式NAND操作ECC计算PCcard/CompactFlash操作3培训内容FSMC特性简介和FSMC框图外挂存储器地址映射AHB接口NOR/PSRAM控制器接口信号支持的存储器和访问方式异步传输同步突发传输NAND/PCcard控制器接口信号支持的存储器和访问方式NAND操作ECC计算PCcard/CompactFlash操作4FSMC特性简介FSMC管理1GB空间,拥有4个Bank连接外部存储器每个Bank有独立的片选信号每个Bank有独立的时序配置同步批量传输访问最高频率可达60MHzfCLK=HCLK/2支持的存储器类型静态地址映射存储器SRAMPSRAMNOR/ONENANDROMLCD接口支持8080和6800模式NANDFlash和16位PCCardNANDFlash具有硬件ECC可以在这些外部存储执行代码5FSMC框图四个子模块:1.包含FSMC配置寄存器的AHB接口2.NORFlash/PSRAM控制器3.NANDFlash/PCCard控制器4.和外部存储器的接口信号6培训内容FSMC特性简介和FSMC框图外挂存储器地址映射AHB接口NOR/PSRAM控制器接口信号支持的存储器和访问方式异步传输同步突发传输NAND/PCcard控制器接口信号支持的存储器和访问方式NAND操作ECC计算PCcard/CompactFlash操作7Cortex-M3预定义存储器映射图123456STM32F2根据不同芯片实现了128K~1024K字节的片上闪存STM32F2实现了128K字节的SRAMSTM32F2实现了多种高性能外设STM32F2实现了外部存储器区域STM32F2实现了外部存储器接口FSMC8STM32F2的存储器映射实现1234569外挂设备的地址映射4个Bank各占256M字节空间Bank1分为4个region各占64M字节,有各自的片选用来连接NOR、PSRAM、LCD等Bank2和Bank3用来连接NANDFlash每个Bank连接一块NANDBank4用来连接PCCard每个Bank和Region有独立的寄存器对所连存储器进行配置地址连接的存储器类型10映射地址空间和两个存储设备控制器内部控制器Bank号管理的地址范围支持的设备类型配置寄存器NORFlash控制器Bank10x6000,0000~0x6FFF,FFFFSRAM/ROMNORFlashPSRAMFSMC_BCR1/2/3/4FSMC_BTR1/2/3/4FSMC_BWTR1/2/3/4NANDFlash/PCCard控制器Bank20x7000,0000~0x7FFF,FFFFNANDFlashFSMC_PCR2/3/4FSMC_SR2/3/4FSMC_PMEM2/3/4FSMC_PATT2/3/4FSMC_PIO4Bank30x8000,0000~0x8FFF,FFFFBank40x9000,0000~0x9FFF,FFFFPCCard11NOR/PSRAM地址映射NOR/PSRAM是”staticmemorymap”设备:256M字节的空间需要28根地址线寻址HADDR是内部AHB地址总线HADDR[25:0]来自外部存储器地址FSMC[25:0]HADDR[26:27]对4个region分别寻址无论外接8位/16位宽度设备,FSMC_A[0]永远连接外部设备的地址A[0]外接16位宽度存储器:HADDR[25:1]FSMC_A[24:0]外接8位宽度存储器:HADDR[25:0]FSMC_A[25:0]所选的Bank片选信号地址范围HADDR[27:26][25:0]Bank1.region1FSMC_NE10x6000,0000~63FF,FFFF00FSMC_A[25:0]Bank1.region2FSMC_NE20x6400,0000~67FF,FFFF01Bank1.region3FSMC_NE30x6800,0000~6BFF,FFFF10Bank1.region4FSMC_NE40x6C00,0000~6FFF,FFFF1128根地址线12FSMC外接SRAM、NOR、NAND13NOR/PSRAM地址映射的使用(1)举例1:在Bank1的region2挂了一个8位宽度的NORFlashFSMC_NOR_WriteByte(u32WriteAddr,u8Data)/*1.*/NOR_WRITE(ADDR_SHIFT(0x5555),0xAA);NOR_WRITE(ADDR_SHIFT(0x2AAA),0x55);NOR_WRITE(ADDR_SHIFT(0x5555),0xA0);/*2.往目标地址写入目标数据*/NOR_WRITE((Bank1_NOR2_ADDR+WriteAddr),Data);/*3.等待NOR内部写逻辑完成*/……#defineBank1_NOR2_ADDR((u32)0x64000000)#defineADDR_SHIFT(A)(Bank1_NOR2_ADDR+(1*(A)))#defineNOR_WRITE(Address,Data)(*(vu8*)(Address)=(Data))14NOR/PSRAM地址映射的使用(2)举例1:在Bank1的region2挂了一个16位宽度的NORFlashFSMC_NOR_WriteByte(u32WriteAddr,u8Data)/*1.*/NOR_WRITE(ADDR_SHIFT(0x5555),0xAA);NOR_WRITE(ADDR_SHIFT(0x2AAA),0x55);NOR_WRITE(ADDR_SHIFT(0x5555),0xA0);/*2.往目标地址写入目标数据*/NOR_WRITE((Bank1_NOR2_ADDR+WriteAddr),Data);/*3.等待NOR内部写逻辑完成*/……#defineADDR_SHIFT(A)(Bank1_NOR2_ADDR+(2*(A)))#defineNOR_WRITE(Address,Data)(*(vu16*)(Address)=(Data))15NAND/PCCard地址映射NAND/PCCard控制器管理3个Bank每个Bank占据256M存储空间(64*4)Bank2、Bank3挂NANDFlash每个Bank又分成两个section:Common和AttributeBank4挂PCCard该Bank分成三个section:Common、Attribute和I/OFSMCBank存储空间时序寄存器空间大小地址范围Bank2(NAND)CommonFSMC_PMEM264MB0x7000,0000~73FF,FFFFAttributeFSMC_PATT264MB0x7800,0000~7BFF,FFFFBank3(NAND)CommonFSMC_PMEM364MB0x8000,0000~83FF,FFFFAttributeFSMC_PATT364MB0x8800,0000~8BFF,FFFFBank4(PCCard)CommonFSMC_PMEM464MB0x9000,0000~93FF,FFFFAttributeFSMC_PATT464MB0x9800,0000~9BFF,FFFFI/OFSMC_PIO464MB0x9C00,0000~9FFF,FFFF16NAND/PCCard地址映射(2)NAND的Common和Attribute空间又可细分为Datasection(第一个64KB空间)软件从这个空间的任何地方执行读、写数据操作Commandsection(第二个64KB空间)软件往这个空间里任何地方写入命令字节这个空间任何地址都是Addr[16]=1(CLE为高电平)Addresssection(下一个128KB空间)软件往这个空间的任何地方写入地址字节序列这个空间任何地址都是Addr[17]=1(ALE为高电平)SectionHADDR[17:16]外部信号地址范围数据00ALE=CLE=00x00,0000~0,FFFF命令01ALE=0,CLE=10x01,0000~01,FFFF地址1xALE=1,CLE=00x02,0000~03,FFFF注意:ALE就是FSMC_A[17];CLE就是FSMC_A[16]17FSMC外接SRAM、NOR、NAND18NAND地址映射的使用举例:在Bank2上挂了一块NAND512W3A2FSMC_NAND_ReadID(NAND_IDTypeDef*NAND_ID)/*1.SendCommandtothecommandarea*/*(__IOuint8_t*)(Bank_NAND_ADDR|CMD_AREA)=0x90;*(__IOuint8_t*)(Bank_NAND_ADDR|ADDR_AREA)=0x00;/*2.SequencetoreadIDfromNANDflash*/data=*(__IOuint32_t*)(Bank_NAND_ADDR|DATA_AREA);/*3.processreturneddata*/#defineBank_NAND_ADDR((uint32_t)0x70000000)#defineDATA_AREA((uint32_t)0x00000000)#defineADDR_AREA(uint32_t)(117)/*A17=ALEhigh*/#defineCMD_AREA(uint32_t)(116)/*A16=CLEhigh*/19培训内容FSMC特性简介和FSMC框图外挂存储器地址映射AHB接口NOR/PSRAM控制器接口信号支持的存储器和访问方式异步传输同步突发传输NAND/PCcard控制器接口信号支持的存储器和访问方式NAND操作ECC计算PCcard/CompactFlash操作20FSMC模块的AHB接口AHB总线上的主设备通过它访问外部静态存储器32位的AHB读写访问转换成连续的8位读写操作,如果访问8位宽度存储器16位读写操作,如果访问16位宽度存储器FSMC模块的参考时钟:HCLK所有输出控制信号都在HCLK的上升沿改变可能的错误情况错误原因出错的影响CPUDMA对没有使能的Bank进行读写操作产生hardfault中断产生DMA传输中断该DMA通道自动关闭读写的NOR所在region禁止访问:FACCEN@FSMC_BCRx=0读写的PCCard对应的FSMC_CD(卡在检测)引脚电平为低21AHB操作宽度和存储器宽度DMA/CPU要求的AHB传输宽度8、16、32位外部存储器设备宽度8、16位普遍的传输规则CASEA:传输宽度等于存储器宽度没有问题CASEB:传输宽度大于存储器宽度分成若干次连续的小传输CASEC:传输宽度小于存储器宽度访问的存储设备有高低字节片选(SRAM、ROM、PSRAM)通过FSMC的字节选择控制BL[1:0]来访问对应字节访问的存储设备没有高低字节片选(NOR、NAND)不允许写操作允许读操作(硬件读回整个16位数据,用户根据需要使用相应字节)存储器宽度8位16位AHB访问宽度8位AC16位BA32位BB22FSMC配置寄存器配置NORFlash/PSRAM控制器FSMC_BCR1/2/3/4:控制寄存器FSMC_BTR1/2/3/4:时序寄存器FSMC_BWTR1/2