打印

《分享我的PSoC技术开发和应用》内部EEPROM

[复制链接]
2024|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xichengmadia|  楼主 | 2013-3-24 21:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
SoC EEPROM存储器是按字节寻址的非易失性存储器。CY8C38 提供了高达 2 KB 的 EEPROM 存储器来存储用户数据。对 EEPROM 的读访问是按字节进行的随机访问。读访问直接进行;写访问则通过向 EEPROM 编程接口发送写指令来进行。在EEPROM   写访问期间,可以继续从闪存执行   CPU   代码。EEPROM 的擦除和写操作是以行为单位进行的。EEPROM 共有128 行,每行有 16 个字节。CPU 不能在 EEPROM 空间内执行代码。没有任何 ECC 硬件与EEPROM  相关联。如果需要  ECC,必须在固件中对其进行处理。
1首先我们放置EEPROM模块。

2 我们参考EEPROMAPI函数

其中前面3个函数针对ES3系列的,我们这里用不着,只用后面的函数。
由于没有通过读函数,我们这里通过读寄存器的方法:
RegPointer = (reg8 *)CYDEV_EE_BASE;

沙发
xichengmadia|  楼主 | 2013-3-24 21:14 | 只看该作者
主函数是
void main()
{
    uint16 Index;
    reg8 * RegPointer;
    static uint8 TestData1[SIZEOF_EEPROM_ROW] = "0123456789ABCDEF";   
    cystatus eraseStatus;
    cystatus writeStatus;
    //int err = 0;
    //EEPROM_Start();
    /* Erase all sectors. */
    for(Index = 0; Index <= EEPROM_NUMBER_SECTORS; Index++)
    {
       eraseStatus = EEPROM_EraseSector(Index);
    }


    /* Check that all EEPROM is zero. */
    RegPointer = (reg8 *)CYDEV_EE_BASE;
    for(Index = 0; Index < EEPROM_EEPROM_SIZE; Index++) // check for whole EEPROM
    {
       if(RegPointer[Index] != 0)
       {
           LEDs_Write(0XFE);//LED1_ON
       }
    }

    /* Write "0123456789ABCDEF" to EEPROM row 0 */   
    writeStatus = EEPROM_Write(TestData1, 0);

    /* Check Data. */
    RegPointer = (reg8 *) CYDEV_EE_BASE;
    for(Index = 0; Index < SIZEOF_EEPROM_ROW; Index++)
    {
        if(TestData1[Index] != RegPointer[Index])
        {
        LEDs_Write(0XFD);//LED2_ON   
        }

    }  

    if(eraseStatus == CYRET_SUCCESS && writeStatus == CYRET_SUCCESS)
    {
        //CharLCD_1_Position(1, 0);
       //CharLCD_1_PrintString("EEPROM TEST PASSED");
       LEDs_Write(0XF7);//LED4_ON
    }
    else
    {
        //CharLCD_1_Position(1, 0);
       //CharLCD_1_PrintString("EEPROM TEST FAILED");
       LEDs_Write(0XFB);//LED3_ON
    }
    for(;;)
    {
    }
}

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

105

主题

1002

帖子

0

粉丝