在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

3天內不再提示

EEPROM存儲器外設及驅動代碼應用設計

UtFs_Zlgmcu7890 ? 來源:互聯(lián)網 ? 作者:佚名 ? 2017-12-20 06:28 ? 次閱讀

開發(fā)者的最大問題是核心域和非核心域不分,大部分時間都在編寫不可重用的和非核心域的代碼。沒有聚焦提升產品競爭力的核心域知識,比如,需求、算法、用戶體驗和軟件工程方法等方面,從而導致代碼維護的成本遠遠大于初期的開發(fā)投入。

事實上,那些做出優(yōu)秀產品的團隊,不僅員工隊伍非常穩(wěn)定,而且收入也很高,甚至連精神面貌都不一樣。因為他們使用了正確的開發(fā)策略和方法,而且短時間內掌握的技術遠勝那些所謂的“老程序員”。雖然每個企業(yè)都有拿高薪的員工,但為何不是你?別人開發(fā)的產品大賣,而你開發(fā)的產品卻賣不掉?不僅浪費了來之不易的資金,而且導致我們失去了更多的創(chuàng)造更大價值的機會。

十幾年前,作者也面臨同樣的問題,于是毫不猶豫地投身于軟硬件標準化平臺技術的開發(fā),因為只有方法的突破才能開創(chuàng)未來。AWorks 就是在這樣的背景下誕生的,脫胎于Aworks—Nano 子集的AMetal 不僅實現(xiàn)了跨平臺,而且還定義了外圍器件的軟件接口標準,因此“按需定制”為用戶提供有價值的服務也就成為了現(xiàn)實。

基于此,ZLG 為用戶提供了大量標準的外設驅動與相關的協(xié)議組件,意在建立完整的生態(tài)系統(tǒng)。無論你選擇什么MCU,只要支持AMetal,都可實現(xiàn)“一次編程、終生使用”,其好處是你再也不要重新發(fā)明輪子。

6.1 E2PROM 存儲器

E2PROM(Electrically Erasable Programable Read-Only Memory,電可擦除可編程只讀存儲器)是一種掉電后數據不丟失的存儲芯片,本節(jié)以FM24C02 為例詳細介紹在AMetal 中如何使用類似的非易失存儲器。

>>> 6.1.1 器件簡介

FM24C02 總容量為2K(2048)bits,即256(2048/8)字節(jié)。每個字節(jié)對應一個存儲地址,因此其存儲數據的地址范圍為0x00 ~ 0xFF。FM24C02 頁(page)的大小為8 字節(jié),每次寫入數據不能越過頁邊界,即地址0x08、0x10、0x18……;如果寫入數據越過頁邊界時,則必須分多次寫入,其組織結構詳見表6.1。

表6.1 FM24C02 存儲器組織結構

FM24C02 的通信接口為標準的I2C 接口,僅需SDA 和SCL 兩根信號線。這里以8PIN SOIC 封裝為例,詳見圖6.1。其中的WP 為寫保護,當該引腳接高電平時,將阻止一切寫入操作。一般來說,該引腳直接直接接地,以便芯片正常讀寫。

圖6.1 FM24C02 引腳定義

A2、A1、A0 決定了FM24C02 器件的I2C 從機地址,其7-bit 從機地址為0101 0A2A1A0。如果I2C 總線上僅有一片F(xiàn)M24C02,則將A2、A1、A0 直接接地,其地址為0x50。

在AMetal 中,由于用戶無需關心讀/寫方向位的控制,因此其地址使用7-bit 地址表示。MicroPort-EEPROM 模塊通過MicroPort 接口與AM824-Core 相連,詳見圖6.2,其中的E2PROM 是復旦微半導體提供的256 個字節(jié)FM24C02C。

圖6.2 E2PROM 電路原理

>>> 6.1.2 初始化

AMetal 提供了支持FM24C02 、FM24C04 、FM24C08……等系列I2C 接口E2PROM 的驅動函數,下面將以FM24C02 為例予以說明,其函數原型(am_ep24cxx.h)為:

該函數意在獲取器件實例句柄fm24c02_handle,其中,p_dev 為指向am_ep24cxx_dev_t類型實例的指針,p_devinfo 為指向am_ep24cxx_devinfo_t 類型實例信息的指針。

1. 實例

