精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

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

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

3天內不再提示

【GD32F303紅楓派開發板使用手冊】第二十五講 EXMC-外部SRAM讀寫實驗

聚沃科技 ? 2024-06-25 09:39 ? 次閱讀
wKgaomZVdiiAfR9BAB3mDFhHnZc972.png

25.1實驗內容

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

  • EXMC外設原理和配置
  • EXMC NOR/SRAM模式介紹
  • 外部SRAM接口時序和操作方式

25.2實驗原理

MCU的片內SRAM空間有限,在做一些大量數據處理、GUI顯示等應用中片內SRAM容量無法滿足應用需求,而外部SRAM器件讀寫速度快,不需要自刷新,工作穩定,是性能最優的外擴RAM選擇之一。MCU通過EXMC接口可以實現外部SRAM的接口通信協議,同時可映射到內部地址實現和內部ram相同的操作方式。

25.2.1EXMC外設原理

EXMC是MCU的外部存儲控制器,可以配置實現各類片外設備的通信協議,包括SRAM、PSRAM、NOR FLASH、NAND FLASH等,也可以通過配置實現一些其他通信協議,如8080接口的LCD驅動、FPGA通信等,可靈活的實現很多異步同步信號輸入輸出,時序時間可配置。更重要的是EXMC可通過地址映射方式實現MCU內部總線協議到外部器件通信的轉換,實現高效的數據讀取和輸出能力。

  • EXMC系統架構如下圖所示,外部SRAM使用NOR-Flash/PSRAM控制器實現通信協議,使用NWE、NOE、EXMC_Dx、EXMC_Ax、EXMC_NBLx、EXMC_NEx引腳和SRAM器件進行連接。
wKgaomZ6HlSAbHJ3AAEo_6A5HHE738.png

EXMC根據不同存儲器類型,對應有4個BANK,每個BANK各256MB占用了不同地址空間。訪問對應BANK區的地址時EXMC會自動按對應改區存儲類型的時序和配置進行通信。

wKgaomZ6HmOAdwJ8AAD2ZGB1kAo603.png

25.2.2EXMC NOR/SRAM模式介紹

如SRAM/NOR類型對應區域為BANK0總計256MB空間。而BANK0其中有分了4個Regions各64MB,每個Regions分別對應NE0——NE4引腳連接的器件,可以連接4個64MB SRAM就可以組成256MB的連續SRAM地址空間,也可以連接4個NOR或者2個NOR和2個SRAM的組合方式。

wKgaomZ6HnyAQYtRAADkr7I4fUE388.png
  • 訪問外部SRAM時,采用了EXMC SRAM異步訪問模式A,讀寫開始時NE先拉低,接著地址先建立并保持,同時其他信號根據當前訪問方向等進行信號對應輸出,接下來MCU或器件輸出數據信號建立,在輸出使能的邊沿進行采樣,讀寫結束NE拉高。讀寫信號時序如下圖:
wKgaomZ6HpiAdnZxAAEB8AqdCrs063.png

在這個時序過程中,很多參數可以進行配置調節,其中主要是地址建立和保持、數據建立的參數,一般根據速率要求、硬件信號斜率限制來平衡這個參數,目標為達到一個滿足穩定性的最高速率參數。相關參數如下表所示:

wKgZomZ6HqqAfVqbAAHXO5SPTvg605.png

25.2.3外部SRAM器件原理

sram存儲模型可以使用下圖說明:

wKgaomZ6HrmAAf0uAAIJnhVGv8M241.png

SRAM內部包含的存儲陣列,和表格查找一樣,指定一個行地址和列地址,就可以精確地找到目標BIT單元格,這是SRAM芯片尋址的基本原理。這樣的每個單元格被稱為存儲單元,而這樣的表則被稱為存儲矩陣。地址譯碼器把N根地址線轉換成2的N次方根信號線,每根信號線對應一行或一列存儲單元,通過地址線找到具體的存儲單元,實現尋址。如果存儲陣列比較大,地址線會分成行和列地址,或者行、列分時復用同一地址總線,訪問數據尋址時先用地址線傳輸行地址再傳輸列地址。

在外部SRAM上,列地址對應了數據寬度,如例程所用的IS62WV51216BLL為16位寬度,故而行地址范圍是19,對應了IS62WV51216BLL的A0-A19引腳,主控芯片通過A0-A19引腳即可實現對行地址進行尋址訪問到對應的16BIT數據。

