在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

使用MM32F3270 FSMC驅動外部NOR Flash

jf_pJlTbmA9 ? 來源:靈動MM32MCU ? 作者:靈動MM32MCU ? 2023-09-21 17:37 ? 次閱讀

MM32系列微控制器為用戶提供了豐富的選擇,可適用于工業控制智能家電、建筑安防、醫療設備以及消費類電子產品等多方位嵌入式系統設計。在某些應用中,需要較大容量的存儲空間用于存儲數據;這時可以通過SPI 外擴NOR Flash,NAND Flash, 或者通過SDIO擴展SD Card或TF-Card。但有些需要高速存儲數據,上述方式還是不夠快速,這時可以使用MM32F3270系列的FSMC來外擴并行NOR Flash來實現。

并行NOR Flash與并行SRAM和PSRAM的讀寫接口大部分相同,但NOR Flash的寫入速度與SRAM和PSRAM比較,相對較慢,需要通過NWAIT 信號檢查NOR Flash的操作狀態,并做一些等待,相應的時序需要根據不同的NOR Flash芯片所規定的參數而做相應的設置即可。

本文接下來就使用MM32F3270外掛S29GL128P NOR Flash芯片來演示FSMC對NOR Flash芯片的設置與讀寫。

前文已經介紹了MM32F3270的FSMC的接口功能與特色。結合MM32F3270 的FSMC外部接口信號,可使用異步方式訪問NOR Flash,可以選用復用或非復用方式擴展NOR Flash,還可以通過配置實現外擴8位總線或16位總線接口的NOR Flash。

wKgZomUD8zqAZJh8AAAid0QA-Go866.png 表1:FSMC控制器外部信號

MM32F3270系列MCU因為封裝的原因,導致只有部分MCU產品可以通過硬件復用出全部或部分的FSMC接口的相關GPIO;外擴NOR Flash也只有使用 LQFP144引腳封裝MCU芯片才能支持連接地址數據非復用和復用方式外擴并行NOR Flash;而LQFP100引腳封裝芯片因地址線縮減,僅支持連接地址數據復用方式外擴并行NOR Flash。LQFP64因為無法引出足夠的地址與數據總線,同樣不支持外擴并行NOR Flash。

wKgZomUD89KAFD08AAAavXOcho8603.png 表2:MM32F3270不同封裝芯片與NOR Flash接口

目前市場上非復用型16位數據總線接口的NOR Flash也是較為普遍,下面針對非復用方式,介紹MCU與NOR Flash的硬件原理圖設計和軟件寄存器配置。

在此用MM32F3270的FSMC接口擴展S29GL128P NOR Flash,其原理框圖如下:

wKgaomUD89SAIoZmAAJA-neW5uY909.png 圖1:NOR Flash原理框圖

S29GL128P的數據按 16 位的Half Word尋址,容量128M Bit, 16M字節,從芯片手冊中可以查詢到S29GL128P的引腳功能描述如下:

wKgZomUD89WAcf6qAAUO9sl4L9o720.png 表3:NOR Flash引腳信號

S29GL128P可以通過CS, OE, WR, WP#, RY/BY#控制電路,結合Address與Data I/O實現對NOR Flash的讀寫操作。

1、FSMC非復用方式控制NOR Flash的硬件設計

wKgZomUD89aAQj5xAABpf8qvi9c372.png 表4:NOR Flash數據, 地址, 讀寫信號與MCU接口的引腳說明

外部設備地址映像從FSMC的角度看,FSMC外擴尋址空間用于訪問最多4個FSMC地址映射空間,可以用于訪問4個NOR閃存或SRAM/PSRAM存儲設備,并對應的有4個專用的片選FSMC_NE[4:1]。

外部存儲器劃分為固定大小為64M字節的四個存儲塊,見下圖。

wKgaomUD89iAccUZAAAMsiGarK0040.png

存儲區塊與片選信號對應關系:

wKgZomUD89mAb5WVAAAPxAV-oxI832.png

HADDR是需要轉換到外部存儲器的內部AHB地址線。HADDR[25:0]包含外部存儲器地址。HADDR是字節地址,而存儲器訪問不都是按字節訪問,因此接到存儲器的地址線依存儲器的數據寬度有所不同,如下表:

