0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

为ING916添加外部Flash扩充容量

桃芯科技 ? 来源:桃芯科技 ? 2025-08-19 15:32 ? 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

ING916 的 SPI0 通过 AHB 总线连接到处理器,支持 4 线模式,以存储映射方式只读访问 (https://ingchips.github.io/drafts/pg_ing916/ch-spi.html#qspi-读取和xip)时支持 XIP。通过 SPI0 外挂串行 NOR Flash,处理器就可以通过映射方式读取 NOR Flash 里的内容。对于开发者而言, 这块外挂 NOR Flash 可存放程序、只读数据等,可被 Cache “加速”,像内置 Flash 一样,使用方便。

SDK 从v8.4.19开始:1)自动安装 W25Q 烧写算法;2)支持串口和 USB 烧录。

01 芯片选型

SPI0 配置到专门的高速管脚可获得最高的传输速率。建议结合项目需要,确定 ING916 和 NOR Flash 的选型。

02 开发 Flash烧写算法

下一步是为 NOR Flash 开发烧写算法。由于烧写算法不便调试,我们可以先在一个“普通”程序里实现相关的函数, 测试正常后再转换为烧写算法。

用程序读写外部 Flash

注意:必须使用 SDK v8.4.10 或更高版本的 Cube。对于较低版本的 SDK, 请使用外设驱动。

先用 Wizard 创建一个 ING916 项目,打开 Cube。假设我们决定选用 ING91682C,在 Cube 里把封装切换为 ING91682C, 然后直接点击 “Set to High Speed Pins” 为 SPI0 配置高速管脚:

64c1cbcc-799e-11f0-a18e-92fbcf53809c.png

切换到时钟树界面,确认 SPI0 时钟为 24MHz 慢时钟(注:开发调试阶段先使用较低的时钟频率。),回到 SPI0 的设置页面, 将 Basic Settings 的 “Clock frequency” 设置为 24MHz。

说明:时钟树界面的 SPI0 时钟为 SPI0 硬件模块的驱动;而 Basic Settings 的 “Clock frequency” 为 SPI0 (主模式下) 输出的 CLK 信号的频率,由驱动分频得来。

参考 NOR Flash 数据手册,开发、调试相关的操作函数,如擦除、写入、设置模式等。

以AHB_QSPI_MEM_BASE为起始地址可直接以存储映射方式读取 NOR Flash 里的数据。读取时,SPI0 不需要任何特殊设置。

待功能验证正常后,可酌情优化传输速率:提供 SPI0 时钟、设置 NOR Flash 的 4 线模式等。 如果需要以 2 线或者 4 线模式读取 NOR Flash,需要配置 SPI0 的MemAccessCmd参数。请参考 NOR Flash 数据手册, 选择合适的命令和时序。MemAccessCmd默认为SPI_MEMRD_CMD_03,单线模式。

// 示例:设置为使用 EB 命令(4 线模式)
apSSP_SetMemAccessCmd(AHB_SSP0,SPI_MEMRD_CMD_EB);

将程序转换为 Flash 烧写算法

下一步是通过上面的 NOR Flash 操作函数实现下载工具或者 IDE 要求的 Flash 烧写接口。以 Keil 为例, 需要实现 4 个必备的接口:

Init: 初始化

UnInit: 反初始化

EraseSector: 擦除一个扇区

ProgramPage: 写入一页

Flash 的特性、地址范围等在FlashDev.c的定义,如示例中:

structFlashDeviceconstFlashDevice ={
 FLASH_DRV_VERS,// Driver Version, do not modify!
 "INGCHIPS 91600 EXT W25Q",// Device Name
 EXTSPI,// Device Type
 0x04000000,// Device Start Address (A)
 0x01000000,// Device Size in Bytes (B)
 4096,// Programming Page Size (C)
 0,// Reserved, must be 0
 0xFF,// Initial Content of Erased Memory
 800,// Program Page Timeout 100 mSec
 3000,// Erase Sector Timeout 3000 mSec

// Specify Size and Address of Sectors
0x1000,0x000000,// Sector Size 4kB    (D)
 SECTOR_END
};

