99精品伊人亚洲|最近国产中文炮友|九草在线视频支援|AV网站大全最新|美女黄片免费观看|国产精品资源视频|精彩无码视频一区|91大神在线后入|伊人终合在线播放|久草综合久久中文

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

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

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

SPIM初始化及解鎖操作的步驟說明

我快閉嘴 ? 來源:AT32 MCU 雅特力科技 ? 作者:AT32 MCU 雅特力科技 ? 2022-08-14 11:29 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

概述

SPIM(External SPI FLASH memory interface)最大地址段為0x08400000-0x093FFFFF(16MB),是AT32 MCU獨有的一種Flash訪問方式。用戶可以使用自己的Flash作為AT32 MCU的外掛Flash。該方式有別于片上Bank1/Bank2,用戶可根據(jù)具體需求選擇是否開啟。開啟SPIM后可以作為Flash擴展實現(xiàn)如下功能:

在SPIM地址存放用戶執(zhí)行程序,類似于Bank1/Bank2一樣執(zhí)行程序。

用戶程序直接訪問SPIM地址,作為存儲字體庫,圖片等存儲器使用。

SPIM配置

SPIM僅允許按字(32bit)或者半字(16bit)操作,在執(zhí)行讀、編程、擦除SPIM前,必須首先執(zhí)行初始化及解鎖操作。

SPIM在AT32不同系列產(chǎn)品及不同封裝上,可能使用的pin有所不同,具體請參考對應(yīng)型號產(chǎn)品的RM和DS,下面以AT32F403A系列為例,描述操作步驟

初始化及解鎖操作

初始化及解鎖的步驟,在AT32的BSP中已經(jīng)封裝成庫函數(shù),用戶可以直接調(diào)用

1) 使能GPIOA、GPIOB和IOMUXCRM時鐘

2) 配置對應(yīng)pin PA8、PA11、PA12、PB1、PB6、PB7為推挽復(fù)用輸出模式。

3) IOMUX_REMAP2寄存器中使能SPIM接口。

4) 設(shè)置FLASH_SELECT寄存器選擇配置SPIM Flash的類型。

5) 使用KEY解鎖SPIM:寫FLASH_UNLOCK3寄存器2次,按順序分別寫0x45670123和0xCDEF89AB。

6) 檢查SPIM是否解鎖成功,讀取FLASH_CTRL3寄存器的OPLK位,如果被清除為0,則可以開始操作SPIM。

Flash型號選擇

SPIM可以配置支持不同型號的spi Flash,支持的指令集如下表,更詳細描述可以看參考手冊FlASH章節(jié)。

表1. SPIM支持的指令集

948b396e-1a84-11ed-ba43-dac502259ad0.png

讀操作

直接按字(32bit)或者半字(16bit)訪問需要讀取數(shù)據(jù)的地址段:0x08400000–0x093FFFFF

編程操作

編程操作步驟,在AT32的BSP中已經(jīng)封裝成庫函數(shù),用戶可以直接調(diào)用

1) 打開編程操作,F(xiàn)LASH_CTRL3寄存器FPRGM位置1

2) 直接按字(32bit)或者半字(16bit)在需要編程的地址寫入數(shù)據(jù)

3) 檢查是否寫入完成讀取FLASH_STS3寄存器的OBF位是否清除,如果清除表示寫入完成

4) 關(guān)閉編程操作,F(xiàn)LASH_CTRL3寄存器FPRGM位置0

5) 檢查是否寫入成功,讀取FLASH_STS3寄存器的PRGMERR和EPPERR位,如果都為0則表示寫入成功

擦除操作

SPIM擦除分為Mass Erase和Sector Erase,每個sector固定為4KB,在AT32的BSP中已經(jīng)封裝成庫函數(shù),用戶可以直接調(diào)用

Mass Erase

1) 使能擦除,F(xiàn)LASH_CTRL3寄存器CHPERS位置1

2) 開始擦除,F(xiàn)LASH_CTRL3寄存器ERSTR位置1

