21

Mar . 2025

技术洞察 | 浅谈PSOC 6 SMIF的使用——在线烧录片外Flash

分享至

1/基本原理与机制

PSOC 6 SMIF访问片外Flash的操作模式,如《浅谈PSOC 6 SMIF的使用(一)——基本功能》一文中介绍,主要是MMIO模式和XIP模式。但考虑通过PSoC6 SWD的方式来在线烧录连接在SMIF上的片外flash的内容,意味着对于PSOC 6来说片外Flash是可以寻址的,所以这里需要配合XIP模式,把片外的flash空间映射到PSOC 6能访问的地址段,如之前提到的0x1800 0000开始的地址区域。


要完成整个烧录的工作,需要从片外flash的配置(参考文中QSPI Configurator的介绍)、片内工程保存QSPI Data Structure、工程的linker script、烧录工具配合来完成。参考以下完整的Ecosystem Tool设计

接下来会自上而下的介绍这里的基本原理和操作:


(1)首先,针对不同的memory产品,可以通过QSPI Configurator配置或者自定义对应的读写命令组合,生成对应的命令集合的结构体参数:

自动生成的源码文件:

cycfg_qspi_memslot.c, cycfg_qspi_memslot.h


源码中有对应的结构体映射了实际执行的命令配置的集合,如以下例子中deviceCfg_S25FL512S_SlaveSlot_0就包含了读写对应QSPI Data Structure。

例子如下,声明由QSPI Configurator配置工具自动生成的memslot源码中的smifBlockConfig的结构体地址指针到指定的区间。

然后在TOC2 固定区域里(offset = 0x000C)把对应的指针保存进去。编译后生成的代码就会自动生成新的TOC2的固定配置,在烧录片内flash区域后,System Call就获取了当前的配置结构体的指针索引。

>>>详细说明可点击此处,参考外设驱动库里的对应源码。


(2)有了生成的memslot信息后,就要绑定PSOC 6系统的读写接口到对应的QSPI flash的配置结构体,让flash loader知道如果要读写某个地址片段的信息时,使用哪个访问外部命令来进行操作。这一部分需要由一个保存在SFlash (0x1600 0000) 区域里进行声明,这部分片区在PSoC6里定义为Table of Contents part 2 (TOC2)。

经过以上配置后,就可以实现通过烧录接口访问片外的结构体。但这部分目前英飞凌已经提供了现成的中间件serial-flash,用户只要引用中间件,就可以直接使用上面的配置,无需额外的重写以上存储结构体


>>>点击此处,查看详细参考。

main.c :

bsp.mk里也需要对应声明

这样wifi的固件就会编译时指定到xip的地址段。

在bsp文件夹中提供的PSoC 6的默认link script (e.g. GCC的.ld文件) 已经包含了对.cy_xip段的定义描述:

实现了XIP区域编译和烧录的例程,推荐参考CY8CPROTO-062S3-4343W这个BSP上使用WiFi的例程。上面使用了CY8C6245LQI-S3D72, 具有512KB Flash和256KB SRAM。在需要驱动WIFI模块时,由于WIFI模块的固件由400KB左右的区间,所以需要保存在片外NorFlash上。

2/烧录片外flash的注意事项:

根据上述章节的描述,我们可以理解以下的读写的流程:


1、片外SPI Flash的配置结构体保存到片内flash,并产生了确定的&smifBlockConfig指针。


2、SFlash 相关区域(TOC2)存储了能索引配置结构体信息的指针地址(e.g. &smifIpBlocksArr).


3、这个索引信息已经生效。


4、需要烧录到片外flash的内容编译后能落在0x18000000开始的 xip 的地址段(Link Script 已经默认做了相关定义)


5、烧录器根据需要烧录的Hex File,当需要烧录0x18000000 ~ 0x1FFFFFFF这些地址段的区域时,通过DAP接口索引到对应片外flash的读,写,擦除等命令,对片外flash进行访问和控制。

所以,针对这个流程,当想要通过PSoC6烧录口对片外flash进行直接烧录的话,需要确定以下问题(Trouble Shooting):

1. 对应的片外flash的配置结构体的参数是否正确:


·命令是否匹配正确的IO数,SPI/Dual-SPI/Quad-SPI 对应的读写命令一般时不一致的。需要确认当前配置的IO数与命令一致。


·Memory擦除的命令是否匹配,如4KB sector擦除,还是64KB sector擦除,对应的命令和效果会影响烧录的结果。

Write Enable的寄存器位是否正确,Qaud Mode的使能位或者命令是否匹配。


·擦除,Program等时间参数是否一致,这里建议使用对应memory datasheet的最大时间来保证擦和写的可靠性。


2. 置结构体已经烧录到片内,TOC2的结构体有正确的索引指针。基于烧录的原理,TOC2里必须包含能索引到命令集合,并且已经生效,否则系统无法确定片外flash的映射地址的操作方式。


3.片外flash的接口状况,有一些用户设计会考虑给片外flash做供电管理控制,比如用MCU的IO口控制flash的供电,以节省功耗。这时,如果需要考虑片外flash的在线烧录,需要明确在烧录进行时片外flash的供电情况时明确上电的。由于这时候MCU并没有进入正常的工作逻辑,所以管理片外flash的IO不一定处在给flash打开电源开关的状体,这时候需要考虑额外的设计来保证片外flash的供电,比如:


·定制烧录制具可以烧录时明确给片外flash供电。


·设计默认上电,控制IO时可以关闭电源的电路。


·如果外部电路无法使用默认上电,可以考虑定制flash loader来增加IO管理的功能给片外flash先上电。

3/总结

本篇主要简述了烧录器(Programmer)通过PSOC 6 SMIF接口对片外SPI Flash进行直接烧录的基本原理和实现方式,以及需要考虑的注意事项。


文章来源:英飞凌官微

半导体组件问询单
如对本公司产品有任何问题(产品报价、技术咨询、产品文件、样品索取、合作代理等),都可通过咨询表单和我们联络,将有专人回复。
隐私权暨个人资料保护声明

STEP

01
!

有标示 必填栏位,请确实填写,谢谢

咨询需求
市场应用

咨询商品

备注内容

下一步,联系资料填写

STEP

02
!

有标示 必填栏位,请确实填写,谢谢

公司名称
所属部门
联络人
职称
联络电话
邮箱
联络地址
交货地址
是否为贸易商
验证码
订阅电子报
!

有标示 * 必填栏位,请确实填写,谢谢。

公司名称
所属部门
姓名
职称
联系电话
选择电子报语言
邮箱
验证码