以前只是用rvds和jlink在线仿真过裸机程序,掉电后程序会丢失,因此今天尝试 将裸机程序烧写进nandflash中,且重启板子后可以自动运行裸机程序。
1、usb转串口驱动 在飞凌配套光盘里。
2、dnw usb 驱动安装:由于PC机是win7 64位,没找到可以直接安装的驱动,所以通过DOS命令 bcdedit /set testsigning on 开启测试模式,避免系统检测驱动的数字签名证书。
3、在虚拟机中安装交叉编译工具链 arm-linux-gcc-4.3.2.tgz:
将文件从win7复制到linux /home/aatorx下
以root用户解压缩(tar xvzf arm-linux-gcc-4.3.2.tgz -C /), 解压后的编译命令存放在/usr/local/arm/4.3.2/bin/中
vi /etc/profile 在文件最下面添加一行 PATH=/usr/local/arm/4.3.2/bin PS:等号两边不能有空格,如果是多个路径用分号隔开,不能有空格,如果已有PATH在后面加 :/usr/local/arm/4.3.2/bin
source /etc/profile 使新添加的命令可以直接使用,即命令前不用加路径
4、建立led.c
#define rGPMCON (*(volatile unsigned *)(0x7f008820))#define rGPMDAT (*(volatile unsigned *)(0x7f008824))
#define rGPMPUD (*(volatile unsigned *)(0x7f008828))
void msDelay(int time)
{
volatile unsigned int i,j;
for(i = 0 ; i < 20000 ; i++ )
for(j = 0 ; j < time ; j++);
}
void GPIO_Init(void)
{
rGPMCON = 0x11111;
rGPMPUD = 0x00;
rGPMDAT = 0X1F;
}
void LedTest(void)
{
volatile unsigned int i;
while(1)
{
for( i = 0 ; i < 4 ; i++ )
{
rGPMDAT = ~(1 << i);
msDelay(10);
}
}
}
void main (void)
{
GPIO_Init();
LedTest();
}
5、建立init.c
.globl _start
_start:
ldr r0,=0x70000000
orr r0,r0,#0x13
mcr p15,0,r0,c15,c2,4
ldr r0,=0x7e004000
mov r1,#0
str r1,[r0]
ldr sp,=8*1024
bl main
halt:
b halt
6、建立makefile
led.bin : start.o led.o
arm-linux-ld -Ttext 0 start.o led.o -o led.elf
arm-linux-objcopy -O binary led.elf led.bin
arm-linux-objdump -D led.elf > led.dis
start.o : start.S
arm-linux-gcc -o start.o start.S -c -O2
led.o : led.c
arm-linux-gcc -o led.o led.c -c -O2
.PHONY : clean
clean :
rm *.o led.elf led.bin led.dis
7、将三个文件放在一个文件夹中make,生成led.bin,将led.bin 拷到 windows目录下。
打开dnw,连接usb转串口,usb线,在uboot界面进入命令行,dnw 50008000,然后从菜单栏中的usb port -> transmit 将led.bin下载到该地址。
输入nand erase 0 100000 擦除nandflash前1Mb空间 。
输入nand write.uboot 50008000 0 100000 将内存50008000中1Mb数据写到nandflash的前1M空间。
8、将开发板设置到nandflash启动,并启动开发板,可以看到程序运行结果。