原创 i.MX 8MM如何在uboot运行M4程序

2020-4-10 16:58 1664 10 10 分类: MCU/ 嵌入式

OKMX8MM-C 平台内部有一个Cortex-M4内核,可以使用MCUXpresso SDK进行开发,MCUXpresso SDK是微控制器软件支持的集合,它包含外围驱动程序,RPMSG多核通信,以及FreeRTOS支持。可以查看SDK API文档了解它实现的函数和结构体。


MCUXpresso SDK支持IAR或者armgcc两种方式编译镜像,编译可以生成三种镜像,分别运行在QSPI flash、ram、DDR中。编译方法参考飞凌Linux手册或SDK_2.5.0_EVK-MIMX8MM使用手册Getting Started with MCUXpresso SDK for i.MX 8M Mini。

下面介绍编译出的三种镜像如何在uboot启动,以最简单的hello world为例,程序启动后会在uart4输出“hello world.”。





如何在uboot启动QSPI flash版本的M4程序

首先需要将M4程序烧写到QSPI flash中,可以通过TF卡或者UUU工具(可以参考飞凌linux手册)。

然后在uboot启动QSPI flash中的M4核程序。

初始化QSPIflash

sf probe

M启动M4核程序

bootaux 0x8000000

输入命令后



如何在uboot启动ram版本的M4程序

首先需要在uboot将M4程序读取到ram中。

如在M4程序在emmc固定位置中,假定存放位置为MMC的10M偏移处。选择存放了M4程序的emmc作为当前mmc设备

mmc dev 1

将10M偏移处(0x2800 * 512 = 102400)读取50K到ram中

mmc read 0x7e0000 2800 100

如果在M4程序在U盘的fat分区中,

usb start

fatload usb 0:1 0x7e0000 hello_world.bin

然后在uboot启动ram版本的程序

bootaux 0x7e0000

0x7e0000为M4程序的地址

输入命令后


查看结果





如何在uboot启动DDR版本的程序

首先需要在uboot将M4程序读取到DDR中。

如在M4程序在emmc固定位置中,假定存放位置为MMC的10M偏移处。选择存放了M4程序的emmc作为当前mmc设备

mmc dev 1

将10M偏移处(0x2800 * 512 = 102400)读取50K到DDR中

mmc read 0x80000000  2800 100

dcache flush

如果在M4程序在U盘的fat分区中,

usb start

fatload usb 0:1 0x80000000  hello_world.bin

然后在uboot启动ram版本的程序

bootaux 0x80000000  

0x80000000为M4程序的地址

输入命令

查看结果




特别注意:

编译生成的不同版本的M4程序,要严格按照编译版本进行加载,并跳转到其加载地址运行。

如果编译的镜像没有放到其需要运行的存储空间内(ram版放到ram、DDR版放到DDR内,QSPIflash版放到QSPIflash内),M4程序程序是不能运行的。例如M4程序是编译的QSPIflash版本的,把其放入到DDR或者ram内运行,程序无法运行。



希望大家看到有所收获,指出问题共同进步,在飞凌的技术支持和分享中获得更多的知识。



文章评论0条评论)

登录后参与讨论
我要评论
0
10
关闭 站长推荐上一条 /2 下一条