簡介
按照文檔進行配置
核心代碼如下
/*!* @file sweeprom_demo.c** @brief This file provides sweeprom demo test function.**//* =========================================== Includes =========================================== */
#include <stdlib.h>
#include "ac780x_sweeprom.h"
#include "ac780x_debugout.h"/* ============================================ Define ============================================ */
#define SWEEPROM_SIZE (1024UL) /* Ssoftware eeprom size(Byte) */
#define TEST_WORDS 100
/* =========================================== Typedef ============================================ *//* ========================================== Variables =========================================== */uint32_t g_testA[TEST_WORDS] = {0}; /* Buffer for software eeprom read and write */
uint32_t g_testReadA[TEST_WORDS] = {0};
/* ==================================== Functions declaration ===================================== *//* ====================================== Functions define ======================================== */
/*** @brief elfash overnight test** @param[in] none* @return none*/
void SWEEPROMDemoTest()
{uint32_t i, j = 0;uint32_t tmpCircle = 0; //注意16位只能計算到65536后從0開始,如需更大數字需要32位EFLASH_UnlockCtrl(); //每次重啟都需要初始化/* initialize eeprom size 1KB, locate in the 62th page in eflash */SWEEPROM_Init(SWEEPROM_SIZE, 60);// SWEEPROM_Erase();SWEEPROM_Read(0, (uint16_t *)g_testReadA, 2);tmpCircle = 0;while (j < 100){for (i = 0; i < TEST_WORDS; i++){g_testA[i] = i + tmpCircle;}tmpCircle++;SWEEPROM_Write(0, (uint16_t *)&g_testA[0], TEST_WORDS * 2);SWEEPROM_Read(0, (uint16_t *)g_testReadA, TEST_WORDS * 2);if (j % 10 == 0){for (i = 0; i < TEST_WORDS; i++){printf("%d ", g_testReadA[i]);}printf("\r\n");}j++;}while (1);
}/*** @brief main function** @param[in] none* @return none*/
int main(void)
{InitDebug();InitDelay();// sweepromDemoTest();SWEEPROMDemoTest();while (1);
}
使用ATClink查看內存
通過計算發現在65K的地方
實際上應該是從60頁也就是2K*60=120K的地方。
再測試其他頁,從50頁開始
提出疑問
再看看上面的65K數據,65k/2=32頁,想起來之前從32頁寫過數據,因此再改成32頁。觀察結果發現最后寫的數據沒有變化。
根據打印的結果來看,應該在202最后一個數字,結果不對
最后一個值應該是CA
懷疑是數據沒有擦除,于是擦除全片數據,然后再進行讀寫。
因為從后面寫的話,每次看地址都要把開始地址往后挪一點有點麻煩,于是從第10頁開始寫。然后看內存。
正確結果
最終發現在5000的地址,也就是在剛好20K的地方開始寫數據。
符合我們的頁數設置,第10頁,每頁2K,即第20480的地址就是第10頁的起始地址。
和SWEEPROM_SIZE的關系
頁數的地址搞清楚了,和SWEEPROM_SIZE是否有關系呢?
此時修改SWEEPROM_SIZE大小來看看有何變化
SWEEPROM_SIZE設置為4096,發現沒有變化
測試不同頁設置的結果
試一下是否都是按照這個格式來擦寫
從第56頁的位置開始寫
結果顯示正常
從第60頁開始寫,按照計算應該在
結果正確
經過本次測試,我發現,在讀寫時候應該注意數據長度是16位還是32位。
注意位數——16bit和32bit
在使用16位進行存儲時候,正常存儲袋10個數,在使用32位時候,發現位數不對。
發現多出來幾個數據
SWEEPROM_SIZE的限制
經過測試,從第60頁開始寫,大小為2048時候是正常的