片外串行FLASH由于连线少、成本低、容量大,获得了越来越多的用户青睐。而Kinetis MCU也正在顺应这一趋势,集成了可以直接从片外串行FLASH运行代码的功能。这在扩大客户选择面的同时,也因为和传统MCU结构之间存在一些差异,在用户入门的时候会引入一些困惑,尤其是K82F这样的平台并不支持从IDE直接下载代码到QSPI flash。
本文的目的就是为在QSPI flash上如何运行代码,进行针对性讲解,让玩传统MCU的用户,花三分钟的时间,能够快速学会如何从QSPI flash运行代码。
从何开始?
① 首先要有一块FRDM-K82F的板子。
② FRDM-K82F对应的SDK包。
下载地址: [url=http://mcuxpresso.nxp.com/en/welcome]http://mcuxpresso.nxp.com/en/welcome[/url]
③ 下载FRDM - K82F对应的bootloader工具包:
FSL_Kinetis_Bootloader_K80_Tools_1_0_0
http://www.nxp.com/pip/MCUBOOT?tab=Design_Tools_Tab
然后解压缩后,在如下的路径有3个对应的工具。
工具 | | | PC端工具,和在ROM中运行的BootLoader进行通信,这里采用的是dos命令行的交互方式。通过这个工具,可以把sb文件烧录到QSP flash。 | | 把IDE工具生成的应用image文件(srec格式)转换成blhost.exe能识别的sb文件。 | | 双击后可以生成FLASH的配置文件 qspi_config_block.bin。ROM会根据此文件的内容确认外接的QSPI flash的信息,从而能够正确的访问外部QSPI flash。
| 操作步骤
有了前面的准备内容,我们就可以开始演示,如何下载一个示例工程到QSPI flash并且运行。
① 编译工程K82F\SDK\FRDM-K82F\boards
\frdmk82f\demo_apps\hello_world_qspi\iar,并生成srec文件,这需要做如下所示的配置。
② 在以下目录双击QCBGenerator.exe:
FSL_Kinetis_Bootloader_K80_Tools_1_0_0\bin\win,生成qspi_config_block.bin。
③ 创建一个目录,并把所有的相关文件放到一起,如下图所示。
其中,每个文件的来源如下表所示:
④ 生成.sb文件
.sb文件是blhost.exe使用的image加载文件,blhost.exe通过和ROM里面的bootloader通信,同时解析.sb文件的内容,把对应的段烧录到QSP flash里面去。
.sb文件是以.bd文件为输入的,而.bd文件又会引用.srec文件和.bin文件,这里是个相对比较复杂的难点。关于app.srec,qcb.bin, app.bd, app.sb的关系请参见下图:
通过elftosb.exe生成.sb文件的命令是:
elftosb.exe -V -c hello_world_qspi.bd -o hello_world_qspi.sb
通过前面的描述可知,这个命令只引用了.bd文件,但是.bd文件会引用.srec和.bin,所以实际上是.srec, .bin, .bd这三个文件作为输入,生成了.sb文件。
在DOS命令窗口,执行完该命令后,将出现下面的输出。 同时目录下会生成.sb文件: 由于APP和QCB是分别加载的,烧录到QSPI flash后,会分布在各自的region上。在K82F上,region的划分是以0x1000为界的。0x6800_0000 ~ 0x6800_1000是QCB的region,0x6800_1000以上是APP的region,如下图所示: ⑤ 连接FRDM-K82F,并进入BootLoader模式
这需要先按住SW1并接入USB cable到J11,如下图所示。 首先我们测试能不能和ROM BootLoader通信,在命令行输入以下命令来获取版本号:
blhost.exe -u -- get-property 1
正常情况下可以看到输出如下图所示,表示blhost已经和ROM里面的BootLoader通信成功了。BootLoader支持多种接口,这里使用的是USB通信口。 ⑥ 烧写sb文件
接下来烧写sb文件,需要使用如下两条命令:
1,擦除命令
blhost.exe -u -- flash-erase-all-unsecure
执行完毕后,输出如下图所示: 2,编程命令
blhost.exe -u -- receive-sb-file
hello_world_qspi.sb
执行完毕后,输出如下图所示: 至此.sb文件已经被烧录到QSPI flash中去了。
⑦ 运行代码
接入USB调试口J5。 打开超级终端,可以看到代码已经运行起来了。(这里程序略作更改,一次打印更改为循环打印)
延伸内容
① 如果换了QSPI flash怎么办?
② 不同的IDE工具怎么生成SREC输出文件?
对于这两个问题,小编下次再做介绍。
|