完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
在跑ucosii的时候进行OTA升级擦除失败,关掉系统调度可以擦除成功。单独建立一个裸机工程,跑page擦除程序,Jlink单步调试概率性出现擦除失败,上电一直跑可以擦除成功。这是芯片的限制么,还是flash在擦除的时候有需要注意的点没有注意到。
单步调试有时一进入HAL_FLASHEx_Erase( EraseInitStruct, PAGEError),就会引起SR寄存器报下面的错误: PGSERR:编程顺序错误 SIZERR:尺寸错误 PGAERR:编程对齐错误 感觉这些不是导致错误出现的主因,而是别的错误发生了从而置位了SR寄存器。下面贴一下我的初始化代码 while(status != HAL_OK) { status = HAL_FLASH_Unlock(); } /* Clear OPTVERR bit set on virgin samples */ __HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_OPTVERR); while(addr + offset < addr + len) { bank = GetBank(addr + offset); EraseInitStruct.Banks = bank; EraseInitStruct.TypeErase = FLASH_TYPEERASE_PAGES; EraseInitStruct.Page = GetPage(addr + offset); //EraseInitStruct.Page = (addr + offset)/FLASH_PAGE_SIZE; EraseInitStruct.NbPages = 1; offset += FLASH_PAGE_SIZE; status = HAL_FLASHEx_Erase( EraseInitStruct, PAGEError); if (status != HAL_OK) { printf("flash erase fail, addr:0x%x, len:0x%x, errpage:%d, errcode:%d, ret:%drn", addr, len, PAGEError, pFlash.ErrorCode, status); ret = -1; goto lock; } } 这段代码就是单步调试会返回错误的程序了,返回的错误就是上述的PGSERR,SIZERR,PGAERR。个人仔细检查了初始化参数,应该是没有问题的。而且工程中并没有看门狗操作,一开始觉得有可能是在flash未解锁情况下操作了flash,后续测试也是排除了这个可能。希望有经验的大哥可以解答一下小弟的困惑。 |
|
相关推荐
2个回答
|
|
通常擦除和写入时只要连续运行结果正确都不去调试它。 因为如果正在擦除时,单步调试相当于去访问同一总线地址,此时会影响总线工作,因而造成烧录错误。而这类芯片的擦除需要一次性连续固定数量的完成。
|
|
|
|
有关STM32G473 flash擦除失败的原因,可能有以下几个可能性:
1. 系统调度影响擦除过程:您提到在跑ucosii时进行OTA升级擦除失败,但关掉系统调度后可以擦除成功。这可能是因为系统调度的任务和中断影响了擦除过程中的时序要求,导致擦除失败。建议在进行擦除操作时,暂时关闭相关的任务和中断,以保证擦除按照正确的时序要求进行。 2. 单步调试的影响:在单步调试时,由于每一步执行会导致CPU的状态有所变化,也会影响到擦除过程的时序要求,从而导致擦除失败。这可能是单步调试中擦除失败的原因之一。建议在进行擦除操作时,不进行单步调试,直接运行程序来进行测试。 3. 其他可能的错误:您提到单步调试时有时会出现PGSERR、SIZERR和PGAERR等错误。这些错误可能与擦除操作的时序、尺寸、地址对齐等参数设置有关。您需要仔细检查擦除函数的参数设置是否正确,并确保满足擦除操作的要求。 如果单独建立一个裸机工程,上电一直运行可以擦除成功,但在单步调试时会擦除失败,这可能是由于单步调试所引入的时序变化导致的。在单步调试时,由于每一步的执行会引起CPU状态的变化,可能会对擦除过程中的时序要求产生影响,导致擦除失败。您可以尝试先关闭调试功能,直接运行程序来进行测试,以确认擦除操作是否正常。 总而言之,建议您在进行擦除操作时注意以下几点: 1. 关闭系统调度、任务和中断,以保证擦除按照正确的时序要求进行。 2. 不要在擦除操作过程中进行单步调试,而是直接运行程序进行测试。 3. 仔细检查擦除函数的参数设置是否正确,并确保满足擦除操作的要求。 针对具体的错误提示,您可以参考官方文档或手册,查找更详细的解释和解决方法。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1752 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1611 浏览 1 评论
1052 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
721 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1666 浏览 2 评论
1924浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
711浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
560浏览 3评论
583浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
544浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-18 12:13 , Processed in 0.682802 second(s), Total 80, Slave 63 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号