版主
最后登录1970-1-1
在线时间 小时
注册时间2015-12-2
|
官方的Flashloader工具传说中比较难上手,这里花了两天时间来研究了这个工具,当中踩了不少坑,多得原厂的大力支持,问题很快就解决,
下面来一步步介绍怎么烧录固件,避免大伙重复踩坑。
1、先到官网下载Flashloader工具,名称为Flashloader_i.MXRT1050_GA.zip。这里附件已经下载好,方便大家直接使用。
2、打开目录Flashloader_RT1050_1.1\Tools\bd_file\imx10xx,使用文本工具打开“imx-flexspinor-normal-unsigned.bd”文件,修改如下:
[mw_shl_code=c,true]options {
flags = 0x00;
startAddress = 0x60000000;
ivtOffset = 0x1000;
initialLoadSize = 0x2000;
DCDFilePath = "dcd.bin";
# Note: This is required if the default entrypoint is not the Reset_Handler
# Please set the entryPointAddress to Reset_Handler address
entryPointAddress = 0x60002000;
}
sources {
elfFile = extern(0);
}
section (0)
{
}[/mw_shl_code]
在这里碰到第一个坑,entryPointAddress默认是屏蔽的,如果不指定这个地址,可能程序会出现无限重启的情况,最终发现需要指定具体的入口地址程序才能正常运行,
具体地址可以打开MDK工程的.map文件(在MDK界面,双击工程名可以打开),搜索关键字“__Vectors ”可以定位程序的中断向量存放的首地址0x60002000,即入口地址。
还有一个隐藏得比较深的问题需要注意,当使用命令行转换转换.sb文件时出现奔溃时,也是由于这里没有指定入口地址而出错。
3、我们的例程都需要使用SDRAM的DCD,因此将设置好SDRAM的“dcd.bin”文件拷贝到如下目录:Flashloader_RT1050_1.1\Tools\elftosb\win。
4、到野火的百度网盘中下载RT1052的测试例程,如果已经有可以忽略这一步骤,网盘地址。
5、这里以电容触摸屏—触摸画板例程为例,依次打开例程目录:3-程序源码-->1-固件库例程-->电容触摸屏—触摸画板.zip
6、打开电容触摸屏—触摸画板的MDK工程,选择“lcd_flexspi_nor_release”工程,点击魔术棒进入设置菜单,点击user,然后在输入如下命令生成srec文件,
fromelf.exe --m32combined --output "$[url=mailto@L.srec]L@L.srec[/url]" "#L",具体如下图所示:
7、点击MDK的编译按钮,编译一次,就可以输出YH-RT1052.srec文件,路径如下\project\mdk\flexspi_nor_release\Objects。
8、将YH-RT1052.srec文件拷贝到Flashloader_RT1050_1.1\Tools\mfgtools-rel目录下。
9、新建一个txt文档,键入如下cmd命令,主要操作就是删除之前的转换文件,拷贝转换文件到指定目录,然后使用elfosb生成.sb文件,再将.sb文件拷贝到烧录的目录下。
[mw_shl_code=c,true]del ".\Profiles\MXRT105X\OS Firmware\boot_image.sb"
cd ..
del .\elftosb\win\YH-RT1052.srec
xcopy /y .\mfgtools-rel\YH-RT1052.srec .\elftosb\win\
::choice /t 1 /d y /n >nul
cd elftosb\win
del ivt_RT1052.bin
del ivt_RT1052_nopadding.bin
del boot_image.sb
elftosb.exe -f imx -V -c ../../bd_file/imx10xx/imx-flexspinor-normal-unsigned.bd -o ivt_RT1052.bin YH-RT1052.srec
::choice /t 1 /d y /n >nul
elftosb.exe -f kinetis -V -c ../../bd_file/imx10xx/program_flexspinor_image_qspinor.bd -o boot_image.sb ivt_RT1052_nopadding.bin
cd ../../
::choice /t 1 /d y /n >nul
xcopy /y .\elftosb\win\boot_image.sb ".\mfgtools-rel\Profiles\MXRT105X\OS Firmware\"
pause[/mw_shl_code]
将以上命令拷贝到txt文档中,另存为脚本文件fire_OSFirmware.bat。
10、双击脚本文件fire_OSFirmware.bat即可将上面第8步的srec文件转换成可烧录的.sb文件。
11、开发板端需要按住mode键再按一次复位键,然后松开mode键,即可进入USB烧录模式。 (注意:烧录工具要求,开发板的USB连接线需要通过USB Hub接到电脑上)
12、打开烧录工具MfgTool2.exe,可以发现HID设备,点击开始按钮即可烧录,烧录完成后有Done的提示。如下图所示:
13、复位一次开发板程序就会运行起来。
14、那么这样就搞定了烧录问题吗?然而远远未够,这里只是简单的小程序可以烧录如果是大程序是否也可以正常烧录呢?接下来我们在来研究一下官方的.bd文件。
15、我们要学会怎么修改.bd文件来达到正确烧录固件。官方默认的擦除空间只有64kb,我们需要根据程序的大小来修改这个擦除空间的大小
进入目录:Flashloader_RT1050_1.1\Tools\bd_file\imx10xx打开“program_flexspinor_image_qspinor.bd”文件。
[mw_shl_code=c,true]
# The source block assign file name to identifiers
sources {
myBinFile = extern (0);
}
constants {
kAbsAddr_Start= 0x60000000;
kAbsAddr_Ivt = 0x60001000;
kAbsAddr_App = 0x60002000;
}
# The section block specifies the sequence of boot commands to be written to the SB file
section (0) {
#1. Prepare Flash option
# 0xc0000006 is the tag for Serial NOR parameter selection
# bit [31:28] Tag fixed to 0x0C
# bit [27:24] Option size fixed to 0
# bit [23:20] Flash type option
# 0 - QuadSPI SDR NOR
# 1 - QUadSPI DDR NOR
# 2 - HyperFLASH 1V8
# 3 - HyperFLASH 3V
# 4 - Macronix Octal DDR
# 6 - Micron Octal DDR
# 8 - Adesto EcoXIP DDR
# bit [19:16] Query pads (Pads used for query Flash Parameters)
# 0 - 1
# 2 - 4
# 3 - 8
# bit [15:12] CMD pads (Pads used for query Flash Parameters)
# 0 - 1
# 2 - 4
# 3 - 8
# bit [11: 08] Quad Mode Entry Setting
# 0 - Not Configured, apply to devices:
# - With Quad Mode enabled by default or
# - Compliant with JESD216A/B or later revision
# 1 - Set bit 6 in Status Register 1
# 2 - Set bit 1 in Status Register 2
# 3 - Set bit 7 in Status Register 2
# 4 - Set bit 1 in Status Register 2 by 0x31 command
# bit [07: 04] Misc. control field
# 3 - Data Order swapped, used for Macronix OctaFLASH devcies only (except MX25UM51345G)
# 4 - Second QSPI NOR Pinmux
# bit [03: 00] Flash Frequency, device specific
load 0xc0000006 > 0x2000;
# Configure QSPI NOR FLASH using option a address 0x2000
enable flexspinor 0x2000;
#2 Erase flash as needed.(Here only 256KBytes are erased)
erase 0x60000000..0x60010000;
#3. Program config block
# 0xf000000f is the tag to notify Flashloader to program FlexSPI NOR config block to the start of device
load 0xf000000f > 0x3000;
# Notify Flashloader to response the option at address 0x3000
enable flexspinor 0x3000;
#5. Program image
load myBinFile > kAbsAddr_Ivt;
}
[/mw_shl_code]
这里我们开发板使用的是华邦的flash,上电即可进入Quad Mode,因此bit [11: 08]不需要设置,即写0;
第47行应该改为如下,flash的频率是设定为133M,其他保持默认即可
[mw_shl_code=c,true]load 0xc0000007 > 0x2000;[/mw_shl_code]
第52行是flash擦除的范围,我们需要根据烧录的程序大小来指定擦除地址范围。特别注意,修改了擦除地址,还要修改软件烧录本身的超时时间。修改如下:
打开目录:Flashloader_RT1050_1.1\Tools\mfgtools-rel\Profiles\MXRT105X\OS Firmware中的ucl2.xml文件,搜索关键字“MXRT105x-DevBoot”在其紧接着有如下命令
[mw_shl_code=c,true]<CMD state="Blhost" type="blhost" timeout="15000" body="receive-sb-file \"rofiles\\MXRT105X\\OS Firmware\\boot_image.sb\"" > Program Boot image </CMD> [/mw_shl_code]
我们需要修改的是timeout="15000",修改超时时间为1分钟
[mw_shl_code=c,true]<CMD state="Blhost" type="blhost" timeout="3600000" body="receive-sb-file \"rofiles\\MXRT105X\\OS Firmware\\boot_image.sb\"" > Program Boot image </CMD> [/mw_shl_code]
至此我们就可以随意烧录任意大小的固件了。
最后附上修改好的烧录工具供大家参考。
Flashloader_RT1050_1.1.rar
(7.35 MB, 下载次数: 4122)
|
|