完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
本人使用STM32F103ZET7,通过FSMC总线控制NAND FLASH 芯片K9F1208,能够正常读、写、擦除以及读取状态等,但是在COPY-BACK这个功能上遇到了问题,貌似无法复制数据。我的代码如下,麻烦哪位大神遇到过这个问题赐教一下:
uint32_t NAND_CopyBack(NAND_ADDRESS SourAdd, NAND_ADDRESS DestAdd) { *(__IO uint8_t *)(Bank_NAND_ADDR | CMD_AREA) = NAND_CMD_AREA_A; *(__IO uint8_t *)(Bank_NAND_ADDR | ADDR_AREA) = 0x00; *(__IO uint8_t *)(Bank_NAND_ADDR | ADDR_AREA) = ADDR_1st_CYCLE(ROW_ADDRESS(SourAdd)); *(__IO uint8_t *)(Bank_NAND_ADDR | ADDR_AREA) = ADDR_2nd_CYCLE(ROW_ADDRESS(SourAdd)); *(__IO uint8_t *)(Bank_NAND_ADDR | ADDR_AREA) = ADDR_3rd_CYCLE(ROW_ADDRESS(SourAdd)); *(__IO uint8_t *)(Bank_NAND_ADDR | CMD_AREA) = NAND_CMD_CPYBAK; *(__IO uint8_t *)(Bank_NAND_ADDR | ADDR_AREA) = 0x00; *(__IO uint8_t *)(Bank_NAND_ADDR | ADDR_AREA) = ADDR_1st_CYCLE(ROW_ADDRESS(DestAdd)); *(__IO uint8_t *)(Bank_NAND_ADDR | ADDR_AREA) = ADDR_2nd_CYCLE(ROW_ADDRESS(DestAdd)); *(__IO uint8_t *)(Bank_NAND_ADDR | ADDR_AREA) = ADDR_3rd_CYCLE(ROW_ADDRESS(DestAdd)); *(__IO uint8_t *)(Bank_NAND_ADDR | CMD_AREA) = NAND_CMD_WRITE_TRUE1; return (NAND_GetStatus()); } |
|
相关推荐
1个回答
|
|
在分析这个问题之前,我们先了解一下STM32通过FSMC控制NAND FLASH的COPY-BACK命令的基本原理。COPY-BACK命令是一种用于在NAND FLASH内部复制数据的命令,它可以在不经过CPU的情况下,直接在NAND FLASH内部进行数据复制,从而提高数据传输的效率。
根据您提供的代码片段,我将逐步分析可能导致无法复制数据的原因: 1. 首先,确保您的NAND FLASH芯片K9F1208支持COPY-BACK命令。不同的NAND FLASH芯片可能支持不同的命令集,因此请查阅K9F1208的数据手册以确认其是否支持该命令。 2. 检查FSMC初始化配置。确保FSMC的时钟、地址、数据和控制线都已正确配置,以便与NAND FLASH进行通信。 3. 检查NAND_ADDRESS SourAdd和NAND_ADDRESS DestAdd参数。确保这两个地址是有效的NAND FLASH地址,并且它们指向的块、页面和扇区都是可读写的。 4. 检查CMD_AREA和ADDR_AREA的定义。确保这些宏定义正确地映射到了NAND FLASH的命令和地址寄存器。 5. 检查您的代码中是否正确地发送了COPY-BACK命令。根据K9F1208的数据手册,COPY-BACK命令的发送步骤如下: a. 发送NAND_CMD_AREA_A命令到CMD_AREA。 b. 发送源地址的第1个周期到ADDR_AREA。 c. 发送NAND_CMD_AREA_C命令到CMD_AREA。 d. 发送目标地址的第1个周期到ADDR_AREA。 e. 发送NAND_CMD_AREA_TRUE1命令到CMD_AREA。 请确保您的代码遵循了这些步骤。 6. 检查NAND FLASH的状态。在执行COPY-BACK命令之前,您需要检查NAND FLASH的状态,确保它处于可执行该命令的状态。您可以使用NAND_ReadStatus()函数来读取状态寄存器。 7. 检查您的代码中是否有其他潜在的错误,例如内存泄漏、数组越界等。 8. 如果以上步骤都无法解决问题,您可以尝试使用NAND FLASH的制造商提供的示例代码或库,以确保您的操作是正确的。 总之,要解决这个问题,您需要确保NAND FLASH芯片支持COPY-BACK命令,FSMC配置正确,地址参数有效,命令发送步骤正确,以及NAND FLASH的状态正确。希望这些建议能帮助您解决问题。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1786 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1622 浏览 1 评论
1089 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
730 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1680 浏览 2 评论
1942浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
739浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
576浏览 3评论
598浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
560浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-25 15:23 , Processed in 0.970236 second(s), Total 81, Slave 64 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号