NXP JN5168/JN5169 JN5168/9是NXP推出的zigbee芯片, EEPROM片內EEPROM有4KB,并按64字節分段,共64段。擦除中按段擦除。每個bit擦除后數據為全零,可編程由0改寫為1。EEPROM的API函數使用(參考JN-UG-3087 17.EEPROM): - 初始化:u16AHI_InitialiseEEP() 初始化時調用,必須在讀寫之前調用
- 寫操作:iAHI_WriteDataIntoEEPROMsegment(),可對隨機地址進行寫操作,但只能從0改寫為1
- 讀操作:iAHI_ReadDataFromEEPROMsegment(),可隨機讀取,但是智能在段內讀取,起始地址+長度超過段的總長時將會抱錯。
- 擦除段:iAHI_EraseEEPROMsegment()
除EEPROM直接讀寫外,NXP還提供了PDM支持,可像訪問文件系統一樣訪問EEPROM,對存儲空間的管理有PDM進行管理。用戶層可只接進行簡單的讀、寫、刪除操作。 PDM(Persistent Data Manager)NXP提供的PDM功能支持片外SPI Flash和片上EEPROM,此處說明的是片上的EEPROM。參考JN-UG-3075 第四章,第三章介紹片外Flash。
主要的API接口函數: - PDM_eInitialise():初始化函數,一般使用PDM_eInitialise(63);
初始化- CFLAGS += -DPDM_NO_RTOS:使用IEEE802.15.4 SDK(如JN-SW-4163)時,需要在Makefile中增加此宏定義。此模式下不支持互斥。
- 使用JenNet-IP SDK(如JN-SW-41645)時,不需要修改Makefile,PDM默認的是此模式,此模式下支持互斥。初始化函數PDM_eInitialise需要增加互斥參數
數據管理數據在EEPROM中的存儲是按段為單位的,即最小的存儲單元是64字節,即便只存儲了1個字節,數據存儲超出當前段,將使用另一個段。每個段中的64字節中有效存儲空間為56字節,另外的8個字節由PDM使用。并且PDM中對每條記錄的訪問是按ID進行的,類似于文件名。 - 按ID進行存儲操作
- 每條存儲占用的空間為56字節的整數倍(實際上是64字節,有效字節數是56)
- 參考DEMO中的ID定義在PDM_IDs.h中
協議棧通PDM進行的數據存儲由協議棧自動完成存儲、更新。
可存儲內容包含,但不限于:- Application layer data:
AIB members, such as the EPID and ZDO state
Group Address table
Binding table
Application key-pair descriptor
Trust Centre device table - Network layer data:
NIB members, such as PAN ID and radio channel
Neighbour table
Network keys
Address Map table
存儲API: PDM_eSaveRecordData()
數據的存儲過程是把待存儲的數據先存儲到空閑的空間中,然后再回收原來的存儲空間,因此寫數據之前最好檢查當前空閑段是否夠用。API函數為PDM_u8GetSegmentCapacity() 讀取API: PDM_eReadDataFromRecord()
讀之前可判斷數據是存在,API函數PDM_bDoesDataExist(),返回數據長度 刪除API: PDM_eDeleteData() 計數器一個計數器占用1個段,即64字節。包含起始值(Start Value)和增量值(Incremental Value)。當前值=起始值+增量值。為了均衡EEPROM的擦除次數,段內的每個空余字節的每個位代表1,即每增加一次段中將會把下一個空閑位寫1,當寫到字段末尾時,將自動切換到下一個段重新開始,即起始值=上一段的起始值+增量值的和,增量值被重新賦值為0。舊的段內的數據會由PDM進行回收
API: - 創建:PDM_eCreateBitmap(),同樣創建時需要一個16位的ID
- 增加:PDM_eIncrementBitmap(),超出當前段時會自動切換到新的段中
- 讀值:PDM_eGetBitmap(),返回當前段的起始值與增量值的和
- 刪除:PDM_eDeleteBitmap(),會擦除當前段和歷史段
關于PDM的自動回收問題并沒有找到確切的說明,算是猜測。不過如果不回收,豈不是會很快就填滿PDM,這樣的bug就好呵呵了。 擦寫均衡每個段有個擦除次數記錄,PDM使用時會優先找值低的段,以均衡各段的擦寫次數。 現貨供應 馬工 13823683914 qq 2355573217
|