wKgaomUD89uAU1mpAAASelpXpcU760.png

對于16位寬度的外部存儲器,FSMC將在內部使用HADDR[25:1]產生外部存儲器的地址FSMC_A[24:0]。不論外部存儲器的寬度是多少(16位或8位),FSMC_A[0]始終應該連到外部存儲器的地址線A[0]。

根據外部NOR Flash設計原理圖:

wKgaomUD89-AOyJLAAmS5t-MAgo357.png

2、FSMC非復用方式控制NOR Flash的程序設計

根據配置的接口電路配置GPIO初始化程序與FSMC初始化程序。

void FSMC_NOR_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   = 15;
    FSMC_BankInitStructure.FSMC_WriteHoldTime = 3;
    FSMC_BankInitStructure.FSMC_AddrSetTime   = 3;
    FSMC_BankInitStructure.FSMC_ReadPeriod    = 15;
    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_FLASH;
    FSMC_InitStructure.FSMC_AddrDataMode = FSMC_AddrDataDeMUX;
    FSMC_NORSRAMInit( FSMC_InitStructure);
}

GPIO初始化

void FSMC_GPIO_Init(void)
{
    GPIO_InitTypeDef GPIO_InitStructure;
    GPIO_StructInit( GPIO_InitStructure);
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);
    RCC_AHBPeriphClockCmd(RCC_AHBENR_GPIOB | RCC_AHBENR_GPIOC | 
    RCC_AHBENR_GPIOA | RCC_AHBENR_GPIOD | RCC_AHBENR_GPIOE | 
    RCC_AHBENR_GPIOF | RCC_AHBENR_GPIOG, ENABLE);

    GPIO_PinAFConfig(GPIOD, GPIO_PinSource4, GPIO_AF_12);  //NOE
    GPIO_PinAFConfig(GPIOD, GPIO_PinSource5, GPIO_AF_12);  //NWE
    GPIO_PinAFConfig(GPIOD, GPIO_PinSource6, GPIO_AF_12);  //NWAIT
    GPIO_PinAFConfig(GPIOD, GPIO_PinSource11, GPIO_AF_12); //A16
    GPIO_PinAFConfig(GPIOD, GPIO_PinSource12, GPIO_AF_12); //A17
    GPIO_PinAFConfig(GPIOD, GPIO_PinSource13, GPIO_AF_12); //A18
    GPIO_PinAFConfig(GPIOD, GPIO_PinSource14, GPIO_AF_12); //D0
    GPIO_PinAFConfig(GPIOD, GPIO_PinSource15, GPIO_AF_12); //D1
    //省略部分代碼
    GPIO_PinAFConfig(GPIOF, GPIO_PinSource0, GPIO_AF_12);  //A0
    GPIO_PinAFConfig(GPIOF, GPIO_PinSource1, GPIO_AF_12);  //A1
    GPIO_PinAFConfig(GPIOF, GPIO_PinSource2, GPIO_AF_12);  //A2
    GPIO_PinAFConfig(GPIOF, GPIO_PinSource3, GPIO_AF_12);  //A3
    //省略部分代碼
    GPIO_InitStructure.GPIO_Pin  =  GPIO_Pin_All;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
    GPIO_Init(GPIOD,  GPIO_InitStructure);

    GPIO_InitStructure.GPIO_Pin  =  GPIO_Pin_6;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_FLOATING;
    GPIO_Init(GPIOD,  GPIO_InitStructure);

    //省略部分代碼

}

從選擇的片選信號與FSMC外擴存儲映像空間可以得出Bank2地址為0x64000000,使用該地址作為讀寫外部NOR Flash的基地址。

