硬汉嵌入式论坛

 找回密码
 立即注册
查看: 5756|回复: 13
收起左侧

[STM32H750] STM32H750 W25Q256的XIP启动失败

[复制链接]

1

主题

11

回帖

14

积分

新手上路

积分
14
发表于 2019-9-10 10:58:16 | 显示全部楼层 |阅读模式
使用H750驱动W25Q256,读写擦除都可以。进入MemoryMapped 却失败,使用的命令是QUAD READ 0XEC, 0X3C, 0X0C也不行。
进入HAL_QSPI_MemoryMapped模式试过直接读数据,有要么只能读出前8个字节,要么读出来的都是奇怪的错误值。

测试过的流程,用硬汉哥的驱动,直接进入MemoryMapped 失败。
用野火的驱动,先进入四字节模式,在进入MemoryMapped 失败。
自己改,先使能QE位,在使能QSPI, 在进入四字节模式,在进入MemoryMapped 失败。
有没有在q256 boot成功的代码可以参考下呢
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106746
QQ
发表于 2019-9-10 11:53:25 | 显示全部楼层
帮顶,还没有整过QPI XIP启动
官网的例子参考下:
STM32H750在QSPI Flash,SDRAM,NOR Flash等外部存储介质运行程序的配套例程说明以及跑分测试
http://www.armbbs.cn/forum.php?mod=viewthread&tid=89720


回复

使用道具 举报

1

主题

11

回帖

14

积分

新手上路

积分
14
 楼主| 发表于 2019-9-10 11:55:24 | 显示全部楼层
eric2013 发表于 2019-9-10 11:53
帮顶,还没有整过QPI XIP启动

用8M的flash一直没问题。这个32M的就算用8M的程序单线操作都不行,真的窒息。板子是野火的,他自己的例程那个也有问题。唯独他的下载算法能用,里面集成了boot,但是没源码
回复

使用道具 举报

1

主题

11

回帖

14

积分

新手上路

积分
14
 楼主| 发表于 2019-9-10 14:20:44 | 显示全部楼层
。最新进展,已知不是qspi问题了,是生成的bin有问题。之前的几个工程都好好地,下载了也能起来。这次这个居然有问题,
回复

使用道具 举报

0

主题

32

回帖

32

积分

新手上路

积分
32
发表于 2019-9-10 14:56:01 | 显示全部楼层
楼主能提供下源码不?想学习下这部分~
回复

使用道具 举报

1

主题

11

回帖

14

积分

新手上路

积分
14
 楼主| 发表于 2019-9-10 15:14:47 | 显示全部楼层
本帖最后由 2pw 于 2019-9-10 16:52 编辑

受不了了。搞了两天不知道为什么是生成的bin有问题,更奇怪的是只有野火的boot能启动。至于为什么不行还没找到问题,实际是能跳转到app,但是app还没到main就报impreciserr,大概是无法跳到main。野火的boot确实能运行重新建个工程就可以了,qspi配置,暂且使用1线测试
  1. uint32_t QSPI_EnableMemoryMappedMode()
  2. {
  3.         QSPI_CommandTypeDef s_command;
  4.         QSPI_MemoryMappedTypeDef s_mem_mapped_cfg;

  5.         /* ????? */
  6.         s_command.InstructionMode = QSPI_INSTRUCTION_1_LINE;
  7.         s_command.Instruction = 0x0b;
  8.         s_command.AddressMode = QSPI_ADDRESS_1_LINE;
  9.         s_command.AddressSize = QSPI_ADDRESS_32_BITS;
  10.         s_command.DataMode = QSPI_DATA_1_LINE;
  11.         s_command.DummyCycles = 8;
  12.         s_command.DdrMode = QSPI_DDR_MODE_DISABLE;
  13.         s_command.DdrHoldHalfCycle = QSPI_DDR_HHC_ANALOG_DELAY;
  14.         s_command.SIOOMode = QSPI_SIOO_INST_EVERY_CMD;

  15.         /* ???????? */
  16.         s_mem_mapped_cfg.TimeOutActivation = QSPI_TIMEOUT_COUNTER_DISABLE;
  17.         s_mem_mapped_cfg.TimeOutPeriod = 0;

  18.         if (HAL_QSPI_MemoryMapped(&QSPIHandle, &s_command, &s_mem_mapped_cfg) != HAL_OK)
  19.         {
  20.                 return 1;
  21.         }

  22.         return 0;
  23. }
复制代码
四线的
  1. uint32_t QSPI_EnableMemoryMappedMode()
  2. {
  3.         QSPI_CommandTypeDef s_command;
  4.         QSPI_MemoryMappedTypeDef s_mem_mapped_cfg;

  5.         /* ????? */
  6.         s_command.InstructionMode = QSPI_INSTRUCTION_1_LINE;
  7.         s_command.Instruction = QUAD_INOUT_FAST_READ_4_BYTE_ADDR_CMD;
  8.         s_command.AddressMode = QSPI_ADDRESS_4_LINES;
  9.         s_command.AddressSize = QSPI_ADDRESS_32_BITS;
  10.         s_command.DataMode = QSPI_DATA_4_LINES;
  11.         s_command.DummyCycles = 6;
  12.         s_command.DdrMode = QSPI_DDR_MODE_DISABLE;
  13.         s_command.DdrHoldHalfCycle = QSPI_DDR_HHC_ANALOG_DELAY;
  14.         s_command.SIOOMode = QSPI_SIOO_INST_EVERY_CMD;

  15.         /* ???????? */
  16.         s_mem_mapped_cfg.TimeOutActivation = QSPI_TIMEOUT_COUNTER_DISABLE;
  17.         s_mem_mapped_cfg.TimeOutPeriod = 0;

  18.         if (HAL_QSPI_MemoryMapped(&QSPIHandle, &s_command, &s_mem_mapped_cfg) != HAL_OK)
  19.         {
  20.                 return 1;
  21.         }

  22.         return 0;
  23. }
复制代码


boot程序
  1.     SCB_DisableICache();
  2.     SCB_DisableDCache();

  3.     /* Disable Systick interrupt */
  4.     SysTick->CTRL = 0;

  5.     //中断地址
  6.     SCB->VTOR = QSPI_BASE;
  7.     /* Initialize user application's Stack Pointer & Jump to user application */
  8.     JumpToApplication = (pFunction)(*(__IO uint32_t *)(QSPI_BASE + 4));
  9.     __set_MSP(*(__IO uint32_t *)QSPI_BASE);
  10.     JumpToApplication();
复制代码



回复

使用道具 举报

9

主题

112

回帖

144

积分

初级会员

积分
144
发表于 2019-9-10 15:53:12 | 显示全部楼层
32MB flash地址要4个字节
回复

使用道具 举报

1

主题

11

回帖

14

积分

新手上路

积分
14
 楼主| 发表于 2019-9-11 14:43:29 | 显示全部楼层
并没有解决。增加了几个文件后依然跳转到APP后hardfault,位置是SystemInit里面的
  1.   /* Reset HSEBYP bit */
  2.   RCC->CR &= 0xFFFBFFFFU;

  3.   /* Disable all interrupts */
  4.   RCC->CIER = 0x00000000;
复制代码
回复

使用道具 举报

1

主题

11

回帖

14

积分

新手上路

积分
14
 楼主| 发表于 2019-9-11 18:03:56 | 显示全部楼层
emm。最终原因是因为TOUCHGFX的代码,只要添加到了工程,即使我没引用,下进去了也不能运行。在汇编的
  1.                  LDR     R0, =__main
  2.                  BX      R0
复制代码
无法跳转到main,引发硬件中断。野火的boot居然能用,那肯定说明跳转到app前需要其他操作才行
回复

使用道具 举报

1

主题

11

回帖

14

积分

新手上路

积分
14
 楼主| 发表于 2019-9-11 18:13:45 | 显示全部楼层
终于解决了,mark一下。
程序经过汇编启动代码,执行到__main()后,可以看出有两个大的函数:
__scatterload():负责把RW/RO输出段从装载域地址复制到运行域地址,并完成了ZI运行域的初始化工作。
__rt_entry():负责初始化堆栈,完成库函数的初始化,最后自动跳转向main()函数。
_scatterload_zeroinit 会初始化ZI端,我这里用到了SDRAM,就会去初始化SDRAM,应该就是这里访问不了,导致了HARDFAULT。
我在systeminit里面的初始化了sdram就可以了。
但是为什么会这样呢,不符合常理啊, 之前我应用都是启动了再去初始化SDRAM。而且这里移除掉touchgfx的代码也能启动,什么鬼原理,要是有大佬知道麻烦回答下
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106746
QQ
发表于 2019-9-12 11:23:06 | 显示全部楼层
2pw 发表于 2019-9-11 18:13
终于解决了,mark一下。
程序经过汇编启动代码,执行到__main()后,可以看出有两个大的函数:
__scatterl ...

SDRAM这个的确是神奇的问题,F4系列不用提前初始化好,MDK编译的确是没问题。

H7不行。
回复

使用道具 举报

1

主题

11

回帖

14

积分

新手上路

积分
14
 楼主| 发表于 2019-9-12 12:03:25 | 显示全部楼层
eric2013 发表于 2019-9-12 11:23
SDRAM这个的确是神奇的问题,F4系列不用提前初始化好,MDK编译的确是没问题。

H7不行。

的确,野火提供的boot就是先初始化了SDRAM。不过也可能是touchgfx的lib里面调用了编译器的函数,有诡异的影响,不开源也看不到。不过好歹能用了。
目前还有个诡异的问题,keil v5编译器,开到-o3 -o2优化,memrymapped就死了,读出来的数据都不对,也无法启动。野火的例程也是,估计他自己都没测试过,无语了
回复

使用道具 举报

1

主题

11

回帖

14

积分

新手上路

积分
14
 楼主| 发表于 2019-9-29 11:56:12 | 显示全部楼层
已完全解决。是因为touchgfx使用的c++在main前初始化了一个非常大的heap,导致错误的原因是内存不足,初始化失败,所以main都进不了就死机了。这个内存占用非常大,所以放D0不够,查看链接map,把最长的几个heap都链接到了D1,就正常了
回复

使用道具 举报

0

主题

12

回帖

12

积分

新手上路

积分
12
发表于 2019-11-16 20:51:19 | 显示全部楼层
ZL,我也是用的野火的,QSPI起不来呀,我还没用SDRAM都起不来~~~,bootloader里QSPI地址映射测试都没问题能直接访问,但是一运行,跳转就报硬件错误,我都无语了~~~~,是不是boot loader里面要注意什么呀。(bootloader用内部flash实验能成功跳转并执行,但是一跳到0x90000000flash里面的程序就不行)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-3 19:08 , Processed in 0.386839 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表