您的位置 首页 知识

OK6410烧写裸机程序到nandflash

初学嵌入式我是从裸机程序开始的,刚学的时候也怎么也不知道将裸机程序在开发板上面运行。网上其实有很多办法,但是我测试过都是在UBOOT的

初学嵌入式我是从裸机程序开端的,刚学的时分也怎样也不知道将裸机程序在开发板上面运转。网上其实有许多办法,可是我测试过都是在UBOOT的基础上用DNW或许jlink等东西复制到内存中去运转,重启开发板后就失效了,并且UBOOT会对开发板的运转环境初始化,这样的运转环境,和咱们把程序烧写到nandflash里去运转是不一样的。如:uboot会对CPU时钟初始化,让cpu运转在532mhz下(或许其他的频率),而从nandflash运转程序咱们一般都没有初始化CPU时钟,则CPU靠外部晶振供给时钟,咱们的OK6410开发板的外部晶振是12Mhz(XTO,XTI引脚),不同之大则体现在运转速度上面。

下面咱们介绍怎样将咱们写好的bin文件烧写到nandflash的前8KB中去,当开发板发动后,它会直接复制nandflash的前8K到sram中运转。

先上程序

c程序:

[cpp]view plaincopy

  1. //led.c一个简略的循环点灯程序
  2. #definerGPMCON(*(volatileunsigned*)(0x7F008820))
  3. #definerGPMDAT(*(volatileunsigned*)(0x7F008824))
  4. #definerGPMPUD(*(volatileunsigned*)(0x7F008828))
  5. voidmsDelay(inttime)
  6. {
  7. volatileunsignedinti,j;
  8. for(i=0;i<20000;i++)
  9. for(j=0;j
  10. }
  11. voidGPIO_Init(void)
  12. {
  13. rGPMCON=0x11111;
  14. rGPMPUD=0x00;
  15. rGPMDAT=0X1F;
  16. }
  17. voidLedTest(void)
  18. {
  19. volatileunsignedinti;
  20. while(1)
  21. {
  22. for(i=0;i<4;i++)
  23. {
  24. rGPMDAT=~(1<
  25. msDelay(10);
  26. }
  27. }
  28. }
  29. voidmain(void)
  30. {
  31. GPIO_Init();
  32. LedTest();
  33. }

汇编程序:

[plain]view plaincopy

  1. .globl_start
  2. _start:
  3. ldrr0,=0x70000000
  4. orrr0,r0,#0x13
  5. mcrp15,0,r0,c15,c2,4@256M(0x70000000-0x7fffffff)
  6. ldrr0,=0x7E004000
  7. movr1,#0
  8. strr1,[r0]
  9. ldrsp,=8*1024
  10. blmain
  11. halt:
  12. bhalt

Makefile:

[plain]view plaincopy

  1. led.bin:start.oled.o
  2. arm-linux-ld-Ttext0-oled.elfstart.oled.o
  3. arm-linux-objcopy-Obinaryled.elfled.bin
  4. arm-linux-objdump-Dled.elf>led.dis
  5. start.o:start.S
  6. arm-linux-gcc-ostart.ostart.S-c-O2
  7. led.o:led.c
  8. arm-linux-gcc-oled.oled.c-c-O2
  9. clean:
  10. rm*.oled.elfled.binled.dis

将上述3个文件放在Linux上面编译生成led.bin,然后将led.bin复制到windows目录下。

咱们假定你的OK6410什么程序都没有(开机没有任何反响)。

咱们将三个线衔接到开发板上面:

1,开发板电源线

2,USB转串口线:一端衔接电脑USB口,一端衔接开发板。

3,USB device线:一端衔接电脑USB口,一端衔接开发板。(便是开发板上面的小USB口,dnw下载程序用,请依据飞凌的材料安装好驱动程序)

硬件衔接结束,现在介绍烧写过程。

烧写原理:用Linux的UBOOT指令 nand 烧写程序到开发板。

1,经过SD_Writer.exe将mmc.bin烧写到SD 卡中,将开发板设置到SD卡发动。(具体办法拜见飞凌开发板linux3.0.1用户手册.pdf)

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文件。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/zhishi/263362.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部