單個FM24C02 可以看作EP24Cxx 的一個實例,EP24Cxx 只是抽象了代表一個系列或同種類型的E2PROM 芯片,顯然多個FM24C02 是EP24Cxx 的多個實例。如果I2C 總線上只外接了一個FM24C02,定義am_ep24cxx_dev_t 類型(am_ep24cxx.h)實例如下:

其中,g_at24c02_dev 為用戶自定義的實例,其地址作為p_dev 的實參傳遞。如果同一個I2C 總線上外接了2 個FM24C02,需要定義3 個實例。即:

每個實例都要初始化,且每個實例的初始化均會返回一個該實例的handle。便于使用其它接口函數時,傳遞不同的handle 操作不同的實例。

2. 實例信息

實例信息主要描述了具體器件固有的信息,即I2C 器件的從機地址和具體型號,其類型am_ep24cxx_devinfo_t 的定義(am_ep24cxx.h)如下:

當前已經支持的器件型號均在am_ep24cxx.h 中定義了對應的宏,比如,F(xiàn)M24C02 對應的宏為AM_EP24CXX_FM24C02,實例信息定義如下:

其中,g_24c02_devinfo 為用戶自定義的實例信息,其地址作為p_devinfo 的實參傳遞。

3. I2C 句柄i2c_handle

I2C1 為例,其實例初始化函數am_lpc82x_i2c1_inst_init()的返回值將作為實參傳遞給i2c_handle。即:

4. 實例句柄fm24c02_handle

FM24C02 初始化函數am_ep24cxx_init ()的返回值fm24c02_handle,作為實參傳遞給讀寫數據函數,其類型am_ep24cxx_handle_t(am_ep24cxx.h)定義如下:

若返回值為NULL,說明初始化失敗;若返回值不為NULL,說明返回一個有效的handle。

基于模塊化編程思想,將初始化相關的實例和實例信息等的定義存放到對應的配置文件中,通過頭文件引出實例初始化函數接口,源文件和頭文件的程序范例分別詳見程序清單6.1 和程序清單6.2。

程序清單6.1 實例初始化函數范例程序(am_hwconf_ep24cxx.c)

程序清單6.2 實例初始化函數接口(am_hwconf_ep24cxx.h)

后續(xù)只需要使用無參數的實例初始化函數,即可獲取到FM24C02 的實例句柄。即:

注意,i2c_handle 用于區(qū)分I2C0、I2C1、I2C2、I2C3,初始化函數返回值實例句柄用于區(qū)分同一系統(tǒng)中連接的多個器件。

>>> 6.1.3 讀寫函數

讀寫EP24Cxx 系列存儲器的函數原型詳見表6.2。

表6.2 ep24cxx 讀寫函數(am_ep24cxx.h)

各API 的返回值含義都是相同的:AM_OK 表示成功,負值表示失敗,失敗原因可根據具體的值查看am_errno.h 文件中相對應的宏定義。正值的含義由各API 自行定義,無特殊說明時,表明不會返回正值。

1. 寫入數據

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

如果返回值為AM_OK,則說明寫入成功,反之失敗。假定從0x20 地址開始,連續(xù)寫入16 字節(jié),詳見程序清單6.3。

程序清單6.3 寫入數據范例程序

2. 讀取數據

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

如果返回值為AM_OK,則說明讀取成功,反之失敗。假定從0x20 地址開始,連續(xù)讀取16 字節(jié),詳見程序清單6.4。

程序清單6.4 讀取數據范例程序

如程序清單6.5 所示為寫入20 個字節(jié)數據再讀出來,然后比較是否相同的范例。

程序清單6.5 FM24C02 讀寫范例程序

由于app_test_ep24cxx()的參數為實例handle,與EP24Cxx 器件具有依賴關系,因此無法實現(xiàn)跨平臺調用。

>>> 6.1.4 NVRAM 通用接口函數

由于FM24C02 等E2PROM 是典型的非易失存儲器,因此使用NVRAM(非易失存儲器)標準接口讀寫數據就無需關心具體的器件了。使用這些接口函數前,需將工程配置am_prj_config.h 的AM_CFG_NVRAM_ENABLE 宏的值設置為1,相關函數原型詳見表6.3。

表6.3 NVRAM 通用接口函數

1. 初始化函數

NVRAM 初始化函數意在初始化FM24C02 的NVRAM 功能,以便使用NVRAM 標準接口讀寫數據。其函數原型為:

