一. IMX6ULL 开发板简介
IMX6ULL 开发板是正点原子提供的阿尔法开发板,所用芯片为恩智浦,基于 Cortex-A7 架构。
这里介绍一下裸机篇中,关于如何将 .bin 文件烧写进 SD 卡,从而设备运行程序。
二. xx.bin 文件烧写
IMX6ULL支持SD卡、EMMC、NAND、nor、SPI flash等等启动。
这里,我们的裸机例程选择烧写到 SD 卡里面。
1. SD卡烧写裸机 bin 文件
烧写不是将 bin 文件拷贝到 SD 卡中,而是将 bin 文件烧写到 SD 卡绝对地址上。
而且对于I.MX 而言,不能直接烧写 bin 文件,比如先在 bin 文件前面添加头部。完成这个工作,需要使用正点原子提供的 imxdownload 软件。
2. 生成 load.imx 文件
imxdownlaod工具只能在 Ubuntu 系统下使用。
使用方法如下:
(1) 将 imxdownload 拷贝到工程根目录下。
(2) 更改 imxdownload 工具的执行权限。输入如下命令更改:
chmod 777 imxdownload
(3) 确定要烧写的 SD 卡。例如,SD卡是 /dev/sdf。SD卡一般是以 sd开头的,在 /dev/目录下。
注意:这里一定要确认好SD卡设备是哪一个,弄错了可能就烧写到ubuntu 的系统盘中了!!!
使用 imxdownload 向 SD 卡烧写 led.bin 文件,命令格式如下:
./imxdownload <.bin file> <SD Card>
例如,输入如下命令:
./imxdownload led.bin /dev/sdb
烧写完成以后会在当前工程目录下生成一个 load.imx 文件。
load.imx 文件是通过 imxdowmload 工具向 .bin 文件中添加一个头部而生成的,这个load.imx文件就是最终烧写到SD卡里面去的(load.imx 文件就是软件 imxdownload 根据 NXP 官方启动方式介绍的内容)。
我这边烧录 SD 卡如下:
3. 在开发板运行
load.imx 文件烧写到 SD 卡成功后。现在可以进行在开发板运行程序了。
运行之前的准备工作:
./imxdownload led.bin /dev/sdb
./imxdownload led.bin /dev/sdb
重新烧录后,SD卡 插入设备运行后,灯依然不亮。至此可以确认不是权限导致的问题。
排查 "其二" 的怀疑点:将正点原子的汇编源码与我自己写的程序对比,发现了问题。我的问题代码如下:
/*
配置IO复用
IOMUXC_SW_MUX_CTL_PAD_GPIO1_IO03的bit3~0 配置为 5
*/
ldr r0, =0X020E0068
ldr r1, =0X0101
str r1, [r0]
这里是配置 IO 的复用,即将 IOMUXC_SW_MUX_CTL_PAD_GPIO1_IO03 设置为 5。对应于十六进制就是 0x05。我这里竟然错用 二进制表示了。所以问题出现在这里。
重新编译,烧录后。运行后灯亮。