如下圖所示為外部SRAM接口信號,主控通過特定接口按時序即可時序地址發送、數據發送和讀取,實現對指定地址數據的讀寫。

wKgZomZ6HsaALUONAAethsCDsdM552.png

25.3硬件設計

如下是IS62WV51216BLL的原理圖設計,MCU通過EXMC相關對應接口連接到SRAM。

wKgZomZ6HtOAH-cWAARUkGzfwvg891.png
  • SRAM作為敏感器件,需要保證電源的穩定、減少噪聲,串接了磁珠后供電,同時對sram的vdd引腳必須就近放置0.1uf去耦電容,若整個系統中存在較多其他負載,可以再增加較大電容穩定電源。
  • SRAM的CS引腳通過MCU EXMC_NEx引腳控制,由于片選信號較為關鍵,避免MCU在EXMC多器件時懸空信號不穩定導致誤操作,需要增加上拉電阻;在這里,上拉電阻應當靠近SRAM放置,減少連接回路上的耦合干擾。

25.4代碼解析

EXMC在初始化后,基本上通過程序的地址映射就可以進行操作了,需要根據外部器件的要求進行exmc相關參數配置,exmc可配置參數有很多,但選定好一個模式后實際在這個模式下需要配置的參數是有限的,一些結構體成員只需要按默認參數配置即可。

25.4.1EXMC SRAM模式初始化

  • 在sram訪問時,可能會調整的exmc參數如下:
wKgaomZ6HumAGCSTAACAjtnHPqM457.png
  • 其中數據建立、地址建立、地址保持三個參數尤其關鍵,影響到最終的速率以及穩定性,需要根據器件、電路設計PCB設計、信號測試綜合來調試選取合適的值;其單位為AHB CLK。
wKgZomZ6HviAORpPAAAOiI0Q9QY818.png
  • 整個SRAM配置過程主要包含:GPIO和EXMC外設接口時鐘、GPIO配置、EXMC相關參數配置,完整代碼如下:
