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

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

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

3天內(nèi)不再提示

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

聚沃科技 ? 2024-08-21 09:56 ? 次閱讀

12.1.FMC 基礎知識

閃存控制器(FMC),提供了片上閃存需要的所有功能。FMC 也提供了頁擦除,整片擦除,以及32 位整字或 16 位半字編程閃存等操作。 GD32 MCU 支持不同類型編程的具體說明如下表 GD32 MCU 不同系列編程區(qū)別所示。

輸入圖片說明

12.2.FMC 功能

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

支持 CPU 執(zhí)行指令零等待區(qū)域(code area)和非零等待區(qū)域(data area); 大小為 16 字節(jié)的可選字節(jié)塊可根據(jù)用戶需求配置;

具有安全保護狀態(tài),可阻止對代碼或數(shù)據(jù)的非法讀訪問;

相關術(shù)語說明

GD32F10x 和 F30x 分別有 MD(中容量) 、HD(大容量)、XD(超大容量) 、CL(互聯(lián)型)系列,不同的系列外設資源有差異,使用固件庫(Firmware)也要作相應的選擇和定義。 中容量產(chǎn)品指Flash 容量為小于 256K 字節(jié)的系列;

大容量產(chǎn)品指 Flash 容量為 256K 至 512K 字節(jié)之間的 系列; 超大容量產(chǎn)品指 Flash 容量為 768K 至 3072K 字節(jié)之間的系列。

GD32F10X/F30X 系列容量匯總

輸入圖片說明

不同容量工程選擇說明,固件庫是通過宏定義來區(qū)分的。

輸入圖片說明

不同的系列 MCU flash 架構(gòu)不一樣,其中 GD32F 系列的 MCU flash 分 code area 和 data area, code area CPU 執(zhí)行指令是零等待, GD32E 系列 flash 不分 code area 和 data are,但都要插入等待周期。 GD32 系列 Code area&Data area 匯總

輸入圖片說明

讀操作 閃存可以像普通存儲空間一樣直接尋址訪問。對閃存取指令和取數(shù)據(jù)分別使用 CPU 的 IBUS 或 DBUS總線。

代碼操作如:

uint32_t readflash[3] readflash [0] = *(__IO uint32_t*)(0x8004000); readflash [1] = *(__IO uint32_t*)((0x8004004); readflash [2] = *(__IO uint32_t*)((0x8004008);

頁擦除

FMC 的頁擦除功能使得主存儲閃存的頁內(nèi)容初始化為高電平。 每一頁都可以被獨立擦除,而不影響其他頁內(nèi)容。

FMC 擦除頁步驟如下:

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

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

? 置位 FMC_CTLx 寄存器的 PER 位;

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

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

? 等待擦除指令執(zhí)行完畢, FMC_STATx 寄存器的 BUSY 位清 0;

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

輸入圖片說明

整片擦除

FMC 提供了整片擦除功能可以初始化主存儲閃存塊的內(nèi)容。當設置 MER0 為 1 時,擦除過程僅作用于 Bank0,當設置 MER1 為 1 時,擦除過程僅作用于 Bank1,當設置 MER0 和 MER1 為 1 時,擦除過程作用于整片閃存。

整片擦除操作,寄存器設置具體步驟如下:

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

? 等待 FMC_STATx 寄存器的 BUSY 位變?yōu)?0;

? 如果單獨擦除 Bank0,置位 FMC_CTL0 寄存器的 MER 位。如果單獨擦除 Bank1,置位 FMC_CTL1 寄存器的 MER 位。如果整片擦除閃存,同時置位 FMC_CTL0 和 FMC_CTL1 寄存器的 MER 位;

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

? 等待擦除指令執(zhí)行完畢, FMC_STATx 寄存器的 BUSY 位清 0;

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

輸入圖片說明

字編程操作

FMC 提供了一個 64 位、32 位整字/16 位半字編程功能,用來修改主存儲閃存塊內(nèi)容。

編程操作使用各寄存器流程如下。

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

? 等待 FMC_STATx 寄存器的 BUSY 位變?yōu)?0;

