完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我使用 STM32H7B3I-DK 评估板创建了一个项目,所有设置均为默认设置,未经修改,取自 TouchGFX。UI 菜单可以很好地处理存储在 OSPI 闪存中的一些资源。
现在我想在这个 OSPI 内存中存储一些数据。该过程应该是禁用内存映射模式,擦除,写入并再次启用内存映射模式。我所做的所有这些都是在禁用任务开关的情况下进行的,这样 TouchGFX 就不会在此过程中访问 OSPI 闪存。但是 BSP_OSPI_NOR_Erase_Block() 返回错误。 C调用的是MX25LM51245G_BlockErase() 然后 HAL_OSPI_Command() 然后 status = OSPI_WaitFlagStateUntilTimeout(hospi, HAL_OSPI_FLAG_TC, SET, tickstart, Timeout); 并报告超时。 我什至在 TouchGFX 启动之前就尝试擦除 OSPI 闪存,但它也失败了。 这是我从 main 调用的简单代码,仅进行了一次修改: 静态无效 MX_OCTOSPI1_Init(无效) { /* 用户代码开始 OCTOSPI1_Init 0 */ /* 用户代码结束 OCTOSPI1_Init 0 */ /* 用户代码开始 OCTOSPI1_Init 1 */ /* 用户代码结束 OCTOSPI1_Init 1 */ /* OCTOSPI1参数配置*/ hospi1.Instance = OCTOSPI1; hospi1.Init.FifoThreshold = 1; hospi1.Init.DualQuad = HAL_OSPI_DUALQUAD_DISABLE; hospi1.Init.MemoryType = HAL_OSPI_MEMTYPE_MICRON; hospi1.Init.DeviceSize = 26; hospi1.Init.ChipSelectHighTime = 2; hospi1.Init.FreeRunningClock = HAL_OSPI_FREERUNCLK_DISABLE; hospi1.Init.ClockMode = HAL_OSPI_CLOCK_MODE_0; hospi1.Init.WrapSize = HAL_OSPI_WRAP_NOT_SUPPORTED; hospi1.Init.ClockPrescaler = 3; hospi1.Init.SampleShifting = HAL_OSPI_SAMPLE_SHIFTING_NONE; hospi1.Init.DelayHoldQuarterCycle = HAL_OSPI_DHQC_DISABLE; hospi1.Init.ChipSelectBoundary = 0; hospi1.Init.ClkChipSelectHighTime = 0; hospi1.Init.DelayBlockBypass = HAL_OSPI_DELAY_BLOCK_BYPASSED; hospi1.Init.MaxTran = 0; hospi1.Init.Refresh = 0; 如果 (HAL_OSPI_Init(&hospi1) != HAL_OK) { 错误处理程序(); } /* 用户代码开始 OCTOSPI1_Init 2 */ BSP_OSPI_NOR_Init_t 闪存; Flash.InterfaceMode = BSP_OSPI_NOR_OPI_MODE; Flash.TransferRate = BSP_OSPI_NOR_DTR_TRANSFER; BSP_OSPI_NOR_DeInit(0); int32_t RetVal = BSP_OSPI_NOR_Init(0, &Flash); 如果(RetVal != BSP_ERROR_NONE) { 错误处理程序(); } /**************************************************** *************/ BSP_OSPI_NOR_Erase_Block(0, 0x90000200, MX25LM51245G_ERASE_4K); //这是唯一的修改,它因超时而失败,然后在下面启用内存映射模式也失败 /**************************************************** *************/ RetVal = BSP_OSPI_NOR_EnableMemoryMappedMode(0); 如果(RetVal != BSP_ERROR_NONE) { 错误处理程序(); } /* 用户代码结束 OCTOSPI1_Init 2 */ } |
|
相关推荐
1个回答
|
|
一切正常,简单的错误是在我的地址计算中。BSP_OSPI_NOR_...() 函数必须从 0 开始获取闪存地址,而不是 CPU 看到的 +0x90000000 偏移量。
所以我可以确认,从内存映射模式切换、擦除、写入和再次启用 MMM 是完全正常的 |
|
|
|
只有小组成员才能发言,加入小组>>
请教:在使用UDE STK时,单片机使用SPC560D30L1,在配置文件怎么设置或选择?里面只有SPC560D40的选项
2632 浏览 1 评论
3208 浏览 1 评论
请问是否有通过UART连接的两个微处理器之间实现双向值交换的方法?
1783 浏览 1 评论
3607 浏览 6 评论
5987 浏览 21 评论
939浏览 4评论
1315浏览 4评论
在Linux上安装Atollic TRUEStudio的步骤有哪些呢?
582浏览 3评论
使用DMA激活某些外设会以导致外设无法工作的方式生成代码是怎么回事
1302浏览 3评论
1357浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 07:50 , Processed in 1.090270 second(s), Total 78, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号