其中,ep24cxx 實例句柄fm24c02_handle 作為實參傳遞給handle,p_dev 為指向am_nvram_dev_t 類型實例的指針,p_dev_name 為分配給FM24C02 的一個NVRAM 設備名,便于其它模塊通過該名字定位到FM24C02 存儲器。

(1)實例(NVRAM 存儲器)

NVRAM 抽象地代表了所有非易失存儲器,F(xiàn)M24C02 可以看作NVRAM 存儲器的一個具體實例。定義am_nvram_dev_t 類型(am_nvram.h)實例如下:

其中,g_24c02_nvram_dev 為用戶自定義的實例,其地址作為p_dev 的實參傳遞。

(2)實例信息

實例信息僅包含一個由p_dev_name 指針指定的設備名。設備名為一個字符串,如"fm24c02"。初始化后,該名字就唯一的確定了一個FM24C02 存儲器設備,如果有多個FM24C02,則可以命名為"fm24c02_0"、"fm24c02_1"、"fm24c02_2"……

基于模塊化編程思想,將初始化FM24C02 為標準的NVRAM 設備的代碼存放到對應的配置文件中,通過頭文件引出相應的實例初始化函數接口,詳見程序清單6.6 和程序清單6.7。

程序清單6.6 新增NVRAM 實例初始化函數(am_hwconf_ep24cxx.c)

程序清單6.7 am_hwconf_ep24cxx.h 文件更新

后續(xù)只需要使用無參數的實例初始化函數,即可完成NVRAM 設備初始化,將FM24C02初始化為名為"fm24c02"的NVRAM 存儲設備。即:

2. 存儲段的定義

NVRAM 定義了存儲段的概念,讀寫函數均對特定的存儲段操作。NVRAM 存儲器可以被劃分為單個或多個存儲段。存儲段的類型am_nvram_segment_t 定義(am_nvram.h)如下:

存儲段的名字p_name 和單元號unit 可以唯一確定一個存儲段,當名字相同時,則使用單元號區(qū)分不同的存儲段。存儲段的名字使得每個存儲段都被賦予了實際的意義,比如,名為"ip"的存儲段表示保存IP 地址的存儲段,名為"temp_limit"的存儲段表示保存溫度上限值的存儲段。seg_addr 為該存儲段在實際存儲器中的起始地址,seg_size 為該存儲段的容量大小。p_dev_name 表示該存儲段對應的實際存儲設備的名字。

如需將存儲段分配到FM24C02 上,則需將存儲段中的p_dev_name 設定為"fm24c02"。后續(xù)針對該存儲段的讀寫操作實際上就是對FM24C02 進行讀寫操作。為了方便管理,所有存儲段統(tǒng)一定義在am_nvram_cfg.c 文件中,默認情況下存儲段為空,其定義為:

在具有FM24C02 存儲設備后,即可新增一些段的定義,如應用程序需要使用4 個存儲段分別存儲2 個IP 地址(4 字節(jié)×2)、溫度上限值(4 字節(jié))和系統(tǒng)參數(50 字節(jié)),對應的存儲段列表(存儲段信息的數組)定義如下:

為了使存儲段生效,必須在系統(tǒng)啟動時調用am_nvram_inst_init ()函數(am_nvram_cfg.h),其函數原型為:

該函數往往在板級初始化函數中調用,可以通過工程配置文件(am_prj_config.h)中的AM_CFG_NVRAM _ENABLE 宏對其進行裁剪,詳見程序清單6.10。

程序清單6.8 在板級初始化中初始化NVRAM

NVRAM 初始化后,根據在am_nvram_cfg.c 文件中定義的存儲段可知,共計增加了5個存儲段,它們的名字、單元號和大小分別詳見表6.4,后續(xù)即可使用通用的NVRAM 讀寫接口對這些存儲段進行讀寫操作。

表6.4 定義的NVRAM 存儲段

3. 寫入數據

寫入數據函數原型為:

其中,p_name 和unit 分別表示存儲段的名字和單元號,確定寫入數據的存儲段,p_buf提供寫入存儲段的數據,offset 表示從存儲段指定的偏移開始寫入數據,len 為寫入數據的長度。若返回值為AM_OK,則說明寫入成功,反之失敗。比如,保存一個IP 地址到IP 存儲段,詳見程序清單6.9。

