您的位置:首页 > 其它

OK6410裸机调试

2012-12-03 00:31 246 查看


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?

//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();

}

//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?

.globl _start

_start:

/*硬件相关设置*/

/* Peri port setup */

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]

/* 设置C程序运行的栈*/

ldr sp, =8*1024

bl main

halt:

b halt

.globl _start
_start:

/*硬件相关设置*/
/* Peri port setup */
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]

/* 设置C程序运行的栈*/
ldr sp, =8*1024
bl main
halt:
b halt


Makefile:

[plain] view plaincopyprint?

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

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

报]

]

举报]

[举报]

报]

举报]

[举报]

HTML/XMLJavaScriptCSSPHPC#C++JavaPythonRubyVisual BasicDelphiSQL其它
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: