<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 手機與無線通信 > 設(shè)計應(yīng)用 > AMetal平臺快速實現(xiàn)SPI Flash功能

          AMetal平臺快速實現(xiàn)SPI Flash功能

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

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

          本文引用地址:http://www.ex-cimer.com/article/201907/402869.htm

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

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

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

          1563498758364210.png

          圖1  IS25xx初始化接口函數(shù)

          1.am_is25xx_dev_t為IS25xx的設(shè)備實例,為整個外設(shè)驅(qū)動提供必要的內(nèi)存空間,用戶只需要使用設(shè)備結(jié)構(gòu)體類型定義一個變量即可;

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

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

          IS25實例初始化函數(shù)為:

          1563498783561538.png

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

          am_is25xx_handle_t is25xx_handle = am_microport_flash_is25xx_inst_init(void);

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

          1563498802428562.png

          圖2  IS25xx功能接口函數(shù)

          1.擦除

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

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

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

          2.寫入數(shù)據(jù)

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

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

          其中,addr為待寫入?yún)^(qū)域的首地址,只要確保addr之后的區(qū)域已經(jīng)經(jīng)過擦除,則可以從該芯片中任一存儲地址開始寫入,len為寫入數(shù)據(jù)長度。返回AM_OK,說明寫入數(shù)據(jù)成功;

          3.讀取數(shù)據(jù)

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

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

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

          由于讀、寫數(shù)據(jù)需要的緩存空間較大,最好從全局?jǐn)?shù)據(jù)區(qū)域中分配緩存。如果直接從函數(shù)的運行棧中分配較大字節(jié)空間,則完全有可能導(dǎo)致棧溢出,進而系統(tǒng)崩潰。

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



          關(guān)鍵詞: AMetal平臺 SPI Flash功能

          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();