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

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

1.使用超级终端调试

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

设置串口com1(com口要根据自己电脑的实际情况设置,USB转串口的可能会是com3或com4), 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程序:

[cpp] view plaincopyprint?
  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<time; 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<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();
}

汇编程序:

[plain] view plaincopyprint?
  1. .globl _start
  2. _start:
  3. /*硬件相关设置*/
  4. /* Peri port setup */
  5. ldr r0, =0x70000000
  6. orr r0, r0, #0x13
  7. mcr p15,0,r0,c15,c2,4       @ 256M(0x70000000-0x7fffffff)
  8. /*关看门狗*/
  9. ldr r0, =0x7E004000
  10. mov r1, #0
  11. str r1, [r0]
  12. /* 设置C程序运行的栈*/
  13. ldr sp, =8*1024
  14. bl main
  15. halt:
  16. b halt
.globl _start
_start:/*硬件相关设置*//* Peri port setup */ldr r0, =0x70000000orr r0, r0, #0x13mcr p15,0,r0,c15,c2,4       @ 256M(0x70000000-0x7fffffff)/*关看门狗*/ldr r0, =0x7E004000mov r1, #0str r1, [r0]/* 设置C程序运行的栈*/ldr sp, =8*1024bl main
halt:b halt 

Makefile:

[plain] view plaincopyprint?
  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.oarm-linux-ld -Ttext 0 -o led.elf start.o led.oarm-linux-objcopy -O binary led.elf led.binarm-linux-objdump -D led.elf > led.disstart.o : start.Sarm-linux-gcc -o start.o start.S -c -O2led.o : led.carm-linux-gcc -o led.o led.c -c -O2clean: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文件。

报]

]

举报]

[举报]

报]

举报]

[举报]

HTML/XMLJavaScriptCSSPHPC#C++JavaPythonRubyVisual BasicDelphiSQL其它

转载于:https://www.cnblogs.com/bo1989/archive/2012/12/03/2798916.html

OK6410裸机调试相关推荐

  1. OK6410裸机开发之LED灯

    平台:WinXP+eclipse+OpenJTAG 开发板:OK6410A 128M DDR 1G NandFlash ---------------------------------------- ...

  2. OK6410裸机程序---hello world

    上面已经解决 了几个问题. 现在我们的状态:可以在PC - OK6410 之间进行tftp传输,确定了一下可用的地址 空间,下面我们来说一下printf调试 . 因为没有jlink,只能用printf ...

  3. jlink怎么调试linux程序_纯Linux下的 ARM裸机调试环境搭建(GDB + JLink)

    一直想摆脱windows环境,在纯linux下进行arm裸机开发,但是由于一直不知道JLink如何在linux下运行和配置,一直无法进行下去. 以前都是windows+AXD调试.包括本人用的FL24 ...

  4. ok6410linux开发环境搭建,飞凌嵌入式知识汇021期:OK6410裸机程序之开始模板(Linux环境)...

    手中有OK6410开发板,一直想试试通过Linux来做做裸机开发,在网络论坛上也搜过一些资料作参考,整理了一下并做了解释或改动,希望这些东西可以大家分享下. 裸机程序的构成 基本的裸机程序由启动代码和 ...

  5. NUC972裸机调试步骤

    .将开发板设置成USB启动. 开发板拨码开关与启动方式设置对应如下: 其中PA1 ,PA0对应S1和S0 上电或复位,使开发板从USB启动. 开启NuWriter,选择正确的芯片型号,按下" ...

  6. 最低成本的ARM调试解决方案——有关于Wiggler、H-Jtag、OpenOCD、GDB

    origin: http://blog.sina.com.cn/s/blog_70bb32080100lx1u.html 又是一个多月没有动这个Blog嘿嘿,我发现一个有趣的现象,我的Blog在每年的 ...

  7. ARM CPU挂死和总线挂死的DS-5调试方法

    DS-5以及配套的DSTREAM/RealView是对ARM处理器进行裸机调试的利器,本文将针对工作中常见的CPU挂死情况,进行具体分析,将介绍如何区分CPU挂死以及通过CSAT区分总线挂死的具体操作 ...

  8. 第三章 裸机_第一个裸机程序(上)

    第一章 裸机调试入门知识 1.对于友善之臂Micro2440开发板进行裸机调试时,需要将启动FLASH选项开关拨动到NOR FLASH上.这样做的原因:裸机程序里面会包含很多的初始化,这些初始化一般都 ...

  9. Jlink 烧写文件到 nandflash norflash

    s3c2440开发板支持两种启动方式,一种是 nandflash 启动,此时 nandflash 中的前 4K 内容会由硬件自动拷贝至片内 SRAM 4K 内存中,这片内 4K 内存会被 map 到 ...

最新文章

  1. QQ群功能设计与心理学
  2. 芝麻HTTP:TensorFlow基础入门
  3. 冒泡排序算法_PHP冒泡排序算法(一)
  4. ffmpeg时间基种类及转换
  5. VTK:IO之ReadDICOMSeries
  6. java的decode_Java decode机试题
  7. 互达的集合(线段树)
  8. 云服务器测速脚本_美国云主机哪家好?BlueHost美国云主机性能测评
  9. loadrunner 打印变量
  10. JavaScript高级程序设计(第2版)pdf
  11. 不重启刷新win7环境变量(注册表)
  12. 自建DDNS教程【阿里云 AliDDNS 2.0】
  13. 搜狗新闻爬取怎么破解反爬机制呀,求指教
  14. WPF学习之绘图和动画
  15. 神经网络模型计算量分析
  16. 计算机辅助英语训练新方法,一种新的计算机辅助英语教学模式
  17. 结构型模式-外观模式
  18. 基于BOM搭建的生产管理系统——物料清单
  19. whistle安卓7+免root抓包
  20. Sumo学习日记 - day1 从traci开始

热门文章

  1. 基于c++的音乐播放器(1)
  2. python mysql 基于 sqlalvhrmy_Python基于DB-API操作MySQL数据库过程解析
  3. u盘弹出工具_双佳数码 | 电脑u盘无法弹出怎么办?
  4. SpringMVC注解驱动开发
  5. python文件传输模块_[宜配屋]听图阁 - python 使用poster模块进行http方式的文件传输到服务器的方法...
  6. C语言学习及项目开发所遇问题总集(一)---Mr.Zhang
  7. python生成正态分布数据_python 生成正态分布数据,并绘图和解析
  8. Redisson 布隆过滤器
  9. Java 蓝桥杯 矩阵乘法
  10. 使用pandas 按同一列名称合并,并解决concat() got an unexpected keyword argument ‘join_axes‘报错