其中,名称可任意填写;起始地址 A 为固定值(AHB_QSPI_MEM_BASE),不可修改; B 既可根据实际情况填写,也可以填写一个 Flash 同系列型号所支持的最大容量(W25Q 地址 24bit,最大支持 16MiB),当以后更换容量更大的 Flash 型号时,不需要更改烧写算法; D 务必根据实际情况填写扇区大小;C 为烧录时一页的大小,由于 Flash 可能不支持按页擦除、却一定支持按扇区擦除, 所以这里把它设置为一个扇区的大小。

03 使用外部Flash

用 Wizard 创建一个 ING916 项目(假设名为use_ext_flash)。打开 Cube,切换到所选用的封装,打开 SPI0 的时钟,并为 SPI0 配置管脚。 在 Keil 里打开项目的 Target 设置,添加一块外部 Flash,起始地址为AHB_QSPI_MEM_BASE:

64f242f2-799e-11f0-a18e-92fbcf53809c.png

进入烧写算法设置页面,添加外部 Flash 烧写算法,添加完成后,这个项目存在两个烧写算法:

65064bbc-799e-11f0-a18e-92fbcf53809c.png

为项目添加一个新的文件demo.c,写一个测试函数:

#include"platform_api.h"

voidhello_world(void)
{
platform_printf("hello from EXT flash
");
}

在set_profile()里调用这个函数:

externvoidhello_world(void);

uint32_tsetup_profile(void*data,void*user_data)
{
  platform_printf("setup profile
");
  platform_printf("func @ %p
",hello_world);
  hello_world();
  //...
}

打开demo.c的选项窗口,将 “Code/Const” 指派到 ROM1:

651d425e-799e-11f0-a18e-92fbcf53809c.png

检查项目目录下是否存在use_ext_flash.bin文件,如有则删除。编译,此时可发现项目目录下生成了 一个名为use_ext_flash.bin的文件夹,里面存放了两个分别对应于 ROM1 和 IROM1 的文件。 打开下载工具,不勾选 “Burn Bin #2”(注意:v8.4.18 或更旧版本的下载工具可以下载 ER_IROM1,但无法下载 ER_ROM1;v8.4.19 及以上版本的下载工具两个文件都支持。),只下载 platform.bin。回到 Keil,点击 Download (F8) 按钮下载 app。 运行程序,用串口工具可看到如下输出:

setup profile
func @ 04000001
hello from EXT flash

可见hello_world函数已被存放于外挂 NOR Flash,使用时与内置 Flash 没有区别。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 处理器
    +关注

    关注

    68

    文章

    19965

    浏览量

    237656
  • FlaSh
    +关注

    关注

    10

    文章

    1690

    浏览量

    152631
  • 总线
    +关注

    关注

    10

    文章

    2967

    浏览量

    90101
  • 串口
    +关注

    关注

    15

    文章

    1593

    浏览量

    80462

原文标题:《软件设计指南之三》为 ING916 添加外部 Flash 扩充容量

文章出处:【微信号:INGCHIPS_OFFICIAL,微信公众号:桃芯科技】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    如何通过SFL设备添加Flash编程支持

    SEGGER Flash Loader(SFL)是J-Link设备支持套件(DSK)的一部分,通过SFL,用户可以为自己的新设备添加Flash编程支持。
    的头像 发表于 05-19 16:35 ?692次阅读
    如何通过SFL<b class='flag-5'>为</b>设备<b class='flag-5'>添加</b><b class='flag-5'>Flash</b>编程支持

    ESP32-PICO-MINI-02确定内部flash2MB,没有外部ram吗?

    我购买的 ESP32-PICO-DevKitM-2 ,烧录 getstart 中的helloword程序(添加了打印内部ram和外部ram),日志显示flash只有2MB,外部Ram
    发表于 07-02 08:08

    RainSun陶瓷天线AN1603-916

    产品名称AN1603-916型号AN1603-916封装16.0*3.1*1.65产品概述AN1603-916MHZ主要应用于RF无线模块,无线监控安防天线,868MHZ无线通信,中心频率
    发表于 07-10 11:14

    FLASH容量的大小

    容量一般 512K 字节,属于大容量芯片。大容量产品的 Flash 模块组织结构如图 40.1.1 所示:STM32F1 的闪存(
    发表于 08-12 07:55

    PIC16F916/917 pdf

    PIC16F917/916/914/913Data Sheet28/40/44-Pin Flash-Based, 8-BitCMOS Microcontrollers withLCD Driver and nanoWatt Technology
    发表于 06-05 13:42 ?39次下载

    LPC2200_flash内部Flash外部Flash分散加载

    LPC2200_flash内部Flash外部Flash分散加载示例。
    发表于 05-20 16:08 ?17次下载

    Google Chrome flash添加说明

    Google Chrome flash添加说明
    发表于 09-29 13:07 ?6次下载

    以SRAM芯片例系统介绍常用的扩充存储容量的方法

    速度更快,但是更加的昂贵,集成度不如DRAM高。 在实际应用中的存储器所需要的容量通常比所生产的芯片容量大得多,所以需要对多芯片进行组合以实现存储容量扩充。本文以SRAM芯片
    的头像 发表于 12-06 09:48 ?7822次阅读
    以SRAM芯片<b class='flag-5'>为</b>例系统介绍常用的<b class='flag-5'>扩充</b>存储<b class='flag-5'>容量</b>的方法

    DC916A-设计文件

    DC916A-设计文件
    发表于 06-11 17:06 ?3次下载
    DC<b class='flag-5'>916</b>A-设计文件

    DC916A-B DC916A-B评估板

    电子发烧友网你提供ADI(ti)DC916A-B相关产品参数、数据手册,更有DC916A-B的引脚图、接线图、封装手册、中文资料、英文资料,DC916A-B真值表,DC
    发表于 07-24 16:00

    DC916A-A DC916A-A评估板

    电子发烧友网你提供ADI(ti)DC916A-A相关产品参数、数据手册,更有DC916A-A的引脚图、接线图、封装手册、中文资料、英文资料,DC916A-A真值表,DC
    发表于 07-24 16:00

    基于FPGA的高速大容量FLASH存储

    基于FPGA的高速大容量FLASH存储(单片机底层嵌入式开发)-该文档基于FPGA的高速大容量FLASH存储总结文档,是一份很不错的参考资
    发表于 07-30 16:46 ?13次下载
    基于FPGA的高速大<b class='flag-5'>容量</b><b class='flag-5'>FLASH</b>存储

    EVAL-AD916X EVAL-AD916X评估板

    电子发烧友网你提供ADI(ti)EVAL-AD916X相关产品参数、数据手册,更有EVAL-AD916X的引脚图、接线图、封装手册、中文资料、英文资料,EVAL-AD916X真值表,
    发表于 08-17 17:00

    支持全规格BLE5.3的ING916X系列芯片重磅来袭

    桃芯科技ING916X,集成了桃芯BLE5.3 IP,包括Modem,链路层控制器和主机,高性能和低功耗BLE射频收发器,发射器输出功率范围从-30dbm到+8dbm,而接收器灵敏度在BLE LR模式下达到-102dbm,在1M模式下达到-96dbm。
    的头像 发表于 12-20 15:58 ?1766次阅读

    如何向Buildroot内添加外部APP

    Linux项目开发,如何在BuildRoot框架内添加外部APP呢?本文以quect-CM拨号软件例,做开发演示。
    的头像 发表于 07-22 17:48 ?753次阅读
    如何向Buildroot内<b class='flag-5'>添加</b><b class='flag-5'>外部</b>APP