#define NOR_FLASH_START_ADDR       ((u32)0x64000000)
#define NOR_FLASH_END_ADDR         ((u32)0x67FFFFFF)
//讀一個半字
u16 FSMC_NOR_ReadHalfWord(u32 ReadAddr)
{
    NOR_WRITE(ADDR_SHIFT(0x00555), 0x00AA);
    NOR_WRITE(ADDR_SHIFT(0x002AA), 0x0055);
    NOR_WRITE((NOR_FLASH_START_ADDR + ReadAddr), 0x00F0 );
/* exit autoselect (write reset command) */
    return (*(vu16*)((NOR_FLASH_START_ADDR + ReadAddr)));
}
//連續讀一塊半字數據
void FSMC_NOR_ReadBuffer(u16* pBuffer, u32 ReadAddr, u32 NumHalfwordToRead)
{
    NOR_WRITE(ADDR_SHIFT(0x0555), 0x00AA);
    NOR_WRITE(ADDR_SHIFT(0x02AA), 0x0055);
    NOR_WRITE((NOR_FLASH_START_ADDR + ReadAddr), 0x00F0);
/* exit autoselect (write reset command) */
    for(; NumHalfwordToRead != 0x00; NumHalfwordToRead--) {
        // Read a Halfword from the NOR
        *pBuffer++ = *(vu16*)((NOR_FLASH_START_ADDR + ReadAddr));
        ReadAddr = ReadAddr + 2;
    }
}

讀寫外部NOR Flash與讀寫外部SRAM的操作,地址尋址方式是一樣的,但NOR Flash的寫數據有較大的不同。

以單個Word編程為例,如下為寫單個Word的流程圖與實現代碼:

wKgaomUD8-GATKFvAAGOoGAeqs4915.png

NOR_Status FSMC_NOR_WriteHalfWord(u32 WriteAddr, u16 Data)
{
    NOR_WRITE(ADDR_SHIFT(0x0555), 0x00AA);
    NOR_WRITE(ADDR_SHIFT(0x02AA), 0x0055);
    NOR_WRITE(ADDR_SHIFT(0x0555), 0x00A0);
    NOR_WRITE((NOR_FLASH_START_ADDR + WriteAddr), Data);

    return (FSMC_NOR_GetStatus(Program_Timeout));
}

通過MindMotion的官網下載MM32F3270 lib_Samples:

工程路徑如下:

~MM32F327x_SamplesLibSamplesFSMCFSMC_NOR

可以看到詳細的樣例與功能操作。

下章的題目為《使用MM32F3270 的FSMC驅動外部OLED》講解通過FSMC外擴并口OLED的實現。

來源:靈動MM32MCU
免責聲明:本文為轉載文章,轉載此文目的在于傳遞更多信息,版權歸原作者所有。本文所用視頻、圖片、文字如涉及作品版權問題,請聯系小編進行處理

審核編輯 黃宇

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 芯片
    +關注

    關注

    455

    文章

    50816

    瀏覽量

    423613
  • NOR flash
    +關注

    關注

    2

    文章

    91

    瀏覽量

    23017
  • FSMC
    +關注

    關注

    0

    文章

    55

    瀏覽量

    38151
