完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
MM32系列微控制器为用户提供了丰富的选择,可适用于工业控制、智能家电、建筑安防、医疗设备以及消费类电子产品等多方位嵌入式系统设计。在一些应用中,使用MM32F3270系列的片内SRAM还不够支持应用的需要,就要用外扩SRAM/PSRAM的方式来扩展。这时可以采用MM32F3270片内的FSMC接口来扩展SRAM/PSRAM。 因为SRAM和PSRAM的异步读写接口完全相同,只是时序方面需要根据不同的芯片所规定的参数不同而做相关的设置即可。本文接下来就使用SRAM来代指对SRAM和PSRAM芯片的支持。 前文已经介绍了MM32F3270的FMSC的接口功能与特色。结合MM32F3270 的FMSC外部接口信号,可使用异步方式访问SRAM,可以选用复用或非复用方式扩展SRAM,还可以通过配置实现外扩8位总线或16位总线接口的SRAM。 表1 FSMC控制器外部信号 MM32F3270系列MCU因为封装的原因,导致只有部分MCU产品可以通过硬件复用出全部或部分的FSMC接口的相关GPIO,才能支持外接SRAM存储器扩展存储空间。其中LQFP144引脚封装MCU芯片支持连接地址数据非复用和复用方式外扩并行SRAM;而LQFP100引脚封装芯片因地址线缩减,仅支持连接地址数据复用方式外扩并行SRAM。LQFP64因为无法引出足够的地址与数据总线,不支持外扩并行SRAM。 表2 MM32F3270不同封装芯片与SRAM接口 在此用MM32F3270扩展ISSI的SRAM :IS62WV51216,其原理框图如下: 图1 SRAM原理框图 表3 SRAM引脚信号 IS62WV51216的数据按 16 位的Half Word寻址,容量1M字节。IS62WV51216可以通过CS, OE, WR, UB, LB控制电路,结合Address与Data I/O实现数据的高速读写。 01 FSMC非复用方式控制SRAM的硬件设计 表4 SRAM信号对应的电源、复位与MCU接口的引脚说明 外部设备地址映像从FSMC的角度看,FMSC外扩寻址空间用于访问最多4个FSMC地址映射空间,可以用于访问4个NOR闪存或SRAM/PSRAM存储设备,并对应的有4个专用的片选FSMC_NE[4:1]。 外部存储器划分为固定大小为64M字节的四个存储块,见下图。 根据外部SRAM设计原理图: FSMC非复用方式控制SRAM的硬件设计 根据配置的接口电路配置GPIO初始化程序与FSMC初始化程序。 void FSMC_SRAM_Init(void) { FSMC_InitTypeDef FSMC_InitStructure; FSMC_NORSRAM_Bank_InitTypeDef FSMC_BankInitStructure; FSMC_NORSRAM_BankStructinit(&FSMC_BankInitStructure); FSMC_NORSRAMStructInit(&FSMC_InitStructure); RCC_AHB3PeriphClockCmd(RCC_AHB3ENR_FSMC, ENABLE); FSMC_BankInitStructure.FSMC_SMReadPipe = 0; FSMC_BankInitStructure.FSMC_ReadyMode = 0; FSMC_BankInitStructure.FSMC_WritePeriod = 7; FSMC_BankInitStructure.FSMC_WriteHoldTime = 0; FSMC_BankInitStructure.FSMC_AddrSetTime = 1; FSMC_BankInitStructure.FSMC_ReadPeriod = 9; FSMC_BankInitStructure.FSMC_DataWidth = FSMC_DataWidth_16bits; FSMC_NORSRAM_Bank_Init(&FSMC_BankInitStructure, FSMC_NORSRAM_BANK1); FSMC_InitStructure.FSMC_Mode = FSMC_Mode_NorFlash; FSMC_InitStructure.FSMC_TimingRegSelect = FSMC_TimingRegSelect_0; FSMC_InitStructure.FSMC_MemSize = FSMC_MemSize_64MB; FSMC_InitStructure.FSMC_MemType = FSMC_MemType_NorSRAM; FSMC_InitStructure.FSMC_AddrDataMode = FSMC_AddrDataDeMUX; FSMC_NORSRAMInit(&FSMC_InitStructure); } GPIO初始化 void SRAM_PIN_GPIO_Config(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_AHBPeriphClockCmd(RCC_AHBENR_GPIOB | RCC_AHBENR_GPIOC | RCC_AHBENR_GPIOA | RCC_AHBENR_GPIOD | RCC_AHBENR_GPIOE | RCC_AHBENR_GPIOF | RCC_AHBENR_GPIOG, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE); GPIO_PinAFConfig(GPIOD, GPIO_PinSource0, GPIO_AF_12); //DA2 GPIO_PinAFConfig(GPIOD, GPIO_PinSource1, GPIO_AF_12); //DA3 // ……部分代码请参考样例程序 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_Init(GPIOB, &GPIO_InitStructure); } 从选择的片选信号与FSMC外扩存储映像空间可以得出Bank1地址为0x64000000,使用该地址作为读写外部SRAM的基地址。#define Bank1_SRAM3_ADDR ((uint32_t)(0x64000000)) //used NE2 PG9 p = (vu16*)Bank1_SRAM3_ADDR; for (i = 0x00; i < BUFFERLEN; i++) { *p++ = (u16)writebuffer; } p = (vu16*)Bank1_SRAM3_ADDR; for (i = 0x00; i < BUFFERLEN; i++) { readbbuffer = *p++; } 读写外部SRAM与读写片内SRAM是一样的操作,不同的是从不同的对应地址读写数据。通过上述代码可以观察到写入数据与读出的数据相同,表明配置准确,Demo实验成功。 Demo程序可登录MindMotion的官网下载MM32F3270 lib_Samples: https://www.mindmotion.com.cn/pr ... instream/mm32f3270/ 工程路径如下: ~MM32F327x_SamplesLibSamplesFSMCFSMC_SRAM 下章的题目为《使用MM32F3270 的FSMC驱动外部NOR Flash》讲解通过FSMC外扩并口Flash的实现。 |
|
相关推荐
|
|
只有小组成员才能发言,加入小组>>
2249个成员聚集在这个小组
加入小组灵动微电子MM32全系列MCU产品应用手册,库函数和例程和选型表
11703 浏览 3 评论
【MM32 eMiniBoard试用连载】+基于OLED12864的GUI---U8G2
5930 浏览 1 评论
【MM32 eMiniBoard试用连载】移植RT-Thread至MM32L373PS
10965 浏览 0 评论
【MM32 eMiniBoard测评报告】+ 开箱 + 初探
4577 浏览 1 评论
灵动微课堂(第106讲) | MM32 USB功能学习笔记 —— WinUSB设备
4302 浏览 1 评论
[MM32软件] MM32F002使用内部flash存储数据怎么操作?
981浏览 1评论
806浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-27 22:00 , Processed in 0.587226 second(s), Total 67, Slave 50 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号