91在线观看视频-91在线观看视频-91在线观看免费视频-91在线观看免费-欧美第二页-欧美第1页

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

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

3天內不再提示

【GD32F470紫藤派開發板使用手冊】第四講 FMC-片內Flash擦寫讀實驗

聚沃科技 ? 2024-05-06 11:08 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

wKgaomYwSqiAY_PQAAnl063z3JE116.png

4.1實驗內容

通過本實驗主要學習以下內容:

4.2實驗原理

4.2.1FMC控制器原理

FMC即Flash控制器,其提供了片上Flash操作所需要的所有功能,在GD32F4xx系列MCU中,Flash前512KB字節空間內,CPU執行指令零等待,具有相同主頻下最快的代碼執行效率。FMC也提供了扇區擦除和整片擦除操作,以及32位整字/16位半字/字節編程等閃存操作。

另外GD32F470xx,GD32F427xx和GD32F425xx系列還額外提供了頁(4KB)擦除操作

GD32F4xx系列MCU支持最大3M Flash空間。

GD32F4xx系列MCU可以支持最大3M的Flash空間,BANK0的空間為1MB,前4個扇區為16KB,第五個扇區為64KB,之后的扇區為128KB;BANK1的空間為2MB,前4個扇區為16KB,第五個扇區為64KB,之后七個扇區為128KB;剩下的扇區為256KB。

有關Flash擦寫操作均需要先解鎖Flash,然后進行擦寫操作,擦寫完成后再進行鎖Flash,注意Flash特性只能由1寫0,也就是Flash需要先擦除才能寫入新的數據,如果確保寫入地址的數據為全0xFF,也可以直接寫入。讀取Flash數據可以采取直接尋址的方式進行讀取。

下面為各位讀者介紹Flash擦寫讀的相關操作。

4.2.2Flash擦除操作原理

Flash擦除可分為扇區擦除以及整片擦除,如下圖所示,扇區擦除時間典型值為200-600ms(根據扇區大小進行區分),整片擦除也根據容量大小會有差異。

wKgZomY4SMCAUDvTAAOCgyFckE0155.png

有關Flash的相關操作均在gd32f4xx_fmc.c中實現,下面介紹下擦除實現的函數,如下表所示。

wKgaomY4SM2AHSJtAABznpenHIk869.png

4.2.3Flash寫入編程操作原理

GD32F4xx系列MCU可支持32位整字編程/16位半字以及字節編程,如下圖所示,Flash 32位整字編程時間典型值為37.5us。

wKgZomY4SMCAUDvTAAOCgyFckE0155.png

有關Flash編程實現函數如下表所示。

wKgaomY4SOWASS1xAACmNFpH5Yk690.png

4.2.4Flash讀取操作原理

Flash讀取可以采用直接尋址的方式進行操作,具體可參考以下示例代碼。

C
uint32_t read_data;
read_data = *(uint32_t *)0x08001000;

  • 注意:有關Flash有以下參數讀者需要了解,GD32F4xx系列MCU的內部Flash具有至少10萬次的擦寫次數以及20年的數據保持能力,但需注意,隨著擦寫次數的增加數據保持時間會下降。

4.3硬件設計

本例程不涉及硬件電路。

4.4代碼解析

4.4.1Flash寫入多字節函數

Flash寫入多字節操作函數如下所示,寫入的過程主要分為擦寫兩個操作,由于Flash特有特性,需要先擦除才可以寫入,因而需要確保寫入地址的初識數據為0xFF。本函數可以實現根據地址識別對應頁并進行擦除的功能,使用上非常方便,使用者只需要關心擦寫的起始地址以及數據和長度即可,擦寫的位置函數中會進行實現。