C
/*!
* 說明 emxc nor/sram模式初始化
* 輸入[1] norsram_region: @EXMC_BANK0_NORSRAM_REGION0/EXMC_BANK0_NORSRAM_REGION1/EXMC_BANK0_NORSRAM_REGION2/EXMC_BANK0_NORSRAM_REGION3
* 返回值 無
*/
void driver_exmc_sram_init(uint32_t norsram_region)
{
exmc_norsram_parameter_struct nor_init_struct;
exmc_norsram_timing_parameter_struct nor_timing_init_struct;

/* EXMC clock enable */
rcu_periph_clock_enable(RCU_EXMC);

/* EXMC enable */
rcu_periph_clock_enable(RCU_GPIOB);
rcu_periph_clock_enable(RCU_GPIOD);
rcu_periph_clock_enable(RCU_GPIOE);
rcu_periph_clock_enable(RCU_GPIOF);
rcu_periph_clock_enable(RCU_GPIOG);

/* configure EXMC_D[0~15]*/
/* PD14(EXMC_D0), PD15(EXMC_D1),PD0(EXMC_D2), PD1(EXMC_D3), PD8(EXMC_D13), PD9(EXMC_D14), PD10(EXMC_D15) */
gpio_init(GPIOD, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_0 | GPIO_PIN_1| GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_7 | GPIO_PIN_8 | GPIO_PIN_9 |
GPIO_PIN_10 | GPIO_PIN_11 | GPIO_PIN_12 | GPIO_PIN_13 | GPIO_PIN_14 | GPIO_PIN_15);

/* PE7(EXMC_D4), PE8(EXMC_D5), PE9(EXMC_D6), PE10(EXMC_D7), PE11(EXMC_D8), PE12(EXMC_D9),
PE13(EXMC_D10), PE14(EXMC_D11), PE15(EXMC_D12) */
gpio_init(GPIOE, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_7 | GPIO_PIN_8 | GPIO_PIN_9 |
GPIO_PIN_10 | GPIO_PIN_11 | GPIO_PIN_12 |
GPIO_PIN_13 | GPIO_PIN_14 | GPIO_PIN_15);


/* configure NBL0(PE0) and NBL1(PE1) */
gpio_init(GPIOG, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3 | GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_9 | GPIO_PIN_10);

/* configure NBL0(PE0) and NBL1(PE1) */
gpio_init(GPIOF, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3 | GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_12 | GPIO_PIN_13 | GPIO_PIN_14 | GPIO_PIN_15);

exmc_norsram_struct_para_init(&nor_init_struct);

/* config timing parameter */
nor_timing_init_struct.asyn_access_mode = EXMC_ACCESS_MODE_A;
nor_timing_init_struct.syn_data_latency = EXMC_DATALAT_2_CLK;
nor_timing_init_struct.syn_clk_division = EXMC_SYN_CLOCK_RATIO_2_CLK;
nor_timing_init_struct.bus_latency = 0;
nor_timing_init_struct.asyn_data_setuptime = 8;
nor_timing_init_struct.asyn_address_holdtime = 8;
nor_timing_init_struct.asyn_address_setuptime = 8;

/* config EXMC bus parameters */
nor_init_struct.norsram_region = norsram_region;
nor_init_struct.write_mode = EXMC_ASYN_WRITE;
nor_init_struct.extended_mode = DISABLE;
nor_init_struct.asyn_wait = DISABLE;
nor_init_struct.nwait_signal = DISABLE;
nor_init_struct.memory_write = ENABLE;
nor_init_struct.nwait_config = EXMC_NWAIT_CONFIG_BEFORE;
nor_init_struct.wrap_burst_mode = DISABLE;
nor_init_struct.nwait_polarity = EXMC_NWAIT_POLARITY_LOW;
nor_init_struct.burst_mode = DISABLE;
nor_init_struct.databus_width = EXMC_NOR_DATABUS_WIDTH_16B;
nor_init_struct.memory_type = EXMC_MEMORY_TYPE_SRAM;
nor_init_struct.address_data_mux = DISABLE;
nor_init_struct.read_write_timing = &nor_timing_init_struct;
nor_init_struct.write_timing = &nor_timing_init_struct;
exmc_norsram_init(&nor_init_struct);

/* enable the EXMC bank0 NORSRAM */
exmc_norsram_enable(norsram_region);
}

25.4.2初始化調用

  • 紅楓派開發板中SRAM的CS連接引腳為EXMC_NE0引腳,故而對應EXMC BANK0 Region0區,調用初始化時我們傳入參數EXMC_BANK0_NORSRAM_REGION0即可。
C
//初始化exmc norsram region0
driver_exmc_norsram_init(EXMC_BANK0_NORSRAM_REGION0);

25.4.3地址映射訪問方式

  • 初始化好后EXMC BANK0 Region0區的地址可以理解就和外部SRAM形成了映射關系,讀寫這些地址時EXMC會先拉低NE0選擇SRAM進行通信和交互;

exmc驅動的頭文件中定義好了BANK的4個Region地址,我們對Region0地址讀寫即可實現外部SRAM的數據讀寫。

wKgZomZ6HxCAXj_WAAAxiM8Yl3o460.png
  • 同樣我們也可以直接在編譯器里定義外部sram地址范圍,直接讓編譯器把定義的變量和數組放在外部sram中,我們不用再關心其具體地址;但我們需要在main函數之前初始化好exmc,可以在啟動文件中調用exmc初始化。
wKgaomZ6Hx-AEJ_YAACmBa3sSN8279.pngwKgZomZ6HySAOOMKAAAsZBnmBAk564.png

25.4.4main函數設計

mian函數中通過指針方式以8位、16位、32位寫并讀取校驗了外部SRAM數據