收藏 人收藏

    評論

    相關推薦

    靈動微課堂 (第188講) | 使用MM32F3270 FSMC驅動TFT-LCD

    的需求在全世界范圍內極大增長。本文介紹了如何使用 MM32F3270FSMC(靈活的靜態存儲控制器)來驅動8080接口的TFT-LCD。 01 MM32F3270
    發表于 10-29 17:12

    MM32F3270系列32位MCU的特點有哪些

    上海靈動微電子推出全新主流型MM32F3270系列32位MCU,此款MM32F3270系列是基于M3內核的32位微控制器,MM32F3270適用于要求高集成度的高性能控制領域,如:工業控制、消防監控
    發表于 11-03 07:20

    靈動微課堂 (第189講) | 使用MM32F3270 FSMC驅動SRAM

    _SRAM\下章的題目為《使用MM32F3270FSMC驅動外部NOR Flash》講解通過
    發表于 11-10 09:22

    靈動微課堂 (第190講) | 使用MM32F3270 FSMC驅動外部NOR Flash

    演示FSMCNOR Flash芯片的設置與讀寫。前文已經介紹了MM32F3270FSMC的接口功能與特色。結合
    發表于 11-19 09:29

    靈動微課堂 (第191講) | 使用MM32F3270 FSMC驅動OLED

    了如何使用 MM32F3270FSMC(靈活的靜態存儲控制器)來驅動6800接口的OLED。1//MM32F3270 FSMC的簡要介紹
    發表于 11-29 10:45

    如何采用MM32F3270單片機的FSMC接口來擴展SRAM

    夠支持應用的需要,就要用外擴SRAM/PSRAM的方式來擴展。這時可以采用MM32F3270片內的FSMC接口來擴展SRAM/PSRAM。 ? 靈動微MM32F3270系列32位MCU是基于M3內核
    發表于 11-19 16:32 ?655次閱讀

    【國產MCU移植】MM32F3270 EVBoard

    【國產MCU移植】MM32F3270 EVBoard
    發表于 12-03 17:21 ?5次下載
    【國產MCU移植】<b class='flag-5'>MM32F3270</b> EVBoard

    MM32F3270控制器的主要特點

    靈動微全新主流型MM32F3270系列32位MCU現已開始批量供貨。該系列MCU搭載了M3內核,主頻最高可達120兆赫茲,提供最高512KB Flash和128KB SRAM,并集成了豐富的通信接口
    發表于 12-07 17:26 ?1245次閱讀

    使用MM32F3270單片機FSMC驅動外部NORFlash

    還是不夠快速,這時可以使用MM32F3270系列的FSMC來外擴并行NOR Flash來實現。 ? 并行NOR
    發表于 12-07 17:31 ?805次閱讀

    基于MM32F3270 以太網 Client使用

    接下來給大家介紹基于TCP包的通訊。內容分為基于MM32F3270以太網Client的使用與基于MM32F3270以太網Server的使用。
    發表于 02-08 15:10 ?0次下載
    基于<b class='flag-5'>MM32F3270</b> 以太網 Client使用

    MM32F3270 ADC注入通道

    MM32F3270 ADC注入通道
    的頭像 發表于 09-27 15:59 ?1000次閱讀
    <b class='flag-5'>MM32F3270</b> ADC注入通道

    使用MM32F3270的SDIO驅動SD卡

    使用MM32F3270的SDIO驅動SD卡
    的頭像 發表于 09-27 15:56 ?747次閱讀
    使用<b class='flag-5'>MM32F3270</b>的SDIO<b class='flag-5'>驅動</b>SD卡

    使用MM32F3270 FSMC驅動OLED

    使用MM32F3270 FSMC驅動OLED
    的頭像 發表于 09-27 15:30 ?954次閱讀
    使用<b class='flag-5'>MM32F3270</b> <b class='flag-5'>FSMC</b><b class='flag-5'>驅動</b>OLED

    使用MM32F3270 FSMC驅動TFT-LCD

    使用MM32F3270 FSMC驅動TFT-LCD
    的頭像 發表于 09-27 15:34 ?1041次閱讀
    使用<b class='flag-5'>MM32F3270</b> <b class='flag-5'>FSMC</b><b class='flag-5'>驅動</b>TFT-LCD

    基于MM32F3270以太網Client使用

    基于MM32F3270以太網Client使用
    的頭像 發表于 09-27 15:44 ?708次閱讀
    基于<b class='flag-5'>MM32F3270</b>以太網Client使用
    主站蜘蛛池模板: 天天搞天天爽| 97天天摸天天碰天天爽| 丁香六月激情综合| 性欧美黑人xxxx| 久久综合中文字幕| 女色窝人体色77777| 久久99国产精品免费观看| 欧美特黄视频在线观看| 亚洲午夜精品久久久久久成年| 又黄又免费的网站| 婷婷激情电影| se94se欧美| 好大好硬好爽免费视频| 色综合久久久久久久久五月性色| 在线视频一区二区三区| 色综合综合色综合色综合| www.99在线观看| 国产精品任我爽爆在线播放6080| 手机在线黄色| 午夜看片影院在线观看| 性猛交╳xxx乱大交| 鲁一鲁色一色| 国产精品午夜久久| 天堂网www最新版在线资源| 一级看片免费视频| 亚洲视频一区在线| 免费人成激情视频在线观看冫 | 国产成人mv在线观看入口视频 | 欧美性极品hd高清视频| 三级免费黄录像| 手机看片免费永久在线观看| xxxx性bbbb| video另类蛇交| 男生脱美女内裤内衣动态图| 国模精品一区二区| 国内精品哆啪啪| 久久久久久久性潮| 免费 在线观看 视频| 欧美三级精品| 白浆喷射| 女人张开腿 让男人桶视频|