? 置位 FMC_CTLx 寄存器的 PG 位;

? DBUS 寫一個 32 位整字/16 位半字到目的絕對地址(0x08XXXXXX);

? 等待編程指令執(zhí)行完畢, FMC_STATx 寄存器的 BUSY 位清 0;

? 如果需要,使用 DBUS 讀并驗證是否編程成功。

輸入圖片說明

可選字節(jié)塊擦除

FMC 提供了一個擦除功能用來初始化閃存中的可選字節(jié)塊。

可選字節(jié)塊擦除過程如下所示。

? 確保 FMC_CTL0 寄存器不處于鎖定狀態(tài);

? 等待 FMC_STAT0 寄存器的 BUSY 位變?yōu)?0;

? 解鎖 FMC_CTL0 寄存器的可選字節(jié)操作位;

? 等待 FMC_CTL0 寄存器的 OBWEN 位置 1;

? 置位 FMC_CTL0 寄存器的 OBER 位;

? 通過將 FMC_CTL0 寄存器的 START 位置 1 來發(fā)送可選字節(jié)塊擦除命令到 FMC;

? 等待擦除指令執(zhí)行完畢, FMC_STAT 寄存器的 BUSY 位清 0;

? 如果需要,使用 DBUS 讀并驗證是否擦除成功。當可選字節(jié)塊擦除成功執(zhí)行, FMC_STAT 寄存器的 ENDF 位置位。若 FMC_CTL0 寄存器的 ENDIE 位被置 1, FMC 將觸發(fā)一個中斷。

可選字節(jié)塊編程

FMC 提供了一個 32 位整字/16 位半字編程功能,可用來修改可選字節(jié)塊內(nèi)容。可選字節(jié)塊共有8 對可選字節(jié)。每對可選字節(jié)的高字節(jié)是低字節(jié)的補。當?shù)妥止?jié)被修改時, FMC 自動生成該選項字節(jié)的高字節(jié)。

字節(jié)塊編程操作過程如下。

? 確保 FMC_CTL0 寄存器不處于鎖定狀態(tài);

? 等待 FMC_STAT0 寄存器的 BUSY 位變?yōu)?0;

? 解鎖 FMC_CTL0 寄存器的可選字節(jié)操作位;

? 等待 FMC_CTL0 寄存器的 OBWEN 位置 1;

? 置位 FMC_CTL0 寄存器的 OBPG 位;

? DBUS 寫一個 32 位整字/16 位半字到目的地址;

? 等待編程指令執(zhí)行完畢, FMC_STAT 寄存器的 BUSY 位清 0;

可選字節(jié)塊說明

每次系統(tǒng)復位后,閃存的可選字節(jié)塊被重加載到 FMC_OBSTAT 和 FMC_WP 寄存器,可選字節(jié)生效。可選字節(jié)的補字節(jié)具體為可選字節(jié)取反。當可選字節(jié)被重裝載時,如果可選字節(jié)的補字節(jié)和可選字節(jié)不匹配, FMC_OBSTAT 寄存器的 OBERR 位將被置 1,可選字節(jié)被強制設置為 0xFF。若可選字節(jié)和其補字節(jié)同為 0xFF,則 OBERR 位不置位。

頁擦除/編程保護

FMC 的頁擦除/編程保護功能可以阻止對閃存的意外操作。當 FMC 對被保護頁進行頁擦除或編程操作時,操作本身無效且 FMC_STAT 寄存器的 WPERR 位將被置 1。如果 WPERR 位被置 1 且 FMC_CTL 寄存器的 ERRIE 位也被置 1 來使能相應的中斷, FMC 將觸發(fā)閃存操作出錯中斷,等待 CPU 處理。配置可選字節(jié)塊的 WP [31:0]某位為 0 可以單獨使能某幾頁的保護功能。如果在可選字節(jié)塊執(zhí)行了擦除操作,所有的閃存頁擦除和編程保護功能都將失效。當可選字節(jié)的 WP 被改變時,需要系統(tǒng)復位使之生效。

