新聞中心

        EEPW首頁 > 手機與無線通信 > 設計應用 > AMetal平臺快速實現SPI Flash功能

        AMetal平臺快速實現SPI Flash功能

        作者: 時間:2019-07-19 來源:電子產品世界 收藏
        編者按:SPI NOR Flash是一種片外擴展存儲器,可用來存儲圖片、字庫等大量數據,其種類繁多,應用廣泛,用戶每次使用時都需耗費大量時間閱讀相關的手冊。如何快速實現類似的相關功能呢?下文做詳細介紹。

        由于 NOR Flash種類繁多,我們每次使用 NOR Flash時,都耗費許多時間在閱讀相關的手冊上。AMetal助你快速實現!即使不閱讀Flash芯片手冊,也能順利使用,可以把專注力投入到應用優化和算法中,提升產品質量。

        本文引用地址:http://www.104case.com/article/201907/402869.htm

        提供了IS25xx、MX25xx等系列 NOR Flash的組件,提供初始化函數及豐富的功能接口。

        本次介紹所使用的SPI NOR Flash為:IS25LP064A。IS25LP064A是ISSI的其中一款存儲芯片,采用SOIC封裝,50MHz正常讀取,DTR高達66MHz,超過100000次擦除,具有高靈活性和高性能。該器件可通過4線SPI接口訪問,支持SPI模式0和模式3。該芯片可編程頁大小為256Bytes,可選擇的擦除方式為:扇區擦除、塊擦除、整片擦除。

        使用之前,必須先完成該芯片的初始化,初始化IS25xx的函數如圖1所示,完成初始化后為設備的驅動函數提供實例化句柄。

        1563498758364210.png

        圖1  IS25xx初始化接口函數

        1.am_is25xx_dev_t為IS25xx的設備實例,為整個外設驅動提供必要的內存空間,用戶只需要使用設備結構體類型定義一個變量即可;

        2.am_is25xx_devinfo_t為IS25xx的設備信息,包括使用的SPI模式、SPI片選引腳、使用的SPI速率以及器件型號,用戶按實際使用進行配置即可正常工作;

        3.IS25初始化函數中am_spi_handle_t為主機MCU的SPI初始化,支持的MCU提供了標準化的SPI接口函數及初始化函數,實際使用時,通常只需根據實際情況配置SPI使用的引腳,提供SPI標準服務句柄。

        IS25實例初始化函數為:

        1563498783561538.png

        在硬件連接一致的情況下,可直接調用IS25xx實例初始化函數完成SPI Flash的初始化:

        am_is25xx_handle_t is25xx_handle = am_microport_flash_is25xx_inst_init(void);

        SPI Flash比較特殊,在寫入數據之前必須確保相應的地址單元已經被擦除,因此除了讀、寫函數外,還有一個擦除函數。IS25功能接口函數如圖2所示。

        1563498802428562.png

        圖2  IS25xx功能接口函數

        1.擦除

        擦除就是將數據全部重置為0xFF,即所有存儲單元的位設置為1。擦除操作不能直接擦除某個單一地址單元,擦除的最小單元是扇區,IS25一個扇區大小為4KB,即每次只能擦除單個或多個扇區。擦除函數原型為:

        int am_is25xx_erase(am_is25xx_handle_t handle, uint32_t addr, uint32_t len);

        其中,handle為IS25xx的實例句柄,addr為待擦除區域的首地址,由于擦除的最小單元為扇區,因此該地址必須為某個扇區的起始地址,len為擦除長度,必須為扇區大小的整數倍。返回AM_OK,說明擦除成功;

        2.寫入數據

        在寫入數據前,必須確保寫入地址已被擦除。即需要變為0的位清0,寫入操作無法將0變為1。從指定的起始地址開始寫入一段數據的函數原型為:

        int am_is25xx_write(am_is25xx_handle_t handle, uint32_t addr, uint8_t *p_buf, uint32_t len);

        其中,addr為待寫入區域的首地址,只要確保addr之后的區域已經經過擦除,則可以從該芯片中任一存儲地址開始寫入,len為寫入數據長度。返回AM_OK,說明寫入數據成功;

        3.讀取數據

        從指定的起始地址開始讀取一段數據的函數原型為:

        int am_is25xx_read(am_is25xx_handle_t handle, uint32_t addr, uint8_t *p_buf, uint32_t len);

        其中,addr為待讀取區域的首地址,可以指定該芯片中任一存儲地址開始讀取,len為讀取數據長度。返回AM_OK,說明讀取數據成功。

        由于讀、寫數據需要的緩存空間較大,最好從全局數據區域中分配緩存。如果直接從函數的運行棧中分配較大字節空間,則完全有可能導致棧溢出,進而系統崩潰。

        提供了較全面的功能接口函數,所有接口函數均脫離底層,不與具體硬件綁定,切換MCU可快速移植。AMetal助你快速實現SPI ,將專注力投入到核心應用部分,讓具有競爭力的產品更快走向市場!



        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 若尔盖县| 嘉峪关市| 织金县| 长垣县| 老河口市| 海丰县| 大田县| 察雅县| 高安市| 延川县| 宜城市| 黄大仙区| 新疆| 缙云县| 皋兰县| 鞍山市| 莱西市| 永州市| 开封县| 东源县| 孝昌县| 淮南市| 桃源县| 海丰县| 华容县| 永嘉县| 福安市| 杭锦后旗| 山阴县| 和政县| 巴塘县| 青阳县| 扬州市| 奎屯市| 尉犁县| 鱼台县| 淳化县| 巨野县| 麦盖提县| 新密市| 牟定县|