OK6410烧写裸机程序到nandflash

发布者:快乐的小鸟最新更新时间:2016-04-05 来源: eefocus关键字:OK6410  烧写裸机程序  nandflash 手机看文章 扫描二维码
随时随地手机看文章
初学嵌入式我是从裸机程序开始的,刚学的时候也怎么也不知道将裸机程序在开发板上面运行。网上其实有很多办法,但是我测试过都是在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. #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; 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< 
  25.             msDelay(10);  
  26.          
  27.      
  28.  
  29. void main(void)  
  30.  
  31.     GPIO_Init();  
  32.     LedTest();  
  33.  

汇编程序:

 

 

[plain] view plaincopy
 
  1. .globl _start  
  2. _start:  
  3.   
  4.   
  5.       
  6.     ldr r0, =0x70000000  
  7.     orr r0, r0, #0x13  
  8.     mcr p15,0,r0,c15,c2,4       256M(0x70000000-0x7fffffff)  
  9.       
  10.   
  11.     ldr r0, =0x7E004000  
  12.     mov r1, #0  
  13.     str r1, [r0]  
  14.   
  15.       
  16.     ldr sp, =8*1024  
  17.     bl main  
  18. halt:  
  19.     halt    

 

Makefile:

 

[plain] view plaincopy
 
  1. led.bin: start.o led.o  
  2.     arm-linux-ld -Ttext -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.   
  6. start.o start.S  
  7.     arm-linux-gcc -o start.o start.S -c -O2  
  8.   
  9. led.o led.c  
  10.     arm-linux-gcc -o led.o led.c -c -O2  
  11.   
  12. clean:  
  13.     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文件。


关键字:OK6410  烧写裸机程序  nandflash 引用地址:OK6410烧写裸机程序到nandflash

上一篇:OK6410开发板uboot烧写
下一篇:openocd 命令行烧写ARM裸机程序

推荐阅读最新更新时间:2024-03-16 14:49

OK6410裸机片内内存中重定位代码
start.S源码: .globl _start _start: // 硬件相关的设置 // Peri port setup ldr r0, =0x70000000 orr r0, r0, #0x13 mcr p15,0,r0,c15,c2,4 @ 256M(0x70000000-0x7fffffff) // 关看门狗 // 往WTCON(0x7E004000)写0 ldr r0, =0x7E004000 mov r1, #0 str r1, // 重定位 adr r0, _start // 伪指令,取_start的当前地址 ldr r1, =_start
[单片机]
ok6410 nandflash 2
/********************************************** function: ok6410 nand flash operation sdrom ic: K9XXG08UXM 2g author: lvtory date: 2013.4.13 **********************************************/ #define MEM_SYS_CFG (*((volatile unsigned long *)0x7E00F120)) #define NFCONF (*((volatile unsigne
[单片机]
S5PV210的NandFlash应用(一)
准备分析 标题挂了一个(一),代表这个是涉及到NandFlash并不深入,只实现读操作。还是16k的代码,这次从NandFlash中读取,读到iRAM中地址为0xD0024000的地方。并调用main运行。如下图所示:(CPU会自动把B区代码拷贝到A区,我用A区代码从将B区代码拷贝到C区,并调用main运行) 资源工具 同《 S5PV210的LED应用(一)》 NandFlash: K9GAG08U0F (2G) 着手写程序 start.S中的代码拷贝很重要,Makefile中的链接地址很重要。 /* * $Id: nand_cp.c,v 1.1 2008/11/20 01:08:36 boyko Exp $
[单片机]
S5PV210的<font color='red'>NandFlash</font>应用(一)
NandFlash读写过程
一、结构分析 S3C2410处理器集成了8位NandFlash控制器。目前市场上常见的8位NandFlash有三星公司的k9f1208、k9f1g08、k9f2g08等。k9f1208、k9f1g08、k9f2g08的数据页大小分别为512Byte、2kByte、2kByte。它们在寻址方式上有一定差异,所以程序代码并不通用。本文以S3C2410处理器和k9f1208系统为例,讲述NandFlash的读写方法。 NandFlash的数据是以bit 的方式保存在memory cell里的,一般来说,一个cell 中只能存储一个bit,这些cell 以8 个或者16 个为单位,连成bit line,形成所谓的byte(x8)/wo
[单片机]
mini2440烧写裸机程序(linux+JLink)
一、编写源代码 源代码: /*******************************led_off.S**************************/ .text .global _start _start: LDR R0,=0x56000010 MOV R1,#0x00015400 STR R1, LDR R0,=0x56000014 MOV R1,#0x0df STR R1, MAIN_LOOP: B MAIN_LOOP /****************************
[单片机]
OK6410裸机之中断处理过程
start.S文件: .globl _start _start: // 0 地址 b reset // 复位时,cpu跳到0地址 ldr pc, =undefined_instruction // cpu遇到不能识别的指令时 ldr pc, _vector_swi // 当执行swi指令时, 进入swi模 式 b halt @ldr pc, _prefetch_abort // 预取中止异常 b halt @ldr pc, _data_abort // 数据访问异常 b halt @ldr
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved