Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
qboot
20
关于qboot跳转外部qspi flash无法启动问题
发布于 2023-08-02 11:38:53 浏览:862
订阅该版
当前环境,STM32H750VBT6,片内为qboot程序,片外为w25q64,qspi-falsh。 现在qboot,均运行正常,就是到了跳转的时候,就没有了响应,问题现场如下图片所示: ![问题图片.png](https://oss-club.rt-thread.org/uploads/20230802/d8e75f9934e483e898cac340a2bba035.png) qboot跳转地址如下: ```c static int nor_flash_memory_mapped_mode(struct rt_qspi_device *device) { QSPI_CommandTypeDef s_command; QSPI_MemoryMappedTypeDef s_mem_mapped_cfg; /* Configure the command for the read instruction */ s_command.InstructionMode = QSPI_INSTRUCTION_1_LINE; s_command.Instruction = 0xEB; s_command.AddressMode = QSPI_ADDRESS_4_LINES; s_command.AddressSize = QSPI_ADDRESS_24_BITS; s_command.AlternateByteMode = QSPI_ALTERNATE_BYTES_4_LINES; s_command.AlternateBytes = 0x00; s_command.AlternateBytesSize = QSPI_ALTERNATE_BYTES_8_BITS; s_command.DataMode = QSPI_DATA_4_LINES; s_command.DummyCycles = 4; s_command.DdrMode = QSPI_DDR_MODE_DISABLE; s_command.DdrHoldHalfCycle = QSPI_DDR_HHC_ANALOG_DELAY; s_command.SIOOMode = QSPI_SIOO_INST_EVERY_CMD; /* Configure the memory mapped mode */ s_mem_mapped_cfg.TimeOutActivation = QSPI_TIMEOUT_COUNTER_ENABLE; s_mem_mapped_cfg.TimeOutPeriod = 1; if (HAL_QSPI_MemoryMapped((QSPI_HandleTypeDef *)(device->parent.bus->parent.user_data), &s_command, &s_mem_mapped_cfg) != HAL_OK) { rt_kprintf("memory mapped mode failed\n"); return -RT_ERROR; } return RT_EOK; } void qbt_jump_to_app(void) { typedef void (*app_func_t)(void); app_func_t app_func; struct rt_qspi_device *device = NULL; u32 stk_addr = 0; u32 reset_handler = 0; const u8 send[4] = {0x03, 0x00, 0x00, 0x00}; u8 recv[8] = {0}; device = (struct rt_qspi_device *)rt_device_find(QBOOT_QSPI_FLASH_DEVICE_NAME); if (device == RT_NULL) { LOG_E("no found qspi flash."); return; } rt_qspi_send_then_recv(device, send, sizeof(send), recv, sizeof(recv)); stk_addr = recv[0]; stk_addr += ((u32)recv[1] << 8); stk_addr += ((u32)recv[2] << 16); stk_addr += ((u32)recv[3] << 24); reset_handler = recv[4]; reset_handler += ((u32)recv[5] << 8); reset_handler += ((u32)recv[6] << 16); reset_handler += ((u32)recv[7] << 24); rt_kprintf("\r\nstk_addr :\t0x%08X\r\n", stk_addr); rt_kprintf("\r\nreset_handler :\t0x%08X\r\n", reset_handler); stk_addr &= 0x3FF00000; if (((reset_handler & 0xff000000) != QSPI_BASE) || (stk_addr != 0x20000000 && stk_addr != 0x24000000 && stk_addr != 0x30000000 && stk_addr != 0x38000000)) { LOG_E("No legitimate application."); return; } if (nor_flash_memory_mapped_mode(device) != RT_EOK) { rt_kprintf("nor_flash_memory_mapped_mode failed!\n"); return; } rt_kprintf("Jump to application running ... \n"); __disable_irq(); #if (__MPU_PRESENT == 1) HAL_MPU_Disable(); #endif SCB_DisableICache(); SCB_DisableDCache(); __set_CONTROL(0); __set_MSP(stk_addr); app_func = (app_func_t)(QSPI_BASE + 4); app_func(); LOG_E("Qboot jump to application fail."); } ``` app应用程序地址如下: ![app.png](https://oss-club.rt-thread.org/uploads/20230802/7f862c2b202aff501aa9f82c81161d61.png) ![ap2.png](https://oss-club.rt-thread.org/uploads/20230802/d15a024a5ce222015f4acab49cc55603.png)
查看更多
红枫
认证专家
2023-08-02
这家伙很懒,什么也没写!
正常情况复位地址应该是4字节对齐的,看log这里不对啊!你对照bin文件看看是app下载错了,还是原本编译出来就错了? ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20230802/13468c0e26ac5273ece35f5b82931102.png.webp)
2
个回答
默认排序
按发布时间排序
Dev_XH
2023-08-02
每天进步一点点,发际线后移一点点
求助红枫大佬协助,扣了快1天了😭
撰写答案
登录
注册新账号
关注者
1
被浏览
862
关于作者
Dev_XH
每天进步一点点,发际线后移一点点
提问
7
回答
9
被采纳
0
关注TA
发私信
相关问题
1
qboot使用ymodem上传固件升级失败。
2
qboot ymodem上传固件后release失败
3
使用qboot制作BootLoader,下载APP后不能跳转执行
4
使用RTT 跳转进入app区后,无法调度
5
QSPI FLASH W25Q64,在进入映射模式后,如何退出?
6
制作极简版Bootloader过程中遇到无法解决的错误
7
qboot使用中程序跳转不成功
8
如何将qboot裁剪到通用Bootloader的32k大小?
9
qboot跳转app后卡在app的系统调用处,有人碰到过吗?
10
使用RTStudio添加qboot组件保存后,软件包没有显示,一直添加不了
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
最新文章
1
使用百度AI助手辅助编写一个rt-thread下的ONVIF设备发现功能的功能代码
2
RT-Thread 发布 EtherKit开源以太网硬件!
3
rt-thread使用cherryusb实现虚拟串口
4
《C++20 图形界面程序:速度与渲染效率的双重优化秘籍》
5
《原子操作:程序世界里的“最小魔法单位”解析》
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
WIZnet_W5500
UART
ota在线升级
PWM
cubemx
freemodbus
flash
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
Debug
编译报错
msh
SFUD
keil_MDK
rt_mq_消息队列_msg_queue
at_device
ulog
C++_cpp
本月问答贡献
踩姑娘的小蘑菇
7
个答案
3
次被采纳
a1012112796
13
个答案
2
次被采纳
张世争
9
个答案
2
次被采纳
rv666
5
个答案
2
次被采纳
用户名由3_15位
11
个答案
1
次被采纳
本月文章贡献
程序员阿伟
7
篇文章
2
次点赞
hhart
3
篇文章
4
次点赞
大龄码农
1
篇文章
2
次点赞
ThinkCode
1
篇文章
1
次点赞
Betrayer
1
篇文章
1
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部