初学嵌入式我是从裸机程序开端的,刚学的时分也怎样也不知道将裸机程序在开发板上面运转。网上其实有许多办法,可是我测试过都是在UBOOT的基础上用DNW或许jlink等东西复制到内存中去运转,重启开发板后就失效了,并且UBOOT会对开发板的运转环境初始化,这样的运转环境,和咱们把程序烧写到nandflash里去运转是不一样的。如:uboot会对CPU时钟初始化,让cpu运转在532mhz下(或许其他的频率),而从nandflash运转程序咱们一般都没有初始化CPU时钟,则CPU靠外部晶振供给时钟,咱们的OK6410开发板的外部晶振是12Mhz(XTO,XTI引脚),不同之大则体现在运转速度上面。
先上程序
c程序:
- //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 - }
- 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< msDelay(10); } } - }
- void
main(void) - {
GPIO_Init(); LedTest(); - }
汇编程序:
- .globl
_start - _start:
ldr r0, =0x70000000 orr r0, r0, #0x13 mcr p15,0,r0,c15,c2,4 @ 256M(0x70000000-0x7fffffff) ldr r0, =0x7E004000 mov r1, #0 str r1, [r0] ldr sp, =8*1024 bl main - halt:
b halt
Makefile:
- led.bin:
start.o led.o arm-linux-ld -Ttext 0 -o led.elf start.o led.o 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 - clean:
rm *.o led.elf led.bin led.dis
咱们假定你的OK6410什么程序都没有(开机没有任何反响)。
咱们将三个线衔接到开发板上面:
1,开发板电源线
2,USB转串口线:一端衔接电脑USB口,一端衔接开发板。
3,USB device线:一端衔接电脑USB口,一端衔接开发板。(便是开发板上面的小USB口,dnw下载程序用,请依据飞凌的材料安装好驱动程序)
硬件衔接结束,现在介绍烧写过程。
烧写原理:用Linux的UBOOT指令 nand 烧写程序到开发板。
1,经过SD_Writer.exe将mmc.bin烧写到SD 卡中
2,将SD卡安装到开发板中并发动,快速敲空格键让开发板停留在uboot的发动画面,如下图所示。
3,输入dnw 50008000 下载你要烧写的程序,如图:
然后从dnw的usbport->Transmit->Transmit发送你要生成的led.bin文件。如下图
4,输入 nand erase 0 100000 擦除nandflash前1Mb空间。
5,输入 nand write.uboot 50008000 0 100000 将内存地址50008000中的1Mb数据写到nandflash的0~100000空间中。(即前1Mb中,uboot中输入的数据默许16进制)
6,将开发板设置到nandflash发动,并发动开发板,你就能够看到4盏LED灯在循环亮。
因水平有限,如果有什么过错请各位网友指出,我看到一定会更正。
—————————————————————————
2012/08/08修正阐明:因为OK6410选用的是每页4KB的nandflash,而CPU默许支撑最大2KB每页的nandflash,而形成榜首种办法烧写超越2KB,则办法失效,这是第二种办法,能够很好的兼容大的bin文件。