公告

大中华汽车电子生态圈社区并入开发者社区- 更多资讯点击此

Tip / 登入 to post questions, reply, level up, and achieve exciting badges. Know more

cross mob

从冗余副本恢复数据时,Em_EEPROM组件读取函数返回值不正确 – KBA227530 (ZH)

从冗余副本恢复数据时,Em_EEPROM组件读取函数返回值不正确 – KBA227530 (ZH)

ChaitanyaV_61
Employee
Employee
50 questions asked 25 likes received 25 sign-ins

Author: LinglingG_46            Version: **

内容:
PSoC® 4, PSoC 5LP或者PSoC 6 MCU器件的PSoC Creator™ 4.2项目,使用Em_EEPROM组件V2_0,V2_10或者V2_20

PSoC 6 MCU的带有psoc6sw-1.0psoc6sw-1.1库的ModusToolbox™ IDE项目,使用模拟EEPROM中间件。

问题:
启用冗余副本并从冗余副本还原数据时,Em_EEPROM_Read()Cy_Em_EEPROM_Read()函数还原Em_EEPROM中的数据,但结果返回值错误。第二次读取操作从Em_EEPROM返回正确的数据。

原因:
此问题是由指针算术中的错误引起的-对两个不同类型的操作数执行求和操作(uint32_t*uint32_t, 这会导致不可预测的操作结果。

解决办法:

你可以使用以下方法解决问题:

1) 找到cy_em_eeprom.c文件并为其创建备份。根据PSoC系列和组件版本,此文件是位于下面的目录中:

PSoC Creator 4.2PSoC 3, PSoC 4或者PSoC 5LP:

a. Em_EEPROM v2_10

     C:\Users\<Username>\Documents\PSoC Creator\4.2\Downloads ( 4.2).cylib\Em_EEPROM_Dynamic_v2_10\API\cy_em_eeprom.c

b. Em_EEPROM v2_20

     C:\Users\<Username>\Documents\PSoC Creator\4.2\Downloads ( 4.2).cylib\Em_EEPROM_Dynamic_v2_20\API\cy_em_eeprom.c

PSoC Creator 4.2PSoC 6 MCU:

a. PDL 3.0.4

    C:\Program Files (x86)\Cypress\PDL\3.0.4\middleware\em_eeprom\cy_em_eeprom.c

b. PDL 3.1.0

   C:\Program Files (x86)\Cypress\PDL\3.1.0\middleware\em_eeprom\cy_em_eeprom.c

ModusToolboxPSoC 6 MCU:

a. ModusToolbox v1.0

    <user_home>\ModusToolbox_1.0\libraries\psoc6sw-1.0\components\psoc6mw\em_eeprom\cy_em_eeprom.c

b. ModusToolbox v1.1

   <user_home>\ModusToolbox_1.1\libraries\psoc6sw-1.1\components\psoc6mw\em_eeprom\cy_em_eeprom.c

2) 更新cy_em_eeprom.c文件中的CheckCrcAndCopy()函数代码。

注意要为PSoC CreatorPSoC 6执行代码更新,请以管理员权限运行编辑器软件。

找到下面代码:

if(CY_EM_EEPROM_SUCCESS == ret)

        {

(void)memcpy((void *)(dstAddr), (void *)(writeRamBuffer + rowOffset), numBytes);

        }

        ...

用以下包含替代方法的代码替换上面的代码:

if(CY_EM_EEPROM_SUCCESS == ret)

{

            (void)memcpy((void *)(dstAddr), (void *)((uint32_t)writeRamBuffer + rowOffset), numBytes);

}

        ...

0 点赞
296 次查看
贡献者