野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 29210|回复: 30

手把手教你如何使用Flashloader烧录RT1052的固件

[复制链接]
发表于 2018-7-19 18:19:28 | 显示全部楼层 |阅读模式
官方的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,即入口地址。
3.jpg
还有一个隐藏得比较深的问题需要注意,当使用命令行转换转换.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",具体如下图所示:
2.jpg

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的提示。如下图所示:
4.jpg 5.jpg
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)




回复

使用道具 举报

发表于 2018-7-19 18:22:54 来自手机 | 显示全部楼层
赞,开发这么久,我也还没试过这种方式
回复 支持 反对

使用道具 举报

发表于 2018-7-19 21:32:49 | 显示全部楼层
点个赞。
楼主有原厂支持,都还填了不少坑,我等没有原厂支持的,估计其中任何一个坑都能让我们对这款芯片放弃希望了。
反正都需要用一个小软件来下载,NXP工程师开发一个集成点的功能的,把市面上的那几款SPI flash 做个模板,我们把hex塞到制定目录下,点下载就能OK了,这才是我想要的simple开发方式。
回复 支持 1 反对 0

使用道具 举报

发表于 2018-7-19 22:49:27 来自手机 | 显示全部楼层
cool
回复

使用道具 举报

发表于 2018-7-20 09:21:20 | 显示全部楼层
酷儿               
回复 支持 反对

使用道具 举报

发表于 2018-7-21 06:18:54 | 显示全部楼层
没用过这玩艺,这么麻烦的工具
回复 支持 反对

使用道具 举报

发表于 2018-7-23 11:14:26 | 显示全部楼层
楼主帮我分析下,我参考官方的AN12108 “How to Enable Boot from QSPI Flash“,先生成boot_image.sb,然后用MfgTool2.exe烧录,简单的程序比如HelloWorld等可以运行,
但是像usb程序和freertos程序就不能运行。这个问题原因在哪里?
回复 支持 反对

使用道具 举报

发表于 2018-7-23 11:17:10 | 显示全部楼层
确实开发工具的坑太多,为什么helloworld能用Flashloader下载运行,usb程序和freertos程序就不能下载运行,官方就不能做的通用一点
回复 支持 反对

使用道具 举报

发表于 2018-7-23 11:40:16 | 显示全部楼层
刚刚试用了楼主修改的Flashloader_RT1050_1.1.rar,usb和freertos都可以工作了,太感谢了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-7-24 09:31:46 | 显示全部楼层
elegoqq 发表于 2018-7-23 11:14
楼主帮我分析下,我参考官方的AN12108 “How to Enable Boot from QSPI Flash“,先生成boot_image.sb,然 ...

其实注意两个地方即可,程序入口,程序大小(对应改擦除空间,延时大小)
回复 支持 反对

使用道具 举报

发表于 2018-7-25 10:29:51 | 显示全部楼层
楼主,你好,能写个加密程序的教程吗?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-7-25 19:16:49 | 显示全部楼层
elegoqq 发表于 2018-7-25 10:29
楼主,你好,能写个加密程序的教程吗?

正在做这个事情
回复 支持 反对

使用道具 举报

发表于 2018-8-16 12:42:36 | 显示全部楼层
楼主这个步骤有没有在win10上测试过?我在win10上,mfgtool 怎么都无法找到 设备,不知是不是win10的原因,还是这个mfgtool需要更新了
回复 支持 反对

使用道具 举报

发表于 2018-8-16 14:18:34 | 显示全部楼层
商YUN涛 发表于 2018-8-16 12:42
楼主这个步骤有没有在win10上测试过?我在win10上,mfgtool 怎么都无法找到 设备,不知是不是win10的原因, ...

注意:烧录工具要求,开发板的USB连接线需要通过USB Hub接到电脑上
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-8-16 14:24:45 | 显示全部楼层
商YUN涛 发表于 2018-8-16 12:42
楼主这个步骤有没有在win10上测试过?我在win10上,mfgtool 怎么都无法找到 设备,不知是不是win10的原因, ...

WIN10上是OK的,不过一定要通过USB hub接入电脑
回复 支持 反对

使用道具 举报

发表于 2018-8-16 14:40:55 | 显示全部楼层
cancore 发表于 2018-8-16 14:24
WIN10上是OK的,不过一定要通过USB hub接入电脑