C
void fmc_write_data(uint32_t write_start_addr, uint8_t *data_buf, uint16_t data_lengh)
{
uint32_t write_addr,erase_addr;
uint16_t data_write_num=0;
int32_t data_earse_num;
fmc_unlock(); /* 解鎖FMC */
/* 清除錯誤標志 */
fmc_flag_clear(FMC_FLAG_RDDERR|FMC_FLAG_PGSERR|FMC_FLAG_PGMERR|FMC_FLAG_WPERR|FMC_FLAG_OPERR);


erase_addr = write_start_addr;
data_earse_num = data_lengh;

if(write_start_addr%FLAG_PAGE_SIZE == 0) /* 若寫入地址為頁起始地址 */
{
for(;data_earse_num>0;)
{
fmc_page_erase(erase_addr);
/* 清除錯誤標志 */
fmc_flag_clear(FMC_FLAG_RDDERR|FMC_FLAG_PGSERR|FMC_FLAG_PGMERR|FMC_FLAG_WPERR|FMC_FLAG_OPERR);
erase_addr+=FLAG_PAGE_SIZE;
data_earse_num-=FLAG_PAGE_SIZE;
}
}else{
/*若寫入地址不是頁起始地址*/
for(;(data_earse_num>0||erase_addr>=write_start_addr+data_lengh);)
{
fmc_page_erase(erase_addr);
fmc_flag_clear(FMC_FLAG_RDDERR|FMC_FLAG_PGSERR|FMC_FLAG_PGMERR|FMC_FLAG_WPERR|FMC_FLAG_OPERR);
erase_addr+=FLAG_PAGE_SIZE;
data_earse_num-=FLAG_PAGE_SIZE;
}
}

/* 寫入數據 */
write_addr = write_start_addr;
for(data_write_num = 0; data_write_num{
fmc_byte_program(write_addr, data_buf[data_write_num]);
fmc_flag_clear(FMC_FLAG_RDDERR|FMC_FLAG_PGSERR|FMC_FLAG_PGMERR|FMC_FLAG_WPERR|FMC_FLAG_OPERR);
write_addr++;
}
fmc_lock();
}

4.4.2Flash讀取數據函數

Flash讀取數據函數如下所示,采用直接尋址的方式,讀取字節數據。

C
uint8_t fmc_read_data(uint32_t write_read_addr)
{
return *(uint8_t *)write_read_addr;
}

4.4.3主函數

主函數如下所示,通過該函數實現對flash起始地址為0x080A0000的前10個字節擦寫以及讀取的驗證。

C
int main(void)
{
uint16_t read_num =0;
uint8_t i_num;
driver_init();
bsp_led_group_init();
bsp_uart_init(&BOARD_UART); /* 板載UART初始化 */
printf_log("Example of internal Flash read-write demo.\r\n");
printf_log("Write data to internal Flash.\r\n");
fmc_write_data(WRITE_START_ADDR,write_data,sizeof(write_data)); /* 向WRITE_START_ADDR地址寫入10個雙字節數據 */
printf_log("Read data from internal Flash.\r\n");
for(read_num=0;read_num{
read_data[read_num] = fmc_read_data(WRITE_START_ADDR+read_num); /* 從WRITE_START_ADDR讀取10個雙字節數據 */
}
printf_log("Verify the written and read data.\r\n");
for(i_num=0;i_num{
/* 校驗數據 */
if(read_data[i_num]!=write_data[i_num])
{
/* 校驗數據出錯 */
printf_log("Error in verifying data.\r\n");
printf_log("Turn on LED1.\r\n");
bsp_led_on(&LED1);
while(1);
}else{
}
}
/* 校驗數據成功 */
printf_log("Turn on LED1.\r\n");
bsp_led_on(&LED1);
printf_log("Verify that the data is correct and that the written and read data are consistent.\r\n");

while (1)
{
}
}

4.5實驗結果

將本實驗燒錄到紫藤派實驗板中,運行后可以觀察到LED1常亮,表明擦寫以及讀取實驗正常。

wKgaomY4STWACq3NACfNIcLBnHc085.png

教程由GD32 MCU方案商聚沃科技原創發布,了解更多GD32 MCU教程,關注聚沃科技官網

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

    關注

    6067

    文章

    44997

    瀏覽量

    650768
  • 嵌入式
    +關注

    關注

    5152

    文章

    19678

    瀏覽量

    317790
  • FlaSh
    +關注

    關注

    10

    文章

    1679

    瀏覽量

    151911
  • FMC
    FMC
    +關注

    關注

    0

    文章

    104

    瀏覽量

    20140
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    GD32H757Z海棠開發板使用手冊第四講 FMC-Flash擦寫實驗

    FMCFlash控制器,其提供了Flash操作所需要的所有功能,在GD32H7XX系列MCU中,具有高達3840KB字節的
    的頭像 發表于 04-19 10:09 ?2086次閱讀
    【<b class='flag-5'>GD</b>32H757Z海棠<b class='flag-5'>派</b><b class='flag-5'>開發板</b><b class='flag-5'>使用手冊</b>】<b class='flag-5'>第四講</b> <b class='flag-5'>FMC-</b><b class='flag-5'>片</b><b class='flag-5'>內</b><b class='flag-5'>Flash</b><b class='flag-5'>擦寫</b><b class='flag-5'>讀</b><b class='flag-5'>實驗</b>

    GD32F470紫藤開發板使用手冊】第九 USART-printf打印實驗

    通過本實驗主要學習以下內容: 串口簡介 GD32F470串口工作原理 使用printf打印信息
    的頭像 發表于 05-13 10:14 ?2423次閱讀
    【<b class='flag-5'>GD32F470</b><b class='flag-5'>紫藤</b><b class='flag-5'>派</b><b class='flag-5'>開發板</b><b class='flag-5'>使用手冊</b>】第九<b class='flag-5'>講</b>  USART-printf打印<b class='flag-5'>實驗</b>

    GD32F470紫藤開發板使用手冊】第十一講 SPI-SPI NOR FLASH讀寫實驗

    通過本實驗主要學習以下內容: ?SPI簡介 ?GD32F470 SPI簡介 ?SPI NOR FLASH——GD25Q32ESIGR簡介 ?使用GD
    的頭像 發表于 05-17 09:57 ?2761次閱讀
    【<b class='flag-5'>GD32F470</b><b class='flag-5'>紫藤</b><b class='flag-5'>派</b><b class='flag-5'>開發板</b><b class='flag-5'>使用手冊</b>】第十一講 SPI-SPI NOR <b class='flag-5'>FLASH</b>讀寫<b class='flag-5'>實驗</b>

    使用GD32F470編譯drv_adc.c時報錯怎么解決?

    使用GD32F470芯片,編譯drv_adc.c時報錯好幾個編譯錯誤,可能是適配GD32F470芯片沒有適配好。 編譯問題如下圖:
    發表于 02-23 06:55

    YL-51開發板使用手冊

    YL-51開發板使用手冊,YL-51開發板使用手冊YL-51開發板使用手冊YL-51
    發表于 05-10 16:31 ?22次下載

    51開發板使用手冊

    51開發板使用手冊,感興趣的小伙伴們可以瞧一瞧。
    發表于 11-23 15:45 ?11次下載

    KC705開發板英文使用手冊

    KC705開發板英文使用手冊
    發表于 11-01 10:19 ?5次下載

    iTOP-3399開發板使用手冊大更新

    iTOP-3399開發板使用手冊大更新
    的頭像 發表于 12-10 15:46 ?1736次閱讀
    iTOP-3399<b class='flag-5'>開發板</b><b class='flag-5'>使用手冊</b>大更新

    APT32F102 開發板使用手冊

    電子發燒友網站提供《APT32F102 開發板使用手冊.pdf》資料免費下載
    發表于 04-16 09:07 ?0次下載

    GD32F470紫藤開發板使用手冊】第二 GPIO-按鍵查詢實驗

    通過本實驗主要學習以下內容: GPIO輸入功能原理; 按鍵查詢輸入檢測原理;
    的頭像 發表于 04-30 11:39 ?1289次閱讀
    【<b class='flag-5'>GD32F470</b><b class='flag-5'>紫藤</b><b class='flag-5'>派</b><b class='flag-5'>開發板</b><b class='flag-5'>使用手冊</b>】第二<b class='flag-5'>講</b> GPIO-按鍵查詢<b class='flag-5'>實驗</b>

    GD32F470紫藤開發板使用手冊】第五 PMU-低功耗實驗

    通過本實驗主要學習以下內容: PMU原理; 低功耗的進入以及退出操作
    的頭像 發表于 05-07 09:29 ?1260次閱讀
    【<b class='flag-5'>GD32F470</b><b class='flag-5'>紫藤</b><b class='flag-5'>派</b><b class='flag-5'>開發板</b><b class='flag-5'>使用手冊</b>】第五<b class='flag-5'>講</b>  PMU-低功耗<b class='flag-5'>實驗</b>

    GD32F470紫藤開發板使用手冊】第八 ADC-規則組多通道采樣實驗

    通過本實驗主要學習以下內容: ?ADC的簡介 ?GD32F470 ADC工作原理 ?DMA原理 ?規則組多通道循環采樣
    的頭像 發表于 05-12 10:00 ?1548次閱讀
    【<b class='flag-5'>GD32F470</b><b class='flag-5'>紫藤</b><b class='flag-5'>派</b><b class='flag-5'>開發板</b><b class='flag-5'>使用手冊</b>】第八<b class='flag-5'>講</b> ADC-規則組多通道采樣<b class='flag-5'>實驗</b>

    GD32F470紫藤開發板使用手冊】第十三講 USB_虛擬鍵盤實驗

    通過本實驗主要學習以下內容: ?USB協議基本原理 ?GD32F4xx USBFS的使用 ?虛擬鍵盤的協議原理及使用
    的頭像 發表于 05-19 09:59 ?2175次閱讀
    【<b class='flag-5'>GD32F470</b><b class='flag-5'>紫藤</b><b class='flag-5'>派</b><b class='flag-5'>開發板</b><b class='flag-5'>使用手冊</b>】第十三講 USB_虛擬鍵盤<b class='flag-5'>實驗</b>

    GD32F303紅楓開發板使用手冊】第五 FMC-Flash擦寫實驗

    MC即Flash控制器,其提供了Flash操作所需要的所有功能,在GD32F303系列MCU中,Flash前256K字節空間內,?CPU
    的頭像 發表于 06-02 10:05 ?1460次閱讀
    【<b class='flag-5'>GD32F</b>303紅楓<b class='flag-5'>派</b><b class='flag-5'>開發板</b><b class='flag-5'>使用手冊</b>】第五<b class='flag-5'>講</b> <b class='flag-5'>FMC-</b><b class='flag-5'>片</b><b class='flag-5'>內</b><b class='flag-5'>Flash</b><b class='flag-5'>擦寫</b><b class='flag-5'>讀</b><b class='flag-5'>實驗</b>

    GD32F303紅楓開發板使用手冊】第二十 SPI-SPI NAND FLASH讀寫實驗

    通過本實驗主要學習以下內容: ?SPI通信協議,參考19.2.1東方紅開發板使用手冊 ?GD32F303 SPI操作方式,參考19.2.2東方紅
    的頭像 發表于 06-20 09:50 ?1932次閱讀
    【<b class='flag-5'>GD32F</b>303紅楓<b class='flag-5'>派</b><b class='flag-5'>開發板</b><b class='flag-5'>使用手冊</b>】第二十<b class='flag-5'>講</b> SPI-SPI NAND <b class='flag-5'>FLASH</b>讀寫<b class='flag-5'>實驗</b>
    主站蜘蛛池模板: 久久久亚洲欧美综合 | 人阁色第四影院在线观看 | 天天视频免费观看高清影视 | japanese色系tube日本护士 | 热re99久久精品国99热 | 欧美成人aaa大片 | 色综合久久中文字幕网 | 高清一级 | 国产午夜免费 | 日本三级三级三级免费看 | 久久99免费 | 国产69精品久久久久9牛牛 | 色妞网站| 人人插人人射 | 黄色在线观看国产 | 日韩a一级欧美一级 | 国产午夜视频在线观看第四页 | 久久综合九色综合欧洲色 | 日本人视频-jlzz jlzz jlzz | 久久系列 | 黄视频网站入口 | 国产午夜精品理论片 | 夜夜夜爽爽爽久久久 | 高清一级做a爱免费视 | 美女视频黄a全部免费看小说 | 一区二区三区免费视频播放器 | 国产高清在线精品 | 欧美在线三级 | 精品四虎免费观看国产高清 | 亚洲一区二区三区四区在线观看 | 亚洲高清日韩精品第一区 | 啪啪免费网站视频观看 | 成人午夜网址 | 免费欧美黄色片 | 国产日韩精品一区二区在线观看 | 午夜小视频男女在线观看 | 亚洲综合亚洲综合网成人 | 久青草视频在线播放 | 亚洲卡1卡2卡新区网站 | 永久免费观看午夜视频在线 | 成人免费国产gav视频在线 |