简介
按照文档进行配置
核心代码如下
/*!* @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时候是正常的