一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

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

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

3天內不再提示

GD32的FLASH讀、擦除、寫操作

撞上電子 ? 2024-02-19 12:46 ? 次閱讀

一,GD32的flash特征

1、在flash的前256K字節(jié)空間內,CPU執(zhí)行指令零等待;在此范圍外,CPU讀取指令存在較長延時;

2、對于flash大于512KB(不包括等于512KB)的GD32F10x_CL和GD32F10x_XD,使用了兩片閃存;前512KB容量在第一片閃存(bank0)中,后續(xù)的容量在第二片閃存(bank1)中;

3、對于flash容量小于等于512KB的GD32F10x_CL和GD32F10x_HD,只使用了bank0;

4、對 于 GD32F10x_MD , 閃 存 頁 大 小 為 1KB 。GD32F10x_CL 和 GD32F10x_HD ,GD32F10x_XD,bank0的閃存頁大小為2KB,bank1的閃存頁大小為4KB;

5、支持32位整字或16位半字編程,頁擦除和整片擦除操作;

二,GD32的flash結構

1、GD32F10x_MD

d596480a-cee1-11ee-9118-92fbcf53809c.png

GD32F10x_CL,GD32F10x_HD 和 GD32F10x_XD

d5d1b67e-cee1-11ee-9118-92fbcf53809c.png

三,GD32的flash讀操作

flash可以像普通存儲空間一樣直接尋址訪問。

value=*(uint32_t*)FlashAddr;

uint16_t IAP_ReadFlag(void){ return *(volatile uint16_t*)(FLASH_ADDR); }

四,GD32的flash擦除操作

每一頁可以被獨立擦除,步驟如下:

1,確保FMC_CTLx寄存器不處于鎖定狀態(tài);

2,檢查FMC_STATx寄存器的BUSY位來判定閃存是否正處于擦寫訪問狀態(tài),若BUSY位為1,則需等待該操作結束,BUSY位變?yōu)?;

3,置位FMC_CTLx寄存器的PER位;

4,將待擦除頁的絕對地址(0x08XX XXXX)寫到FMC_ADDRx寄存器;

5,通過將FMC_CTLx寄存器的START位置1來發(fā)送頁擦除命令到FMC;

6,等待擦除指令執(zhí)行完畢,F(xiàn)MC_STATx寄存器的BUSY位清0;

7,如果需要,使用DBUS讀并驗證該頁是否擦除成功。