3) 關(guān)閉擦除,F(xiàn)LASH_CTRL3寄存器CHPERS位置0

Sector Erase

1) 使能擦除,F(xiàn)LASH_CTRL3寄存器SECERS位置1

2) 選擇擦除扇區(qū)地址,F(xiàn)LASH_ADDR3寄存器寫入需要擦除扇區(qū)的地址

3) 開始擦除,F(xiàn)LASH_CTRL3寄存器ERSTR位置1

4) 關(guān)閉擦除,F(xiàn)LASH_CTRL3寄存器SECERS位置0

加密操作

因為SPIM電路裸露在MCU芯片外部,為防止存儲在SPIM Flash里邊的數(shù)據(jù)被外界直接讀取,SPIM提供了加密功能,將原始數(shù)據(jù)通過特有算法進行加密操作后再寫入Flash,AT32 MCU讀取SPIM數(shù)據(jù)時會先進行解密得到原始數(shù)據(jù),然后才使用,保證數(shù)據(jù)安全。加密算法所用的SPIM scrambled KEY為用戶系統(tǒng)數(shù)據(jù)區(qū)的地址0x1FFFF820-0x1FFFF82F范圍內(nèi)數(shù)據(jù)。

當(dāng)SPIM scrambled KEY值全為0xFFFFFFFF時,加密功能關(guān)閉。

當(dāng)SPIM scrambled KEY值不全為0xFFFFFFFF時,加密功能開啟。AT32 MCU根據(jù)FLASH_DA寄存器值作為加密范圍分界,小于0x08400000+FLASH_DA地址段的數(shù)據(jù)為密文,其余范圍數(shù)據(jù)仍然采用明文存儲。

注意:數(shù)據(jù)寫入時的加密狀態(tài)必須和讀取時的加密狀態(tài)保持一致,否則可能導(dǎo)致讀取的數(shù)據(jù)是亂碼而無法正確使用或者運行。即寫入時如果配置了SPIM scrambled KEY及FLASH_DA,那么在讀取時也必須配置相同的SPIM scrambled KEY及FLASH_DA。

圖1. SPIM scrambled KEY存放地址

94b7e716-1a84-11ed-ba43-dac502259ad0.png

圖2. SPIM地址范圍

94e04a26-1a84-11ed-ba43-dac502259ad0.png

硬件電路

因為SPIM連接在外部電路,受環(huán)境影響較大,為保證電路穩(wěn)定,需盡量減少PCB布線長度。

注意:SPIM運行頻率為MCU的AHB時鐘頻率的1/2,所以當(dāng)開啟SPIM時,MCU對應(yīng)的運行AHB頻率有最大限制值,不同型號MCU在SPIM開啟時運行的最大頻率值請用戶參考DS的通用工作條件章節(jié)描述。

圖3. 參考電路

950a9b5a-1a84-11ed-ba43-dac502259ad0.png

I/O復(fù)用

要使用SPIM,需要注意跟其他外設(shè)IP的IO復(fù)用問題。

當(dāng)SPIM使用的IO還有對應(yīng)的其他外設(shè)使能的話,有些IO即使其他外設(shè)應(yīng)用中沒有用到,但也可能會占用。

例如:XMC和SPIM同時使用時,在F403A上PB7用作SPIM的IO2,但是如果配置使能了XMC,即使XMC_NADV功能沒有使用,則PB7也會被XMC_NADV默認開啟占用,導(dǎo)致SPIM工作異常。此時需手動配置IOMUX_REMAP2寄存器關(guān)閉XMC_NADV功能,調(diào)用庫函數(shù)即可,如下gpio_pin_remap_config (XMC_NADV_MUX, TRUE)

圖4. XMC和SPIM共用引腳

952bb7cc-1a84-11ed-ba43-dac502259ad0.png

圖5. 單獨關(guān)閉XMC_NADV功能

9556e9f6-1a84-11ed-ba43-dac502259ad0.png

demo示例

