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