
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。
>>>详细说明可点击此处,参考外设驱动库里的对应源码。
(2)有了生成的memslot信息后,就要绑定PSOC 6系统的读写接口到对应的QSPI flash的配置结构体,让flash loader知道如果要读写某个地址片段的信息时,使用哪个访问外部命令来进行操作。这一部分需要由一个保存在SFlash (0x1600 0000) 区域里进行声明,这部分片区在PSoC6里定义为Table of Contents part 2 (TOC2)。
例子如下,声明由QSPI Configurator配置工具自动生成的memslot源码中的smifBlockConfig的结构体地址指针到指定的区间。
然后在TOC2 固定区域里(offset = 0x000C)把对应的指针保存进去。编译后生成的代码就会自动生成新的TOC2的固定配置,在烧录片内flash区域后,System Call就获取了当前的配置结构体的指针索引。
经过以上配置后,就可以实现通过烧录接口访问片外的结构体。但这部分目前英飞凌已经提供了现成的中间件serial-flash,用户只要引用中间件,就可以直接使用上面的配置,无需额外的重写以上存储结构体。
>>>点击此处,查看详细参考。
实现了XIP区域编译和烧录的例程,推荐参考CY8CPROTO-062S3-4343W这个BSP上使用WiFi的例程。上面使用了CY8C6245LQI-S3D72, 具有512KB Flash和256KB SRAM。在需要驱动WIFI模块时,由于WIFI模块的固件由400KB左右的区间,所以需要保存在片外NorFlash上。
main.c :
bsp.mk里也需要对应声明
这样wifi的固件就会编译时指定到xip的地址段。
在bsp文件夹中提供的PSoC 6的默认link script (e.g. GCC的.ld文件) 已经包含了对.cy_xip段的定义描述:
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进行直接烧录的基本原理和实现方式,以及需要考虑的注意事项。
来源:英飞凌官微
免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。