C
int main(void)
{
uint32_t writereadstatus = 0;

//延時和公共驅動部分初始化
driver_init();

//打印串口初始化
bsp_uart_init(&BOARD_UART);

//初始化LED
bsp_led_group_init();
bsp_led_off(&LED0);
bsp_led_off(&LED1);

//初始化exmc norsram region0
driver_exmc_norsram_init(EXMC_BANK0_NORSRAM_REGION0);

delay_ms(100);
printf("External sram read and write examples.\r\n");


//以32位讀寫校驗
printf("32-bit read/write check.\r\n");
writereadstatus=0;
for(uint32_t index = 0; index < EXMC_SRAM_SIZE; index++ ){
REG32(EXMC_BANK0_NORSRAM_REGION0_ADDR+index*4)=0xa55aa55a;
}
for(uint32_t index = 0; index < EXMC_SRAM_SIZE; index++ ){
if(0xa55aa55a!=REG32(EXMC_BANK0_NORSRAM_REGION0_ADDR+index*4)){
writereadstatus++;
break;
}
}
if(writereadstatus){
bsp_led_on(&LED0);
printf("\r\n32-bit read/write SRAM test failed!");
}else{
bsp_led_on(&LED1);
printf("\r\n32-bit read/write SRAM test successed!");
}


//以16位讀寫校驗
printf("16-bit read/write check.\r\n");
writereadstatus=0;
for(uint32_t index = 0; index < EXMC_SRAM_SIZE; index++ ){
REG16(EXMC_BANK0_NORSRAM_REGION0_ADDR+index*2)=0xaaaa;
}
for(uint32_t index = 0; index < EXMC_SRAM_SIZE; index++ ){
if(0xaaaa!=REG16(EXMC_BANK0_NORSRAM_REGION0_ADDR+index*2)){
writereadstatus++;
break;
}
}
if(writereadstatus){
bsp_led_on(&LED0);
printf("\r\n16-bit read/write SRAM test failed!");
}else{
bsp_led_on(&LED1);
printf("\r\n16-bit read/write SRAM test successed!");
}


//以8位讀寫校驗
printf("8-bit read/write check.\r\n");
writereadstatus=0;
for(uint32_t index = 0; index < EXMC_SRAM_SIZE; index++ ){
REG8(EXMC_BANK0_NORSRAM_REGION0_ADDR+index)=0x55;
}
for(uint32_t index = 0; index < EXMC_SRAM_SIZE; index++ ){
if(0x55!=REG8(EXMC_BANK0_NORSRAM_REGION0_ADDR+index)){
writereadstatus++;
break;
}
}
if(writereadstatus){
bsp_led_on(&LED0);
printf("\r\n8-bit read/write SRAM test failed!");
}else{
bsp_led_on(&LED1);
printf("\r\n8-bit read/write SRAM test successed!");
}

while (1)
{


}
}

25.5實驗結果

連接USB轉串口,將打印讀寫校驗結果。

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

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

    關注

    6032

    文章

    44525

    瀏覽量

    633256
  • sram
    +關注

    關注

    6

    文章

    764

    瀏覽量

    114638
  • 開發板
    +關注

    關注

    25

    文章

    4959

    瀏覽量

    97214
  • GD32
    +關注

    關注

    7

    文章

    403

    瀏覽量

    24235
  • EXMC
    +關注

    關注

    0

    文章

    7

    瀏覽量

    5185