12.3.軟件配置說明

FMC 以 Program 配置為例來說明

Demo 一 (flash 編程)

demo 功能說明: MCU 上電啟動后,對 MCU flash 的 0x8004000~ 0x08004800 的 2K 的區(qū)域?qū)?0x01234567 數(shù)據(jù),當編寫錯誤的時候,LED 會亮。

軟件配置步驟如下:

1)配置 led 指示燈;

gd_eval_led_init(LED2); gd_eval_led_init(LED3);

2)進行 page erase

void fmc_erase_pages(void) { uint32_t EraseCounter; fmc_unlock(); //FMC 解鎖 fmc_flag_clear(FMC_FLAG_BANK0_END | FMC_FLAG_BANK0_WPERR | FMC_FLAG_BANK0_PGERR ); //清除標志 for(EraseCounter = 0; EraseCounter < PageNum; EraseCounter++){ fmc_page_erase(FMC_WRITE_START_ADDR + (FMC_PAGE_SIZE * EraseCounter)); //page 擦除 fmc_flag_clear(FMC_FLAG_BANK0_END | FMC_FLAG_BANK0_WPERR | FMC_FLAG_BANK0_PGERR ); //清除標志 } fmc_lock(); //FMC 加鎖 }

  1. page erase 檢查

void fmc_erase_pages_check(void) { uint32_t i; ptrd = (uint32_t *)FMC_WRITE_START_ADDR;//將寫地址賦值指針 for(i = 0; i < WordNum; i++) { if(0xFFFFFFFF != (*ptrd)) //判斷地址是否擦除成功 { lednum = LED2; gd_eval_led_on(lednum); //不成功的時候 LED2 會亮 break; }else { ptrd++; // 指針地址++ 再進行下一個地址判斷 } } }

  1. flash 編程

void fmc_program(void) { fmc_unlock(); //FMC 解鎖 address = FMC_WRITE_START_ADDR; while(address < FMC_WRITE_END_ADDR){ fmc_word_program(address, data0); //word 編程 address += 4; fmc_flag_clear(FMC_FLAG_BANK0_END | FMC_FLAG_BANK0_WPERR | FMC_FLAG_BANK0_PGERR );//清除標志 } fmc_lock(); //FMC 加鎖 }

  1. 字編程檢查

void fmc_program_check(void) { uint32_t i; ptrd = (uint32_t *)FMC_WRITE_START_ADDR; //將寫地址賦值指針 for(i = 0; i < WordNum; i++) { if((*ptrd) != data0) //判斷寫入的數(shù)據(jù)是否一致 { lednum = LED3; gd_eval_led_on(lednum); //不相等的時候 LED3 會亮 break; }else { ptrd++; // 指針地址++ 再進行下一個地址判斷 } } }

12.4.FMC 使用注意事項

(1)操作 flash 之前需要 fmc_unlock();

(2)flash 編程之前需要 page 擦除;

(3)Page erase 和 program 之前需要先清空標志位;

(4)避免在 erase 或者 program 過程中出現(xiàn)掉電情況,用 flash 作為 eeprom 來用時,需要做好數(shù)據(jù)備份;

(5)在擦除 code data flash 過程中,擦除的優(yōu)先級最高,此時任何中斷都不響應。這時需要注意 MCU 與外界通訊時,數(shù)據(jù)丟失情況。

教程GD32 MCU方案商聚沃科技原創(chuàng)發(fā)布,了解更多GD32 MCU教程,關注聚沃科技官網(wǎng)

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

    關注

    6037

    文章

    44558

    瀏覽量

    635301
  • mcu
    mcu
    +關注

    關注

    146

    文章

    17148

    瀏覽量

    351197
  • 嵌入式
    +關注

    關注

    5082

    文章

    19126

    瀏覽量

    305198
  • FMC
    FMC
    +關注

    關注

    0

    文章

    93

    瀏覽量

    19687
  • 開發(fā)板
    +關注

    關注

    25

    文章

    5050

    瀏覽量

    97471
收藏 人收藏

    評論

    相關推薦

    GD32 MCU移植

    gd32是一款國產(chǎn)單片機。該芯片在很多方面和STM32有異曲同工之處。資料不是很多! GD32外設方面、和STM32沒有多大區(qū)別。 只是需要注意資源的引腳分配。雖然和STM32使用方式一樣、但是也存在
    發(fā)表于 03-23 13:40

    GD32MCU介紹

    其實兆芯的MCU為了兼容ST,外設的寄存器設計與ST保持一致了。比如GD32VF103或者GD32E103系列的USBFS這個外設,基本等同
    發(fā)表于 11-01 06:03

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

    、調(diào)試工具,再到庫函數(shù)的使用、各個外設的程序?qū)崿F(xiàn),不僅有原理的介紹,還有實踐的歷程。這本書聚焦在GD32 MCU基本原理和固件庫上,重點在于對固件庫API的
    發(fā)表于 06-06 21:52

    推出采用GD32 RISC-V的MCU

    推出采用GD32 RISC-V的MCU ppt分享
    發(fā)表于 07-14 17:15 ?0次下載

    兆易創(chuàng)新GD32 MCU選型手冊,適用于GD32全系列MCU

    兆易創(chuàng)新GD32MCU選型手冊,適用于GD32全系列MCUGD32MCU選型手冊,適用于GD32全系列MCU
    發(fā)表于 10-19 17:26 ?49次下載

    你了解GD32 MCU的命名規(guī)則嗎

    下面為大家介紹GD32 MCU的通用命名規(guī)則,以GD32F303ZGT6為例,其中,GD32代表GD32
    的頭像 發(fā)表于 01-13 09:38 ?3648次閱讀
    你了解<b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b>的命名規(guī)則嗎

    GD32 MCU的選項字節(jié)是什么?

    GD32 MCU的選項字節(jié)是什么,有什么功能呢?選項字節(jié)被誤篡改如何回復?
    的頭像 發(fā)表于 01-17 09:42 ?1384次閱讀
    <b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b>的選項字節(jié)是什么?

    不同型號的GD32 MCU如何區(qū)分?

    大家是否碰到過以下應用場景:同一套軟件代碼希望跑在不同型號的GD32 MCU中,但有些地方需要根據(jù)MCU型號進行調(diào)整?或者上位機或其他MCUGD3
    的頭像 發(fā)表于 01-27 09:32 ?1003次閱讀
    不同型號的<b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b>如何區(qū)分?

    GD32 MCU 入門教程】一、GD32 MCU 開發(fā)環(huán)境搭建(1)使用Keil開發(fā)GD32

    GD32系列為通用型MCU,所以開發(fā)環(huán)境也可以使用通用型的IDE,目前使用較多的是KEIL、IAR、 GCC和Embedded Builder,客戶可以根據(jù)個人喜好來選擇相應的開發(fā)環(huán)境。
    的頭像 發(fā)表于 08-08 15:01 ?1197次閱讀
    【<b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b> <b class='flag-5'>入門教程</b>】一、<b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b> 開發(fā)環(huán)境搭建(1)使用Keil開發(fā)<b class='flag-5'>GD32</b>

    GD32 MCU 入門教程】一、GD32 MCU 開發(fā)環(huán)境搭建(2)使用 IAR 開發(fā) GD32

    GD32系列為通用型MCU,所以開發(fā)環(huán)境也可以使用通用型的IDE,目前使用較多的是KEIL、IAR、 GCC和Embedded Builder,客戶可以根據(jù)個人喜好來選擇相應的開發(fā)環(huán)境。
    的頭像 發(fā)表于 08-08 15:40 ?701次閱讀
    【<b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b> <b class='flag-5'>入門教程</b>】一、<b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b> 開發(fā)環(huán)境搭建(2)使用 IAR 開發(fā) <b class='flag-5'>GD32</b>

    GD32 MCU 入門教程】一、GD32 MCU 開發(fā)環(huán)境搭建(3)使用 Embedded Builder 開發(fā) GD32

    GD32系列為通用型MCU,所以開發(fā)環(huán)境也可以使用通用型的IDE,目前使用較多的是KEIL、IAR、 GCC和Embedded Builder,客戶可以根據(jù)個人喜好來選擇相應的開發(fā)環(huán)境。
    的頭像 發(fā)表于 08-08 16:03 ?975次閱讀
    【<b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b> <b class='flag-5'>入門教程</b>】一、<b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b> 開發(fā)環(huán)境搭建(3)使用 Embedded Builder 開發(fā) <b class='flag-5'>GD32</b>

    GD32 MCU 入門教程】二、GD32 MCU 燒錄說明(1)ISP 燒錄

    ISP:In System Programing,在系統(tǒng)編程,通過MCU片內(nèi)的引導程序進行Flash編程。 GD32片內(nèi)有一個只讀信息塊,用于存放引導裝載程序,引導程序在MCU出廠前就會提前燒錄好
    的頭像 發(fā)表于 08-08 16:20 ?940次閱讀
    【<b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b> <b class='flag-5'>入門教程</b>】二、<b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b> 燒錄說明(1)ISP 燒錄

    GD32 MCU 入門教程GD32 MCU 常見外設介紹(14)RTC 模塊介紹

    GD32 MCU內(nèi)部提供了一個RTC(實時時鐘)模塊,通過RTC可以實現(xiàn)日歷時鐘、鬧鐘等功能。RTC也可以用于深度睡眠或待機模式的低功耗喚醒。不同系列的GD32
    的頭像 發(fā)表于 08-23 09:18 ?473次閱讀
    【<b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b> <b class='flag-5'>入門教程</b>】<b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b> <b class='flag-5'>常見外設</b><b class='flag-5'>介紹</b>(14)RTC <b class='flag-5'>模塊</b><b class='flag-5'>介紹</b>

    GD32 MCU 入門教程GD32 MCU FPU 使用方法

    GD32 MCU FPU 使用方法
    的頭像 發(fā)表于 08-25 09:24 ?600次閱讀
    【<b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b> <b class='flag-5'>入門教程</b>】<b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b> FPU 使用方法

    GD32 MCU入門教程GD32 MCU GPIO 結(jié)構(gòu)與使用注意事項

    本文是專門為基于GD32 MCU開發(fā)的工程設計人員提供,主要介紹了GPIO的功能配置、內(nèi)部結(jié)構(gòu)以及在不同場景使用時的注意事項,旨在幫助GD32 MC
    的頭像 發(fā)表于 09-07 10:34 ?739次閱讀
    【<b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b><b class='flag-5'>入門教程</b>】<b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b> GPIO 結(jié)構(gòu)與使用注意事項
    主站蜘蛛池模板: 四虎在线永久视频观看| 狠狠干在线观看| 久久香蕉精品视频| 日本黄色片视频| 狠狠久| 很黄很污的视频网站| 亚洲成人资源| 国外精品视频在线观看免费| 天天干天天操天天拍| japanese69xxx日本| 天堂国产| 男人天堂网www| 国产精品14p| bt天堂新版中文在线地址| 一级毛片 在线播放| 全日本爽视频在线| 国产一卡二卡3卡4卡四卡在线| 中文网丁香综合网| 男人操女人的网站| 四虎成人免费影院网址| 黄色二级视频| 天天玩天天干| 欧美亚洲视频一区| 色资源在线观看| 国产精品成人在线播放| 午夜黄页网站在线播放| 99视频热| 欧美特级黄| 欧美天天综合| 亚洲精品一线二线三线| avtt天堂网永久资源| 俺也啪| 亚洲bt天堂| 1717国产精品久久| 日韩亚洲人成在线综合| 精品一级毛片| 欧美激情综合色综合啪啪五月| 亚洲成熟| 亚色在线| 91三级视频| 久久精品国产四虎|