zoukankan      html  css  js  c++  java
  • 五、裸机烧写

    转载:http://blog.sina.com.cn/s/blog_4baa8f6901019q4z.html

    http://www.amobbs.com/forum.php?mod=viewthread&tid=4824516

     本人最近在“裸奔”如今找到一个很好的方法,因为用Jlink有时候会有莫名奇妙的错误,使得调试失败,我总结出两个方法把我们的裸机程序在OK6410上面轻松跑起来:

        方法一:使用WinHex_14.0_SR-1_SC.exe来作为辅助软件。使程序烧写到SD卡中,从SD卡中启动裸奔程序。
        方法二:使用我们的uboot来从nand flash启动我们的裸奔程序。

    OK6410的裸机调试(不用Jlink)

    废话不多说,直接进入主题。
    有两种方法写入,一种是从sd卡启动,一种是从nand flash中启动。

    方法一:

    用 sd卡启动我们的裸机程序
    用到的软件:WinHex_14.0_SR-1_SC.exe (在帖子的最下面有这个软件下载)
    首先在RVDS 上编译裸机代码,RVDS 的设置可以参考我的设置,(好像不这么设置也可以成功)


    (原文件名:1.JPG)


    (原文件名:2.JPG)


    (原文件名:3.JPG)

    我的这项设置输出的是文件名为zImage 的二进制代码文件。注意是zImage!!没有.bin!之后一种方法就用到它,暂且先说了吧。

    插入已经格式化的SD卡,打开WinHex_14.0_SR-1_SC.exe这个软件。


    (原文件名:4.JPG)

    S3C6410 SD 启动模式原理: 上电后,CPU 自动将SD0 丛最后0x23FF处,连续8KB数据读到内部SRAM 0x0C000000 处执行。


    (原文件名:5.JPG)


    (原文件名:6.JPG)


    (原文件名:7.JPG)


    (原文件名:8.JPG)


    (原文件名:9.JPG)

    就这样,我们的裸奔程序就写到SD 卡中了,把OK6410 设置为SD 卡启动,就可以看到我们的裸机程序在运行了!

    方法二:
    借助 uboot把我们的裸机程序从nand flash中启动起来!
    我们一键烧写的方法,将SD做一些准备。
    打开SD_Writer.exe


    (原文件名:u-11.JPG)

    然后把uboot.bin拷贝到H盘中(SD卡的盘符)
    可以用位于OK6410-A 6410官方基础资料-2Glinux2.6.28demo 下的uboot.bin接下来把我们刚刚生成的裸机目标文件“zImage”拷贝到SD卡中。
    设置OK6410 为SD卡启动,用dnw观察打印的信息,看到此信息就说明烧写完成了。


    (原文件名:u-2.JPG)

    完成后把板子设置为nandflash启动,就可以“裸奔”了。看到这个信息就说明你的裸机程序在执行了。


    (原文件名:u-3.JPG)

    总结
    方法一借鉴了坛子里另一位大神的想法,方法二是本人自己摸索出来的!大家一起学习,一同进步!
    PS:下面提供的软件也可以到飞凌的论坛下载:www.witech.com.cn
    点击此处下载 ourdev_651299SYRDWL.rar(文件大小:1.68M) (原文件名:WinHex_14.0_SR-1_SC.rar)

    OK6410裸机调试(使用串口,不需要使用JLINK)

    通过串口裸机调试的有两种方法,一种是使用Windows系统自带的超级终端,另一种是使用三星公司提供的串口调试软件dnw,两种方法略有不同,但其本质是一样的。

    1.使用超级终端调试

    首先打开并建立超级终端(这个就不用解释了吧?)

    设置串口com1com口要根据自己电脑的实际情况设置,USB转串口的可能会是com3com4), 11520MHZ

    启动arm开发板,迅速敲回车键或者空格键,进入uboot

    # loadb 0x50008000 //下载文件代码地址

    点击发送 后,出现上图所示对话框,协议项选择 Kermit ,文件名一栏选择程序所生成的.bin 格式文件。点击发送,下载完成后

    敲入命令 #go 0x50008000 即可看到想要的效果(程序要写对啊,哈哈)。

    2. 使用dnw软件进行裸机调试

    连接好串口线、USB线、打开DNW,配置如下

    启动开发板,迅速敲击空格键进入Uboot状态。

    # dnw 0x50008000

    transmit 选择你生成的bin文件

    # go 0x50008000

    以上就是我在进行OK6410裸机调试的时候的一点心得,希望对大家有些帮助,还有就是有些同学不知道 .bin 文件的生成方法,其实随便找份介绍 ADS1.2 或者 RVDS 的教程都有介绍的哈

    欢迎大家留言交流心得,请尊重他人劳动成果,转载请注明本网址链接 http://blog.csdn.net/huangshizeng/article/details/6901805,谢谢!

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

    下面我们介绍怎么将我们写好的bin文件烧写到nandflash的前8KB中去,当开发板启动后,它会直接拷贝nandflash的前8K到sram中运行。

    先上程序

    c程序:

    1. //led.c 一个简单的循环点灯程序
    2. #define rGPMCON (*(volatile unsigned *)(0x7F008820))
    3. #define rGPMDAT (*(volatile unsigned *)(0x7F008824))
    4. #define rGPMPUD (*(volatile unsigned *)(0x7F008828))
    5. void msDelay(int time)
    6. {
    7. volatile unsigned int i,j;
    8. for(i = 0; i < 20000; i++)
    9. for(j=0; j
    10. }
    11. void GPIO_Init(void)
    12. {
    13. rGPMCON = 0x11111;
    14. rGPMPUD = 0x00;
    15. rGPMDAT = 0X1F;
    16. }
    17. void LedTest(void)
    18. {
    19. volatile unsigned int i;
    20. while (1)
    21. {
    22. for(i=0; i<4; i++)
    23. {
    24. rGPMDAT = ~(1<<i);
    25. msDelay(10);
    26. }
    27. }
    28. }
    29. void main(void)
    30. {
    31. GPIO_Init();
    32. LedTest();
    33. }
    //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<4; i++) { rGPMDAT = ~(1<<i); msDelay(10); } } } void main(void) { GPIO_Init(); LedTest(); }

    汇编程序:

    1. .globl _start
    2. _start:
    3. ldr r0, =0x70000000
    4. orr r0, r0, #0x13
    5. mcr p15,0,r0,c15,c2,4 @ 256M(0x70000000-0x7fffffff)
    6. ldr r0, =0x7E004000
    7. mov r1, #0
    8. str r1, [r0]
    9. ldr sp, =8*1024
    10. bl main
    11. halt:
    12. b halt
    .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:

    1. led.bin: start.o led.o
    2. arm-linux-ld -Ttext 0 -o led.elf start.o led.o
    3. arm-linux-objcopy -O binary led.elf led.bin
    4. arm-linux-objdump -D led.elf > led.dis
    5. start.o : start.S
    6. arm-linux-gcc -o start.o start.S -c -O2
    7. led.o : led.c
    8. arm-linux-gcc -o led.o led.c -c -O2
    9. clean:
    10. rm *.o led.elf led.bin led.dis
    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

     

    将上述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文件。

  • 相关阅读:
    Spring Boot mybatis-starter介绍
    Spring Boot starter原理
    Spring Boot starter介绍以及自定义starter
    Spring Boot conditional注解介绍
    Spring Boot 配置类3-流程核心方法doProcessConfigurationClass
    Spring Boot 配置类2-解析逻辑(processConfigBeanDefinitions方法中的循环体)
    Ubuntu14.04下安装docker
    ubuntu安装docker
    Spring Cloud 统一配置
    第四章 springboot + swagger
  • 原文地址:https://www.cnblogs.com/TFH-FPGA/p/3157626.html
Copyright © 2011-2022 走看看