收藏 人收藏

    評論

    相關推薦

    GD32F303】星空介紹

    一、開發板介紹星空GD開發板是由旗點科技推出的一款GD32開發板,板載
    發表于 09-11 17:55

    【星空GD32F303開發板試用體驗】開箱+環境搭建

    本帖最后由 lustao 于 2021-10-19 09:29 編輯 感謝 發燒友學院以及廣州旗點智能科技有限公司為我和孩子提供此產品星空GD32F303開發板。收到了星空
    發表于 10-18 14:15

    【星空GD32F303開發板試用體驗】開箱+環境搭建

    https://bbs.elecfans.com/jishu_2179209_1_1.html感謝 發燒友學院以及廣州旗點智能科技有限公司為我和孩子提供此產品星空gd32F303開發板。收到了星空
    發表于 11-02 15:36

    【星空GD32F303開發板試用體驗】+板卡概覽

    本帖最后由 cooldog123pp 于 2021-11-6 21:07 編輯 星空GD開發板是由旗點科技推出的一款GD32開發板
    發表于 11-06 21:05

    星空GD32F303開發板的相關資料下載

    一、開發板介紹星空GD開發板是由旗點科技推出的一款GD32開發板,板載
    發表于 12-10 08:27

    第二十五 同步計數器

    第二十五 同步計數器 7.3.2 同步計數器一、同步二進制計數器1.同步二進制加法計數器JK觸發器組成的4位同步二進制加法
    發表于 03-30 16:28 ?9302次閱讀
    <b class='flag-5'>第二十五</b><b class='flag-5'>講</b> 同步計數器

    STM32CUBEMX開發GD32F303(15)----外部中斷EXTI

    本章STM32CUBEMX配置STM32F103,并且在GD32F303中進行開發,同時通過開發板內進行驗證。 使用外部中斷EXTI進行驅
    的頭像 發表于 07-26 15:53 ?1297次閱讀
    STM32CUBEMX<b class='flag-5'>開發</b><b class='flag-5'>GD32F303</b>(15)----<b class='flag-5'>外部</b>中斷EXTI

    GD32F303固件庫開發

    /qq_24312945/article/details/124325797] GD32F303固件庫開發(2)----讀保護與寫保護 芯片讀保護以后,flash將不可以從外部讀取,這樣可以防止別人讀取或者盜取芯片代碼,如果想再
    的頭像 發表于 07-27 09:27 ?1113次閱讀
    <b class='flag-5'>GD32F303</b>固件庫<b class='flag-5'>開發</b>

    GD32F303紅楓開發板使用手冊第二 GPIO-流水燈實驗

    GD32F303系列MCU最多可支持?112?個通用I/O?引腳(GPIO),分別為?PA0 ~ PA15,?PB0 ~ PB15,?PC0 ~ PC15,PD0 ~ PD15,?PE0
    的頭像 發表于 05-29 10:02 ?1531次閱讀
    【<b class='flag-5'>GD32F303</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><b class='flag-5'>講</b> GPIO-流水燈<b class='flag-5'>實驗</b>

    GD32F303紅楓開發板使用手冊】第三 GPIO-按鍵查詢檢測實驗

    GD32F303系列MCU GPIO輸入配置結構如下圖所示,輸入可配置上下拉電阻,通過施密特觸發器后可通過備用功能輸入或者通過輸入狀態寄存器進行讀取。
    的頭像 發表于 05-30 10:02 ?806次閱讀
    【<b class='flag-5'>GD32F303</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>

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

    MC即Flash控制器,其提供了片上Flash操作所需要的所有功能,在GD32F303系列MCU中,Flash前256K字節空間內,?CPU執行指令零等待,具有相同主頻下最快的代碼執行效率。FMC也
    的頭像 發表于 06-02 10:05 ?730次閱讀
    【<b class='flag-5'>GD32F303</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> FMC-片內Flash擦寫讀<b class='flag-5'>實驗</b>

    GD32F303紅楓開發板使用手冊】第十六 USART-DMA串口收發實驗

    在前面ADC章節中,我們介紹了DMA的工作原理,這里就不多做介紹。從GD32F303用戶手冊中可以查到,各串口的TX和RX分別對應DMA的不同通道,比如USART0的TX對應DMA0的通道3,而RX對應DMA0的通道4。
    的頭像 發表于 06-15 09:54 ?995次閱讀
    【<b class='flag-5'>GD32F303</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-DMA串口收發<b class='flag-5'>實驗</b>

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

    通過本實驗主要學習以下內容: ?SPI通信協議,參考19.2.1東方紅開發板使用手冊 ?GD32F303 SPI操作方式,參考19.2.2東方紅
    的頭像 發表于 06-20 09:50 ?806次閱讀
    【<b class='flag-5'>GD32F303</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><b class='flag-5'>講</b> SPI-SPI NAND FLASH<b class='flag-5'>讀寫實驗</b>

    GD32F303紅楓開發板使用手冊第二十三講 SDIO-SD卡讀寫實驗

    通過本實驗主要學習以下內容: ?SDIO操作原理 ?SD卡讀寫實
    的頭像 發表于 06-23 10:49 ?555次閱讀
    【<b class='flag-5'>GD32F303</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>三講 SDIO-SD卡<b class='flag-5'>讀寫實驗</b>

    GD32F303紅楓開發板使用手冊第二十 USB-虛擬鍵盤實驗

    ,傳輸速度也很快,這些特性使支持USB接口的電子設備更易用、更大眾化。GD32F303系列MCU集成了USB2.0全速設備USBD模塊,可以滿足作為USB設備與主機
    的頭像 發表于 06-27 09:42 ?735次閱讀
    【<b class='flag-5'>GD32F303</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>七<b class='flag-5'>講</b>  USB-虛擬鍵盤<b class='flag-5'>實驗</b>