I.MX RT1050 EVK开发板代码下载和调试

昨天收到了NXP的I.MX RT1050开发板,就是下图这货:

按捺不住激动的心情,想早点尝鲜,先从点灯开始,NXP官方的SDK包包含了各种例程,见下图:

找到led_output试验例程,编译,下载。调试器使用的RT1050 EVK自带的DAP仿真器,板子上的跳线帽

什么的都没有做修改,micro USB先插到J28接口上即可,结果下载失败,失败信息如下:

  查找问题,发现工程没选对,下载的话是要下载到板子自带的那片死贵的hyper flash里面的,

但是led_output没有支持hyper flash的工程,这个例程只有四个针对内部RAM和SDRAM的,

见下图:

这说明这四个例程只能debug!!!,不能download,和STM32不一样,

STM32的官方例程都是可以既可以debug又可以download的,NXP的就不行,

大多数例程只能debug
这可如何是好?debug意味着掉电代码就丢失了?肯定要能下载到外面的那个

hyper flash里面的啊,最简单的方法就是找个支持heyper flash的工程:

SDK_2.3.0_EVK-MIMXRT1050\boards\evkmimxrt1050\demo_apps\hello_world,
这个hello_world例程是支持RAM,SDRAM,flash三者调试和下载的,见下图:

选择nor_release这个工程,编译、设置MDK的下载选项,也就是烧写算法,如下图:

结果依旧是下载失败,如下图:

在使用STM32的时候很少遇到这个错误,因为STM32做的太好了,一般很难遇到这种问题,

解决方法就是将烧写算法中的size改大一点,直到能够正常下载,如下图所示:

但是用此种方法直接下载例程以后还是不能够运行,这是因为没有再hyper flash 0X6000 1000

地址开始处添加Image Vector Table(IVT)信息,关于IVT的相关内容在RT1050的用户手册上的8.7章节

(就是那本3500多页的文档)有详细的讲解,见下图

480

从上图可以看出我们需要创建一个IVT表,IVT表中的信息按照RT1050里面的用户手册里面来写就好了,

RT-Therad的梁永祥先生提醒我说TouchGFX的RT1050例程有个IVT表,可以拿来用,此表内容如下:

/* IVT表 */
static const uint32_t _ivt[]  __attribute__((at(0X60001000))) = {
    0x412000D1,
    0x60002000,
    0,
    0,

    0x60001020,
    0x60001000,
    0,
    0,

    0x60000000,
    0x04000000,
    0,
    0,

    0,
    0,
    0,
    0,
};
注意此表要的基地址要为0X6000 1000,添加此表以后通过MDK下载代码到Hyper flash中, 但是:

复位以后程序还是没有运行!!!
复位以后程序还是没有运行!!!
复位以后程序还是没有运行!!!
复位以后程序还是没有运行!!!
复位以后程序还是没有运行!!!

为什么还是不能运行?!经过与梁永祥先生进一步交流,他告诉我,地址0X6000 0000开始出还需要还需要

存放512字节的数据,好吧,至于是什么数据那就不知道了,但是我们可以使用U盘模拟试验先烧写进入

一个可以执行的代码,然后再把0X6000 0000开始的512个字节的数据给读出来。将这512字节的数据做成数组,

数组如下:

/* FlexSPI nor flash 参数表*/
static const uint32_t boot_data[] __attribute__((at(0X60000000))) = {
    0x42464346, 0x56010400, 0x00000000, 0x03030303, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
    0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
    0x00000059, 0x01080800, 0x00000000, 0x00000000, 0x04000000, 0x00000000, 0x00000000, 0x00000000,
    0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000000F, 0x0001000F,
    0x8B1887A0, 0xA7048F10, 0x00000000, 0x00000000, 0x87008700, 0x87AA8700, 0x87058700, 0x87708700,
    0x8B1887A0, 0xB70B8F10, 0x0000A704, 0x00000000, 0x87008700, 0x87AA8700, 0x87058700, 0x87AA8700,
    0x87008700, 0x87558700, 0x87028700, 0x87558700, 0x87008700, 0x87AA8700, 0x87058700, 0x87808700,
    0x87008700, 0x87AA8700, 0x87058700, 0x87AA8700, 0x87008700, 0x87558700, 0x87028700, 0x87558700,
    0x8B188700, 0x87008F10, 0x00008730, 0x00000000, 0x87008700, 0x87AA8700, 0x87058700, 0x87A08700,
    0x8B188700, 0xA3808F10, 0x00000000, 0x00000000, 0x87008700, 0x87AA8700, 0x87058700, 0x87808700,
    0x87008700, 0x87AA8700, 0x87058700, 0x87AA8700, 0x87008700, 0x87558700, 0x87028700, 0x87558700,
    0x87008700, 0x87AA8700, 0x87058700, 0x87108700, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
    0x00000000, 0x00000102, 0x00000302, 0x00000504, 0x00000902, 0x00000B04, 0x00000000, 0x00000000,
    0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
    0x00000200, 0x00040000, 0x00000001, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
    0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
};
上面这个数组要放到0x6000 0000开始的地方,然后重新下载代码,复位运行!成功!串口输出了hello_word:



至此,终于可以通过MDK向RT1050上的那篇死贵的hyper flash下载代码了,而且下载完以后可以掉电复位运行。

那这512字节的参数哪里有说明呢?有的需要阅读RT1050用户手册的8.6.1.2章节,里面有详细的说明如果使用

Flex SPI nor flash的话需要在flash的前512个字节存放flash的配置参数,见下图:


但是这512字节的参数改怎么写呢?继续看资料吧,RT1050用户手册的8.6.3章节就是讲解的这512字节

的具体含义了,如下图所示:


从上图可以看出地址偏移0开始的地方存放的数据是0X4246346,而我们上面设置的boot_data[]数组

的第一个数据正是0X4246346!其它的数据对应的看RT1050用户手册的8.6.3章节就行了,至此MDK

如何向RT1050 EVK开发板的外置hyper flash下载数据并且可以正常运行就解决了!

总结一下:
1、I.MX RT1050是由I.MX 6UL欢心(A7换成M7)而来的,因此A7上的内部bootloader保留了下来,

RT1050支持多种boot device就是这个内部bootloader来支持的(猜测,没用过A7),这样的结果就是

不能像STM32一样拿到例程就可以直接编译、下载、复位云心。I.MX RT1050因为是要下载外部的

hyper flash中的,因此MDK要先有hyper flash烧写算法,这点MDK已经支持了。
2、光有烧写算法还是不行的,根据I.MX RT1050的用户手册得知还需要在hyper flash的指定地址存放一些

数据用来描述代码的一些信息,这点和我用过的S5PV210一样,S5PV210如果从SD卡启动的时候是需要

在bin文件前面添加16个字节(应该是16个字节,年久已经忘记了,反正是要添加头信息)的头信息。
3、RT1050的代码要想下载到外部hyper flash中并且可以在复位后正常运行,0x6000 0000和0x6000 1000这

两个地址开始出的那个512 Bytes flexSPI flash的配置参数信息和64 Bytes IVT表都不能少。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值