AT32的BSP中,有兩個例程operate_spim和run_in_spim演示了如何使用SPIM。

用戶程序訪問SPIM存儲區(qū)

如果通過用戶程序去執(zhí)行讀、編程及擦除操作,只需要按照正常配置初始化及解鎖后就可以實現(xiàn)。

BSP中examplesflashoperate_spim執(zhí)行了SPIM的初始化、擦除、編程和讀取流程,并通過LED顯示執(zhí)行結(jié)果。

下載用戶程序到SPIM或者用戶程序在SPIM執(zhí)行

如果用戶程序通過keil下載到SPIM中,或者想程序直接在SPIM執(zhí)行,需要執(zhí)行一些額外的操作。

附件工程run_in_spim通過LED的閃爍,簡單的演示了代碼如何在SPIM上運行。

1) Options-Debug-Settings-Flash Download中選擇添加外掛flash類型。

圖6. 配置SPIM Flash類型

957687de-1a84-11ed-ba43-dac502259ad0.png

2) Options-Target中添加SPIM起始地址和容量大小,但不勾選。Demo中將SPIM定義在IROM2位置,用于存儲C文件

注意:如果勾選則KEIL在編譯時可能會將其余不需要運行在SPIM的函數(shù)編譯到SPIM地址段。

圖7. 配置SPIM起始地址和容量

959afe16-1a84-11ed-ba43-dac502259ad0.png

3) Project中選擇需要運行在SPIM對應(yīng)位置的C文件,鼠標(biāo)右鍵選Options進入將Memory Assignment的code地址改為對應(yīng)地址段。

注意:如果工程中函數(shù)還有更多指定地址分段編譯的需求,可以繼續(xù)添加到對應(yīng) ROM1/2/3 等,也可以手動修改sct文件

圖8. 配置需運行在SPIM第一部分代碼

95c1d036-1a84-11ed-ba43-dac502259ad0.png

4) 編譯時勾選自動生成sct文件的選項,編譯完成后瀏覽sct文件可以發(fā)現(xiàn)需要運行在SPIM區(qū)域的函數(shù)已被正確編譯到該區(qū)域。

圖9 勾選自動生成sct文件

95e6e3f8-1a84-11ed-ba43-dac502259ad0.png

圖10 自動生成的sct文件

961ce962-1a84-11ed-ba43-dac502259ad0.png

注意:整個代碼的啟動必須從bank1開始,須保證SPIM flash的初始化代碼在程序執(zhí)行到SPIM前運行。

審核編輯:湯梓紅

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

    關(guān)注

    146

    文章

    17970

    瀏覽量

    366593
  • FlaSh
    +關(guān)注

    關(guān)注

    10

    文章

    1678

    瀏覽量

    151763
  • 存儲器
    +關(guān)注

    關(guān)注

    38

    文章

    7649

    瀏覽量

    167332

原文標(biāo)題:AT32講堂021 | 如何使用AT32 MCU的SPIM作為外部存儲器的擴展功能