程序清單6.9 寫入數據范例程序

4. 讀取數據

讀取數據函數原型為:

其中,p_name 和unit 分別為存儲段的名字和單元號,確定讀取數據的存儲段;p_buf保存從存儲段讀到的數據,offset 表示從存儲段指定的偏移開始讀取數據,len 為讀取數據的長度。若返回值為AM_OK,則說明讀取成功,反之失敗。比如,從IP 存儲段中讀取出IP地址,詳見程序清單6.10。

程序清單6.10 讀取數據范例程序

現(xiàn)在編寫NVRAM 通用接口的簡單測試程序,測試某個存儲段的數據讀寫是否正常。雖然測試程序是一個簡單的應用,但基于模塊化編程思想,最好還是將測試相關程序分離出來,程序實現(xiàn)和對應接口的聲明詳見程序清單6.11 和程序清單6.12。

程序清單6.11 測試程序實現(xiàn)(app_test_nvram.c)

程序清單6.12 接口聲明(app_test_nvram.h)

將待測試的存儲段(段名和單元號)通過參數傳遞給測試程序,NVRAM 通用接口對測試段讀寫數據。若讀寫數據的結果完全相等,則返回AM_OK,反之返回AM_ERROR。

由此可見,應用程序的實現(xiàn)不包含任何器件相關的語句,僅僅調用NVRAM 通用接口讀寫指定的存儲段,因此該應用程序是跨平臺的,在任何AMetal 平臺中均可使用,進一步整合NVRAM 通用接口和測試程序的范例詳見程序清單6.13。

程序清單6.13 NVRAM 通用接口讀寫范例程序

顯然,NVRAM 通用接口賦予了名字的存儲段,使得程序在可讀性和可維護性方面都優(yōu)于使用EP24Cxx 讀寫接口。而調用NVRAM 通用接口會耗費一定的內存和CPU 資源,特別是在要求效率很高或內存緊缺的場合,建議使用EP24Cxx 讀寫接口。

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

    關注

    38

    文章

    7494

    瀏覽量

    163895
  • EEPROM
    +關注

    關注

    9

    文章

    1021

    瀏覽量

    81649
  • 周立功
    +關注

    關注

    38

    文章

    130

    瀏覽量

    37656

原文標題:周立功:重用外設驅動代碼——EEPROM 存儲器

