英飞凌
直播中

王涛

7年用户 1234经验值
私信 关注

PSoC5LP:ECC总是返回失败的原因?

我正在做一个项目,需要在启动时检查闪存的完整性。
PSoC 是 CY8C5667AXI-LP040,我使用的是 Creator 4.3(ARM GCC 5.4-2016-q2-update)
启用 ECC 后,使用 AN78175 项目提供的示例和 SelfTest_FlashECC() 函数应该很容易:


    uint8_t SelfTest_FlashECC(void)    {                uint8_t ret = OK_STATUS;                        /* If PSoC 3 */        #if defined(__C51__)                            uint16 ecc_status;                    /* Read the status registers for ECC interrupts. Refer to the Register Reference manual for more details on registers */            ecc_status = CY_GET_REG16(CYREG_CACHE_INT_LOG3);                        /* If bit is set, a 1-bit Error has been detected and corrected */            if(ecc_status   0x0001u)                        {                ret = ONE_BIT_ERROR;                        }                        else                        {                                        /* Read the status registers for ECC interrupts. Refer to the Register Reference manual for more details                        on registers */                                    ecc_status = CY_GET_REG16(CYREG_CACHE_INT_LOG4);                            /* If bit is set, a 2-bit Error has been detected but not corrected */                    if(ecc_status   0x0001u)                                {                        ret = ERROR_STATUS;                                }                        }                                /* If PSoC 5LP */            #elif defined(__GNUC__) || defined(__CC_ARM) || defined(__ARMCC_VERSION)                                        uint32 ecc_status;                    /* Read the status registers for ECC interrupts. Refer to the Register Reference manual for more details on registers */            ecc_status = CY_GET_REG32(CYREG_CACHE_ECC_CORR);                    /* If bit is set, a 1-bit Error has been detected and corrected */            if(ecc_status   0x00000001u)                        {                                                /* Clear ECC correction bit */                                CY_SET_REG32(CYREG_CACHE_ECC_CORR, ~0x00000001u);                                ret = ONE_BIT_ERROR;                        }                        else                        {                                        /* Read the status registers for ECC interrupts. Refer to the Register Reference manual for more details                        on registers */                                    ecc_status = CY_GET_REG32(CYREG_CACHE_ECC_ERR);                            /* If bit is set, a 2-bit Error has been detected but not corrected */                    if(ecc_status   0x00000001u)                                {                                                        /* Clear ECC error bit */                                        CY_SET_REG32(CYREG_CACHE_ECC_ERR, ~0x00000001u);                                        ret = ERROR_STATUS;                                }                        }                                #endif                       return ret;        }我是在 main() 开始执行时,紧接着 CyGlobalIntEnable 之后调用它的。  问题是,由于某些原因,我得到的结果几乎都是 ERROR_STATUS (0x01)。
我觉得这很奇怪,因为闪存本身出现问题的可能性微乎其微,而且 ECC 检查非常简单,只需检查几个寄存器标志(ERROR 和 CORRECTED 标志)。
我是不是漏掉了什么?  是什么原因导致错误报告 ERROR_STATUS?   特别是这块集成电路出现闪光灯问题的实际几率有多大?
如果有任何想法,我将不胜感激,这看起来真的应该"Just Work" ,而且我真的不确定我可以调整什么来"修复" 这个问题。

回帖(1)

china

2024-5-30 14:34:24
为了解决PSoC5LP ECC总是返回失败的问题,我们可以按照以下步骤进行排查和解决:

1. 确认硬件配置:首先,确保您的PSoC设备(CY8C5667AXI-LP040)支持ECC功能。请查阅数据手册以确认这一点。

2. 检查软件配置:确保在PSoC Creator中正确配置了ECC。在PSoC Creator中,您需要在“Device Config”选项卡中启用ECC功能。请按照AN78175文档中的指导进行配置。

3. 检查示例代码:确保您使用的示例代码(SelfTest_FlashECC()函数)是针对PSoC 5LP设备编写的。如果示例代码是为PSoC 3设备编写的,那么它可能不适用于PSoC 5LP设备。

4. 检查Flash编程:确保Flash存储器已正确编程,并且包含有效的数据。如果Flash存储器中的数据损坏或不正确,ECC校验可能会失败。

5. 检查ECC算法:确保使用的ECC算法与您的项目需求相匹配。PSoC 5LP支持多种ECC算法,如BCH和汉明码。请根据您的项目需求选择合适的算法。

6. 调试和日志记录:在SelfTest_FlashECC()函数中添加调试信息和日志记录,以便更好地了解ECC校验失败的原因。这可以帮助您确定问题出在哪个环节。

7. 更新软件:检查是否有适用于PSoC Creator 4.3和ARM GCC 5.4-2016-q2-update的更新或补丁。这些更新可能包含针对ECC问题的修复。

8. 寻求技术支持:如果以上步骤都无法解决问题,您可以联系Cypress技术支持团队寻求帮助。他们可以为您提供专业的技术支持和解决方案。

通过以上步骤,您应该能够找到导致PSoC5LP ECC总是返回失败的原因,并采取相应的解决措施。
举报

更多回帖

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