void fmc_erase_page(uint32_t Page_Address){ fmc_unlock(); //fmc解鎖 /* clear all pending flags */ fmc_flag_clear(FMC_FLAG_BANK0_END); fmc_flag_clear(FMC_FLAG_BANK0_WPERR); fmc_flag_clear(FMC_FLAG_BANK0_PGERR);
/* erase the flash pages */ fmc_page_erase(Page_Address);
/* clear all pending flags */ fmc_flag_clear(FMC_FLAG_BANK0_END); fmc_flag_clear(FMC_FLAG_BANK0_WPERR); fmc_flag_clear(FMC_FLAG_BANK0_PGERR);
fmc_lock(); //fmc上鎖}

要擦除連續(xù)的幾頁:

void fmc_erase_pages(void){uint32_terase_counter;
/* unlock the flash program/erase controller */ fmc_unlock(); /* clear all pending flags */ fmc_flag_clear(FMC_FLAG_BANK0_END); fmc_flag_clear(FMC_FLAG_BANK0_WPERR); fmc_flag_clear(FMC_FLAG_BANK0_PGERR);
/* erase the flash pages */ for(erase_counter = 0; erase_counter < page_num; erase_counter++){ fmc_page_erase(FMC_WRITE_START_ADDR + (FMC_PAGE_SIZE * erase_counter)); fmc_flag_clear(FMC_FLAG_BANK0_END); fmc_flag_clear(FMC_FLAG_BANK0_WPERR); fmc_flag_clear(FMC_FLAG_BANK0_PGERR); }

/* lock the main FMC after the erase operation */ fmc_lock();}

全部擦除:

void fmc_erase_page(uint32_t Page_Address){ fmc_unlock(); //fmc解鎖 /* clear all pending flags */ fmc_flag_clear(FMC_FLAG_BANK0_END); fmc_flag_clear(FMC_FLAG_BANK0_WPERR); fmc_flag_clear(FMC_FLAG_BANK0_PGERR);
/* erase whole chip */ fmc_mass_erase();
/* clear all pending flags */ fmc_flag_clear(FMC_FLAG_BANK0_END); fmc_flag_clear(FMC_FLAG_BANK0_WPERR); fmc_flag_clear(FMC_FLAG_BANK0_PGERR);
fmc_lock(); //fmc上鎖}

五,flash寫

往flash的某個地址寫入數(shù)據(jù)前,一般要先擦除該地址。

16位半字編程:

void IAP_WriteFlag(uint16_t flag){ fmc_unlock(); fmc_page_erase(IAP_FLAG_ADDR); fmc_halfword_program(IAP_FLAG_ADDR,flag); fmc_lock();}

32位整字編程:

void fmc_program(void){ /* unlock the flash program/erase controller */ fmc_unlock();
address = FMC_WRITE_START_ADDR; /* program flash */ while(address < FMC_WRITE_END_ADDR){ fmc_word_program(address, data0); address += 4; fmc_flag_clear(FMC_FLAG_BANK0_END); fmc_flag_clear(FMC_FLAG_BANK0_WPERR); fmc_flag_clear(FMC_FLAG_BANK0_PGERR); } /* lock the main FMC after the program operation */ fmc_lock();}

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

    關注

    10

    文章

    1656

    瀏覽量

    150611
  • cpu
    cpu
    +關注

    關注

    68

    文章

    11011

    瀏覽量

    215185
  • GD32
    +關注

    關注

    7

    文章

    418

    瀏覽量

    25028
收藏 人收藏

    評論

    相關推薦

    GD32H757Z海棠派開發(fā)板使用手冊】第四講 FMC-片內Flash擦寫實驗

    FMC即Flash控制器,其提供了片上Flash操作所需要的所有功能,在GD32H7XX系列MCU中,具有高達3840KB字節(jié)的片上閃存可用于存儲指令或數(shù)據(jù)。FMC也提供了扇區(qū)
    的頭像 發(fā)表于 04-19 10:09 ?1742次閱讀
    【<b class='flag-5'>GD</b>32H757Z海棠派開發(fā)板使用手冊】第四講 FMC-片內<b class='flag-5'>Flash</b>擦寫<b class='flag-5'>讀</b>實驗

    GD32 MCU 入門教程】GD32 MCU 常見外設介紹(12)FMC 模塊介紹

    閃存控制器(FMC),提供了片上閃存需要的所有功能。FMC 也提供了頁擦除,整片擦除,以及32 位整字或 16 位半字編程閃存等操作。 GD32 MCU 支持不同類型編程的具體說明如下
    的頭像 發(fā)表于 08-21 09:56 ?1783次閱讀
    <b class='flag-5'>GD32</b> MCU 入門教程】<b class='flag-5'>GD32</b> MCU 常見外設介紹(12)FMC 模塊介紹

    GD32無法燒的原因?

    GD32無法燒
    發(fā)表于 07-26 07:09

    什么是GD32

    一、前言什么GD32?GD32是國內開發(fā)的一款單片機,據(jù)說開發(fā)的人員是來自ST公司的,GD32也是以STM32作為模板做出來的。所以GD32和STM32有很多地方都是一樣的,不過
    發(fā)表于 08-12 07:46

    「必看干貨」淺談GD32與STM32之間的區(qū)別

    延長上電時間 ,配置(2ms) 。4.GD32提高了相同工作頻率下的代碼執(zhí)行速度,所以GD32的_NOP()時間比STM32更加短,所以不使用定時器做延時時要注意修改。5.GD32的flash
    發(fā)表于 09-26 14:28

    JFlash解除GD32保護的方法

    JFlash解除GD32保護如果用戶添加了保護或者誤操作等導致的下載不了,可以先進行解鎖嘗試,步驟如下:1、打開J-Flash V6.4
    發(fā)表于 11-04 09:10

    GD32操作FLASH時有哪些注意事項呢

    GD32操作FLASH時注意事項GD32操作其內部FLASH時,發(fā)現(xiàn)連續(xù)存儲兩個數(shù)據(jù),并且連續(xù)
    發(fā)表于 01-26 07:38

    GD32替換STM32?這些坑你別踩...

    味著單片機代碼運行的速度會更快,項目中如果需要進行刷屏,開方運算,電機控制等操作,GD是一個不錯的選擇。3、供電外部供電:GD32外部供電范圍是2.6~3.6V,STM32外部供電范圍是2~3.6V。
    發(fā)表于 03-31 10:51

    分享在IAR環(huán)境下GD32flash下載算法的一些理解

    各個字段的地址分配,如.data, .bss段等,此處內容比較簡單,大家開發(fā)時也都會涉及到,當有新增SDRAM,和外部flash時,可以修改此文件,以及定義字段等操作??偨Y此次就簡單描述下GD32
    發(fā)表于 09-30 11:05

    GD32 MCU原理及固件庫開發(fā)指南》 + 初感悟

    庫開發(fā)能夠避免每次操作寄存器時去查芯片的應用手冊,這樣能很好地提高開發(fā)效率。GD32 MCU原理固件庫開發(fā)指南這本書它詳細描述了基本所有外設的底層驅動程序和API接口,可以讓我快速地明白各個API函數(shù)
    發(fā)表于 03-31 22:11

    Linux下flash操作、擦除步驟

    的一段區(qū)域。 需要注意的是,在對NOR FLASH進行讀寫數(shù)據(jù)時,需要參考對應的datasheet,例如這里選用的NOR FLASH、、擦除
    發(fā)表于 06-30 09:49 ?1.5w次閱讀
    Linux下<b class='flag-5'>flash</b><b class='flag-5'>操作</b><b class='flag-5'>讀</b>、<b class='flag-5'>寫</b>、<b class='flag-5'>擦除</b>步驟

    如何使用QSPI Flash控制器開發(fā)板上的 QSPI Flash進行操作

    學習內容 本文首先介紹Flash和QSPI Flash控制器的相關內容,然后使用 QSPI Flash 控制器,開發(fā)板上的 QSPI Flash 進行
    的頭像 發(fā)表于 06-10 17:08 ?1.5w次閱讀
    如何使用QSPI <b class='flag-5'>Flash</b>控制器開發(fā)板上的 QSPI <b class='flag-5'>Flash</b>進行<b class='flag-5'>寫</b><b class='flag-5'>讀</b><b class='flag-5'>操作</b>

    GD32操作FLASH時注意事項

    GD32操作FLASH時注意事項GD32操作其內部FLASH時,發(fā)現(xiàn)連續(xù)存儲兩個數(shù)據(jù),并且連續(xù)
    發(fā)表于 12-02 10:36 ?14次下載
    <b class='flag-5'>GD32</b><b class='flag-5'>操作</b><b class='flag-5'>FLASH</b>時注意事項

    flash芯片時為什么需要先擦除?

    flash芯片時為什么需要先擦除? 在講解為什么需要先擦除Flash芯片之前,先來了解一下Flash
    的頭像 發(fā)表于 10-29 17:24 ?4822次閱讀

    Nor Flash編程和擦除操作的詳細流程

    Nor Flash 中的編程和擦除操作涉及寫入數(shù)據(jù)和擦除存儲單元的特定步驟。
    的頭像 發(fā)表于 12-05 15:19 ?1885次閱讀