文章出處:【微信號:Zlgmcu7890,微信公眾號:周立功單片機】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    詳細講解重用外設驅動代碼_SPI_NOR_Flash存儲器

    第六章為重用外設驅動代碼,本文內容為6.2 SPI NOR Flash 存儲器
    的頭像 發(fā)表于 12-21 07:59 ?1.5w次閱讀
    詳細講解重用<b class='flag-5'>外設</b><b class='flag-5'>驅動</b><b class='flag-5'>代碼</b>_SPI_NOR_Flash<b class='flag-5'>存儲器</b>

    AT25XXX系列EEPROM存儲器驅動設計、實現(xiàn)及使用

    我們在前面開發(fā)過AT24CXX系列EEPROM存儲器,它使用的是I2C接口。不過有時候我們也會使用SPI接口的EEPROM存儲器。在這一篇我們將來討論AT25XXX系列
    發(fā)表于 12-07 16:51 ?4483次閱讀
    AT25XXX系列<b class='flag-5'>EEPROM</b><b class='flag-5'>存儲器</b>的<b class='flag-5'>驅動</b>設計、實現(xiàn)及使用

    串行EEPROM存儲器及應用

    串行EEPROM存儲器及應用
    發(fā)表于 02-05 13:47

    什么是EEPROM存儲器

    什么是EEPROM存儲器
    發(fā)表于 11-01 07:24

    串行EEPROM存儲器及應用

    串行EEPROM存儲器及應用
    發(fā)表于 12-11 23:41 ?0次下載

    使用EEPROM存儲器24C02記憶開機次數的代碼免費下載

    本文檔的主要內容詳細介紹的是使用EEPROM存儲器24C02記憶開機次數的代碼免費下載。
    發(fā)表于 08-26 17:31 ?25次下載
    使用<b class='flag-5'>EEPROM</b><b class='flag-5'>存儲器</b>24C02記憶開機次數的<b class='flag-5'>代碼</b>免費下載

    AT25512存儲器EEPROM代碼免費下載

    本文檔的主要內容詳細介紹的是AT25512存儲器EEPROM代碼免費下載,基于SPI通信的EEPROM存儲器數據
    發(fā)表于 10-09 08:00 ?27次下載
    AT25512<b class='flag-5'>存儲器</b><b class='flag-5'>EEPROM</b><b class='flag-5'>代碼</b>免費下載

    AN4761_通過STM32L476、486的FSMC外設驅動外部存儲器

    AN4761_通過STM32L476、486的FSMC外設驅動外部存儲器
    發(fā)表于 11-21 08:11 ?4次下載
    AN4761_通過STM32L476、486的FSMC<b class='flag-5'>外設</b><b class='flag-5'>驅動</b>外部<b class='flag-5'>存儲器</b>

    AN2784_使用高密度STM32F10xxxFSMC外設驅動外部存儲器

    AN2784_使用高密度STM32F10xxxFSMC外設驅動外部存儲器
    發(fā)表于 11-21 08:11 ?0次下載
    AN2784_使用高密度STM32F10xxxFSMC<b class='flag-5'>外設</b><b class='flag-5'>驅動</b>外部<b class='flag-5'>存儲器</b>

    EEPROM與Flash存儲器的區(qū)別

    在電子技術和計算機系統(tǒng)中,存儲器是不可或缺的組成部分,其類型和功能繁多。EEPROM(Electrically Erasable Programmable Read-Only Memory,電可擦除
    的頭像 發(fā)表于 05-23 16:35 ?6127次閱讀

    eeprom是指什么存儲器

    EEPROM(Electrically Erasable Programmable Read-Only Memory,電可擦可編程只讀存儲器)是一種非易失性存儲器,具有電可擦寫、可編程和只讀的特性
    的頭像 發(fā)表于 08-05 16:53 ?1993次閱讀

    eeprom存儲器為什么會重燒

    EEPROM(Electrically Erasable Programmable Read-Only Memory,電可擦可編程只讀存儲器)是一種非易失性存儲器,可以在不移除芯片的情況下進行
    的頭像 發(fā)表于 08-05 16:59 ?543次閱讀

    EEPROM存儲器可以擦除指定區(qū)域嗎?

    EEPROM(Electrically Erasable Programmable Read-Only Memory,電可擦可編程只讀存儲器)是一種非易失性存儲器,其特點是在斷電后數據依然可以保持
    的頭像 發(fā)表于 08-05 17:10 ?796次閱讀

    EEPROM存儲器每塊多少位?

    EEPROM(Electrically Erasable Programmable Read-Only Memory,電可擦除可編程只讀存儲器)是一種非易失性存儲技術,可以在不移除芯片的情況下
    的頭像 發(fā)表于 08-05 17:14 ?798次閱讀

    EEPROM存儲器如何加密

    EEPROM(Electrically Erasable Programmable Read-Only Memory,電可擦可編程只讀存儲器)是一種非易失性存儲器,它在斷電后仍能保持數據。由于其可
    的頭像 發(fā)表于 08-05 18:05 ?1289次閱讀
    主站蜘蛛池模板: 免费看男女做好爽好硬视频| 亚洲天堂成人在线| 国产免费小视频| 色人久久| 日本中文在线三级在线播放| 人人看人人添人人爽| 亚州一级毛片在线| 天天爽夜夜爽人人爽免费| 高清成人| 欧美黄色片 一级片| 久久综合九色综合欧美狠狠| 国产精品人成在线播放新网站| www.av在线免费观看| 天天色天天色天天色| 国产黄色大片又色又爽| 2018天堂视频免费观看| 日日搞夜夜操| 天天摸夜夜爽| 狠狠干狠狠搞| 一区二区三区福利| 国产性videostv另类极品| 亚州视频一区二区| 亚洲丁香| 你懂得在线网址| 中文在线免费看影视| 久久福利精品| 特大一级aaaaa毛片| 亚洲不卡网| 免费三级毛片| 午夜影院h| 天天干天天干天天干天天干天天干| 久久国产福利| 丝袜美腿一区| 色咯咯| 激情5月婷婷| 国产香港日本三级在线观看| 永久看免费bbbbb视频| 午夜精品久久久久久久99| 国产精品夜夜春夜夜爽| 免费看污视频的网站| 日本黄大乳片免费观看|