杰发科技AC7801——Flash模拟EEP内存分布情况

简介

本文记录了在使用AutoChips芯片Flash模拟EEP过程中的一些理解

杰发科技AC7801——Flash模拟EEP内存分布情况_第1张图片

核心代码如下

#include 
#include "ac780x_sweeprom.h"
#include "ac780x_debugout.h"

#define SWEEPROM_SIZE (2048UL) /* Ssoftware eeprom size(Byte) */
#define TEST_WORDS 10

uint32_t g_testA[TEST_WORDS] = {0}; /* Buffer for software eeprom read and write */
uint32_t g_testReadA[TEST_WORDS] = {0};

void SWEEPROMDemoTest()
{
    uint32_t i;
    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();

    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);

    for (i = 0; i < TEST_WORDS; i++)
    {
        printf("%d ", g_testReadA[i]);
    }
    printf("\r\n");
}

int main(void)
{
    InitDebug();
    InitDelay();

    SWEEPROMDemoTest();
    while (1)
        ;
}

使用ATClink查看内存

杰发科技AC7801——Flash模拟EEP内存分布情况_第2张图片

通过计算发现在65K的地方,这个数据和我们计算的60页对不上。

杰发科技AC7801——Flash模拟EEP内存分布情况_第3张图片

杰发科技AC7801——Flash模拟EEP内存分布情况_第4张图片

再测试其他页,从50页开始,发现数据还是没有变化

杰发科技AC7801——Flash模拟EEP内存分布情况_第5张图片

杰发科技AC7801——Flash模拟EEP内存分布情况_第6张图片

提出疑问

再看看上面的65K数据,65k/2=32页,想起来之前从32页写过数据,因此再改成32页。观察结果发现最后写的数据没有变化。

杰发科技AC7801——Flash模拟EEP内存分布情况_第7张图片

根据打印的结果来看,应该在202最后一个数字,结果不对

杰发科技AC7801——Flash模拟EEP内存分布情况_第8张图片

最后一个值应该是CA

杰发科技AC7801——Flash模拟EEP内存分布情况_第9张图片

怀疑是数据没有擦除,于是擦除全片数据,然后再进行读写。

每次看地址都要把开始地址往后挪一点有点麻烦,于是从第10页开始写。然后看内存。

杰发科技AC7801——Flash模拟EEP内存分布情况_第10张图片

正确结果

最终发现在5000的地址,也就是在刚好20K的地方开始写数据。

杰发科技AC7801——Flash模拟EEP内存分布情况_第11张图片

杰发科技AC7801——Flash模拟EEP内存分布情况_第12张图片

符合我们的页数设置,第10页,每页2K,即第20480的地址就是第10页的起始地址

SWEEPROM_SIZE的关系

页数的地址搞清楚了,和SWEEPROM_SIZE是否有关系呢?

此时修改SWEEPROM_SIZE大小来看看有何变化

SWEEPROM_SIZE设置为4096,发现没有变化,看来存储的起始位置和SWEEPROM_SIZE没有关联

杰发科技AC7801——Flash模拟EEP内存分布情况_第13张图片

杰发科技AC7801——Flash模拟EEP内存分布情况_第14张图片

测试不同页设置的结果

试一下是否都是按照这个格式来擦写

从第56页的位置开始写

结果显示正常

杰发科技AC7801——Flash模拟EEP内存分布情况_第15张图片

杰发科技AC7801——Flash模拟EEP内存分布情况_第16张图片

杰发科技AC7801——Flash模拟EEP内存分布情况_第17张图片

从第60页开始写,按照计算应该在

杰发科技AC7801——Flash模拟EEP内存分布情况_第18张图片

结果正确

杰发科技AC7801——Flash模拟EEP内存分布情况_第19张图片

注意位数——16bit和32bit

在使用16位进行存储时候,正常存储10个数,在使用32位时候,发现位数不对。

杰发科技AC7801——Flash模拟EEP内存分布情况_第20张图片

发现多出来几个数据

杰发科技AC7801——Flash模拟EEP内存分布情况_第21张图片

SWEEPROM_SIZE的限制

经过测试,从第60页开始写,大小为2048时候是正常的,如果换成4096读写失败,debug内部表现为HardFault

杰发科技AC7801——Flash模拟EEP内存分布情况_第22张图片

根据公式计算,发现4096=512X8,即8页。而60页到63页总共只有4页,因此从60页开始初始化,使用4096会报错。

杰发科技AC7801——Flash模拟EEP内存分布情况_第23张图片

你可能感兴趣的:(杰发科技,AutoChips,AC7801)