英飞凌
直播中

石玉兰

8年用户 1526经验值
私信 关注

CY8C4247AZI-M485 EEPROM相关的问题求解

我使用的是 Psoc4 Creator4.4 在 ide 和 CY8C4247AZI-M485(CY8CKIT-044 PSOC 4 M 系列)开发套件中,我使用了 EEPROM 示例代码,而根据 CY8C4247AZI-M485 数据表,mcu 中没有 EEPROM。
能否告诉我 EEPROM 在哪里,我的代码在哪个位置写入和读取等。







示例代码 :
#include"rtc.h"#include // 包括用于字符串操作的字符串库
/* 处理错误的函数原型 */
void HandleError(void);
/* Em_EEPROM 的逻辑大小 */
#define LOGICAL_EEPROM_SIZE 15u
#define LOGICAL_EEPROM_START 0u
/* 复位计数器在 Em_EEPROM 中的位置 */
#define RESET_COUNT_LOCAtiON 13u
#define RESET_COUNT_SIZE 2u
/* ASCII"9" */
#define ASCII_NINE 0x39
/* ASCII"0" */
#define ASCII_ZERO 0x30
/* ASCII"P" */
#define ASCII_P 0x50
/* EEPROM 和 UART 的返回状态 */
cy_en_em_eeprom_status_t eepromReturnValue;
/* 工作闪存中的 EEPROM 存储,在 Em_EEPROM.c 中定义 */
#if defined (__ICCARM__)
#pragma data_alignment = CY_FLASH_SIZEOF_ROW
const uint8_t Em_EEPROM_em_EepromStorage[Em_EEPROM_PHYSICAL_SIZE] = {0u};
#else
const uint8_t Em_EEPROM_em_EepromStorage[Em_EEPROM_PHYSICAL_SIZE] __ALIGNED(CY_FLASH_SIZEOF_ROW) = {0u};
#endif /* defined (__ICCARM__) */
/* 用于保存 EEPROM 读写数据的 RAM 数组 */
uint8_t eepromArray[LOGICAL_EEPROM_SIZE];
char stringToWrite[] ="Hello World"; // 定义要写入的字符串
int main(void)
{
__enable_irq();
/* 使用内存位置的起始地址初始化 EEPROM */
eepromReturnValue = Em_EEPROM_Init((uint32_t)Em_EEPROM_em_EepromStorage);
if(eepromReturnValue != CY_EM_EEPROM_SUCCESS)
{
HandleError();
}
UART_PutString("EmEEPROM demo nr");

/* 从 EEPROM 存储器中读取 */
eepromReturnValue = Em_EEPROM_Read(LOGICAL_EEPROM_START, eepromArray, LOGICAL_EEPROM_SIZE);
if(eepromReturnValue != CY_EM_EEPROM_SUCCESS)
{
HandleError();
}

/* 如果 EEPROM 的第一个字节不是 "P",则写入数据 */
if(eepromArray[0] != ASCII_P)
{
/* 将字符串写入 EEPROM */
eepromReturnValue = Em_EEPROM_Write(LOGICAL_EEPROM_START, (uint8_t*)stringToWrite, strlen(stringToWrite));
if(eepromReturnValue != CY_EM_EEPROM_SUCCESS)
{
HandleError();
}
}
/* 否则,更新计数器 */
else
{
/* 读取 EEPROM 内容 */
eepromReturnValue = Em_EEPROM_Read(LOGICAL_EEPROM_START, eepromArray, LOGICAL_EEPROM_SIZE);
if(eepromReturnValue != CY_EM_EEPROM_SUCCESS)
{
HandleError();
}

/* 计数器递增 1 */
eepromArray[RESET_COUNT_LOCATION+1]++;

/* Counter is in ASCII, handle overflow */
if(eepromArray[RESET_COUNT_LOCATION+1]> ASCII_NINE)
{
/* 设置低位数字为 0 */
eepromArray[RESET_COUNT_LOCATION+1] = ASCII_ZERO;
*/
eepromArray[RESET_COUNT_LOCATION]++;

/* 只递增到 99 */
if(eepromArray[RESET_COUNT_LOCATION]> ASCII_NINE)
{
eepromArray[RESET_COUNT_LOCATION] = ASCII_NINE;
eepromArray[RESET_COUNT_LOCATION+1] = ASCII_NINE;
}
}

/* 更新 EEPROM 中的计数器值 */
eepromReturnValue = Em_EEPROM_Write(RESET_COUNT_LOCATION, eepromArray[RESET_COUNT_LOCATION], RESET_COUNT_SIZE);
if(eepromReturnValue != CY_EM_EEPROM_SUCCESS)
{
HandleError();
}
}

/* 读取写入后 EEPROM 的内容 */
eepromReturnValue = Em_EEPROM_Read(LOGICAL_EEPROM_START, eepromArray, LOGICAL_EEPROM_SIZE);
if(eepromReturnValue != CY_EM_EEPROM_SUCCESS)
{
HandleError();
}

/* 打印 EEPROM 内容到控制台 */
UART_PutArray(eepromArray, LOGICAL_EEPROM_SIZE);
UART_PutString("nr");
for (;;)
{

}
}
/* 处理错误的函数 */
void HandleError(void)
{
UART_PutString("Error! nr");
/* 禁用所有中断 */
__disable_irq();

/* 无限循环 */
while(1u) {}
}

回帖(1)

王凤兰

2024-5-29 10:39:56
PSoC4 MCU 不使用 EEPROM,而是使用 FLASH 存储器。 FLASH 和 EEPROM 在实际操作中类似,但 FLASH 需要块读/写,而 EEPROM 需要字节读/写。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分