完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我正在做一个项目,需要在启动时检查闪存的完整性。
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个回答
|
|
为了解决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总是返回失败的原因,并采取相应的解决措施。 |
|
|
|
只有小组成员才能发言,加入小组>>
请教个XMC1404调试串口接收时为什么一直无法接收数据的问题
377 浏览 0 评论
TLE9879_BLDC电机启动需要用手拨一下才能转动,怎么解决?
6426 浏览 2 评论
4112 浏览 9 评论
请问TLE5012B_E1000 启动后为什么位置不能正确获取
3639 浏览 9 评论
1236 浏览 8 评论
467浏览 2评论
276浏览 2评论
385浏览 2评论
TLE9879_BLDC电机启动需要用手拨一下才能转动,怎么解决?
6432浏览 2评论
如果是打开已有的dave工程,怎么查看这个工程选择的mcu型号?
471浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-28 20:59 , Processed in 0.686808 second(s), Total 77, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号