文章出處:【微信號:AT32 MCU 雅特力科技,微信公眾號:AT32 MCU 雅特力科技】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

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

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    RT-Thread自動初始化詳解

    初始化函數(shù)不需要被顯式調(diào)用,只需要在函數(shù)定義處通過宏定義的方式進行申明,就會在系統(tǒng)啟動過程中被執(zhí)行,非常的方便。 1 普通初始化 前面也講了,我們在寫單片機的程序時,需要對硬件進行初始化操作
    的頭像 發(fā)表于 06-25 21:38 ?1.2w次閱讀
    RT-Thread自動<b class='flag-5'>初始化</b>詳解

    請問GPIO初始化步驟是怎樣的?

    請問GPIO初始化步驟是怎樣的?
    發(fā)表于 11-25 07:09

    STM32 TIMER初始化步驟是怎樣的?

    STM32 TIMER初始化步驟是怎樣的?
    發(fā)表于 12-16 07:23

    操作擦除SPIM必須注意事項說明

    操作擦除SPIM必須注意事項說明當(dāng)擦除SPIM操作代碼放置在非零等待區(qū)(NZW)時,可能導(dǎo)致程序執(zhí)行異常、進hardfault 等錯誤。
    發(fā)表于 10-23 06:55

    手機模塊初始化向?qū)?/a>

    手機模塊初始化向?qū)?為了剛好的對手機模塊進行初始化,所以把最基本的向?qū)懴聛?本向?qū)нm用于本公司的西門子TC35I和華為GT9000模塊。一、在初始化手機模塊前,請先確定DT
    發(fā)表于 09-18 09:41 ?17次下載

    CR95HF 的初始化步驟

    STM32F103上的CR95HF 的初始化步驟
    發(fā)表于 12-14 16:01 ?0次下載

    RDA1846S初始化設(shè)置

    RDA1846S初始化設(shè)置RDA1846S初始化設(shè)置RDA1846S初始化設(shè)置
    發(fā)表于 01-15 17:08 ?0次下載

    SEED-DEC2812初始化函數(shù)說明

    SEED-DEC2812系統(tǒng)初始化函數(shù)。
    發(fā)表于 04-13 09:05 ?11次下載
    SEED-DEC2812<b class='flag-5'>初始化</b>函數(shù)<b class='flag-5'>說明</b>

    uboot和內(nèi)核里phy的初始化_內(nèi)核里的雙網(wǎng)絡(luò)配置及phy的初始化

    uboot 和內(nèi)核里 phy 的初始化,以及內(nèi)核里的雙網(wǎng)絡(luò)配置及 phy 的初始化。 本文以盈鵬飛嵌入式的CoM-335x(基于AM335x)核心板及網(wǎng)絡(luò)芯片LAN8720 為例,說明修改步驟
    的頭像 發(fā)表于 05-17 08:19 ?1.2w次閱讀

    8259a初始化步驟及代碼介紹

    本文首先介紹了8259a工作初始化步驟及程序,其次介紹了通過OCW對8259A進行操作方法,最后介紹了8259A初始化編程。
    的頭像 發(fā)表于 05-23 14:24 ?3.1w次閱讀
    8259a<b class='flag-5'>初始化</b>的<b class='flag-5'>步驟</b>及代碼介紹

    STM32 GPIO的基本結(jié)構(gòu)工作模式和初始化步驟的詳細資料概述

    本文檔的主要內(nèi)容詳細介紹的是STM32 GPIO的基本結(jié)構(gòu)工作模式和初始化步驟的詳細資料概述。
    發(fā)表于 10-12 08:00 ?22次下載
    STM32 GPIO的基本結(jié)構(gòu)工作模式和<b class='flag-5'>初始化</b><b class='flag-5'>步驟</b>的詳細資料概述

    51單片機定時器的初始化步驟詳細說明

    本文檔的主要內(nèi)容詳細介紹的是51單片機定時器的初始化步驟詳細說明。
    發(fā)表于 07-03 17:42 ?6次下載
    51單片機定時器的<b class='flag-5'>初始化</b><b class='flag-5'>步驟</b>詳細<b class='flag-5'>說明</b>

    Armlinux內(nèi)核移植及系統(tǒng)初始化過程分析

    Armlinux內(nèi)核移植及系統(tǒng)初始化過程分析說明
    發(fā)表于 04-06 15:53 ?11次下載

    Nand Flash驅(qū)動(實現(xiàn)初始化以及讀操作)

    Nand Flash驅(qū)動(實現(xiàn)初始化以及讀操作)
    發(fā)表于 12-02 12:36 ?11次下載
    Nand Flash驅(qū)動(實現(xiàn)<b class='flag-5'>初始化</b>以及讀<b class='flag-5'>操作</b>)

    ST7789屏幕初始化步驟

    st7789的屏幕構(gòu)建系統(tǒng)和配置 驅(qū)屏就是初始化 DC轉(zhuǎn)換和cs
    的頭像 發(fā)表于 10-16 09:27 ?8152次閱讀