我使用的是UNITTEK的hub,还是mfgtool还是无法发先设备,见鬼了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-8-16 17:58:50 | 显示全部楼层
商YUN涛 发表于 2018-8-16 14:40
我使用的是UNITTEK的hub,还是mfgtool还是无法发先设备,见鬼了

早期的板子可能需要短接板子上的RXD和TXD,不然MFGTOOL会认为是串口而不是USB
回复 支持 反对

使用道具 举报

发表于 2018-8-16 22:04:34 | 显示全部楼层
cancore 发表于 2018-8-16 17:58
早期的板子可能需要短接板子上的RXD和TXD,不然MFGTOOL会认为是串口而不是USB

短接核心板 调试串口的rx和tx ? 我今天刚收到的板子,应该不是早期的吧
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-8-16 22:25:45 | 显示全部楼层
商YUN涛 发表于 2018-8-16 22:04
短接核心板 调试串口的rx和tx ? 我今天刚收到的板子,应该不是早期的吧

今天的就是新版,不需要这个操作,另外GHOST版本系统容易出问题,建议用纯净版系统实施
回复 支持 反对

使用道具 举报

发表于 2018-8-16 22:58:19 | 显示全部楼层
cancore 发表于 2018-8-16 22:25
今天的就是新版,不需要这个操作,另外GHOST版本系统容易出问题,建议用纯净版系统实施

我系统是原版win10安装后小马破解的,不是ghost版本的哦
回复 支持 反对

使用道具 举报

发表于 2018-12-1 09:04:27 | 显示全部楼层
可以试试这个:https://github.com/JayHeng/nxp-sec-boot-ui,希望你们喜欢
回复 支持 反对

使用道具 举报

发表于 2018-12-2 22:49:51 | 显示全部楼层
Henjay724 发表于 2018-12-1 09:04
可以试试这个:https://github.com/JayHeng/nxp-sec-boot-ui,希望你们喜欢

新程序老平台,不支持HiDPI界面各种显示错位
回复 支持 反对

使用道具 举报

发表于 2018-12-4 20:22:38 | 显示全部楼层
cmheia 发表于 2018-12-2 22:49
新程序老平台,不支持HiDPI界面各种显示错位

感谢反馈,后面会在一些低分辨率的PC上测试
回复 支持 反对

使用道具 举报

发表于 2018-12-4 22:39:40 | 显示全部楼层
厉害,正准备研究一下,后面有问题,还望可以指教
回复 支持 反对

使用道具 举报

发表于 2018-12-14 20:01:01 | 显示全部楼层
楼主你好,我今天在使用elftosb.exe进行制作带ivt头的Image文件时,elftosb.exe崩了,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]
回复 支持 反对

使用道具 举报

发表于 2018-12-18 22:16:42 | 显示全部楼层
我用blhost.exe连不上串口了,出现下边的错误,是不是把内置的bootloader给擦除了?
err.png
回复 支持 反对

使用道具 举报

发表于 2018-12-19 17:13:12 | 显示全部楼层
rellik81 发表于 2018-12-18 22:16
我用blhost.exe连不上串口了,出现下边的错误,是不是把内置的bootloader给擦除了?

要先把Flashloader下载进去,然后跳转到Flashloader执行,开可以用blhost工具去连
回复 支持 反对

使用道具 举报

发表于 2018-12-27 10:38:48 | 显示全部楼层
厉害了&#128077;&#128077;&#128077;
回复 支持 反对

使用道具 举报

发表于 2019-3-8 11:45:46 | 显示全部楼层
楼主你好,请问你有IAR版本的烧录固件的方法吗?
回复 支持 反对

使用道具 举报

发表于 2019-10-31 15:40:06 | 显示全部楼层
原来还要一个Hub啊,昨天搞了一天。。。。
回复 支持 反对

使用道具 举报

发表于 2019-11-2 15:09:48 | 显示全部楼层
在利用火哥1052Mini板进行固件烧录实验的时候,发现只要在开发板的OTG1_DN和OTG_DP引出2根导线悬空,pc端就显示无法识别该设备,无法烧录。不引出2根导线则能够正常进行烧录。1052和pc端通过USB线连接。请问有大佬知道这是什么原因导致的么,是因为存在干扰之类的么?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-11-22 21:41 , Processed in 0.043304 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表