当前位置: 首页 > news >正文

QSPI flash xip模式运行

背景:

在做一个项目,调研p-sram当ram用在cadence qspi接口下是否正常,首先用qspi-flash xip模式验证控制器是否支持flash的xip模式。

一、更改步骤:

1.1首先配置链接脚本

默认链接脚本


OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
OUTPUT_ARCH(arm)
ENTRY(_start)
SECTIONS
{. = 0xf4000000;. = ALIGN(4);.text : {_stext = .;*(.vectors)*(.text*)*(.rodata .rodata*)  /* read-only data (constants) */. = ALIGN(4);*(.glue*)_etext = . ;}__exidx_start = .;.ARM.exidx  : { *(.ARM.exidx* .gnu.linkonce.armexidx.*) }__exidx_end = .;. = ALIGN(8);_edummy = .;/* data sections */.data : {_sdata = .;__ld_real_data_start = .;*(.data*)_edata = .;}. = ALIGN(8);/* bss sections */_sbss = .;.bss (NOLOAD) : {*(.bss .bss.*). = ALIGN(4);}_ebss = .;/*stack sections 4K*/.stack (NOLOAD):{. = ALIGN(64);. = . + 0x400;__stack = .;}_end = .;.pagetable (NOLOAD):{. = ALIGN(16*1024);__pagetable_start = .;. = . + 0x00004000;}.dynsym : { *(.dynsym) }.dynbss : { *(.dynbss) }.dynstr : { *(.dynstr*) }.dynamic : { *(.dynamic*) }.hash : { *(.hash*) }.plt : { *(.plt*) }.interp : { *(.interp*) }.gnu : { *(.gnu*) }
}
_romsize = _edata - _stext;
_ramsize = _end - _stext;

xip链接脚本


OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
OUTPUT_ARCH(arm)
ENTRY(_start)
SECTIONS
{. = 0xe0000000;. = ALIGN(4);.text 0xe000000c : {_stext = .;*(.vectors)*(.text*)*(.rodata .rodata*)  /* read-only data (constants) */. = ALIGN(4);*(.glue*)_etext = . ;}__exidx_start = .;.ARM.exidx  : { *(.ARM.exidx* .gnu.linkonce.armexidx.*) }__exidx_end = .;. = ALIGN(8);_edummy = .;/* data sections */.data 0xf4000000 : AT ( _edummy ) {_sdata = .;__ld_real_data_start = .;*(.data*)_edata = .;}. = ALIGN(8);/* bss sections */_sbss = .;.bss (NOLOAD) : {*(.bss .bss.*). = ALIGN(4);}_ebss = .;/*stack sections 4K*/.stack (NOLOAD):{. = ALIGN(64);. = . + 0x1000;__stack = .;}_end = .;.pagetable (NOLOAD):{. = ALIGN(16*1024);__pagetable_start = .;. = . + 0x00004000;}.dynsym : { *(.dynsym) }.dynbss : { *(.dynbss) }.dynstr : { *(.dynstr*) }.dynamic : { *(.dynamic*) }.hash : { *(.hash*) }.plt : { *(.plt*) }.interp : { *(.interp*) }.gnu : { *(.gnu*) }
}
_romsize = _edata - _stext;
_ramsize = _end - _stext;

1.2更改控制器代码:

#define QSPI_ENTER_XIP_MODE       ((1 << 7) + (1 << 11) + (0x3 << 12))void qspi_enter_xip_mode(uint32_t base)
{uint32_t value;volatile pstruct_qspi_reg_t addr = (pstruct_qspi_reg_t)base;value = addr->QSPI_CONFIGURATION;value |= QSPI_ENTER_XIP_MODE;addr->QSPI_CONFIGURATION = value;
}

二、使用:

直接跳过image的包头后,PC直接在text段上运行。运行正常。

http://www.dtcms.com/a/153702.html

相关文章:

  • 四、Python编程基础04
  • 《宝可梦明耀之星》正式登陆中国大陆!4月15日起陆续上市!
  • 母婴店商城小程序制作哪家强?告别传统经营,拥抱线上新机遇
  • TypeScript 开发实战:如何安全替换字符串中的关键字
  • 阿里云99机器总是宕机,实测还是磁盘性能差
  • 多路转接epoll原理详解
  • 应用信息1.13.0发布
  • verilog和system verilog常用数据类型以及常量汇总
  • SVN钩子脚本获取日志中文乱码解决办法
  • Android 混合开发实战:统一 View 与 Compose 的浅色/深色主题方案
  • 嵌入模型(Embedding Models)原理详解:从Word2Vec到BERT的技术演进
  • MyBatis操作数据库---从入门到理解
  • 硬件工程师面试常见问题(7)
  • LeetCode-Hot100
  • CentOS 7 磁盘分区详细教程
  • 【框架学习】Spring AI-功能学习与实战(一)
  • SpringBoot | 构建客户树及其关联关系的设计思路和实践Demo
  • 【CAPL实战:以太网】对IPv4报文的Payload部分进行分片并创建分片包
  • Vue 的单文件组件(.vue 文件)script 标签的使用说明
  • AI赋能安全调度系统:智能升级与功能跃迁
  • KMS工作原理及其安全性分析
  • Leetcode19(亚马逊真题):删除链表的倒是第N个节点
  • 特征存储的好处:特征存储在机器学习开发中的优势
  • dumpsys activity activities中的Task和ActivityRecord信息解读
  • 【Linux网络】应用层自定义协议与序列化及Socket模拟封装
  • 2025上海车展|紫光展锐发布新一代旗舰级智能座舱芯片平台A888
  • Trae 编程工具 Cline 插件安装与 Claude 3.7 API Key 自定义配置详解
  • 济南国网数字化培训班学习笔记-第二组-6-输电线路现场教学
  • 热度大幅度下降,25西电经济与管理学院(考研录取情况)
  • html单页业务介绍源码