OK6410燒寫(xiě)裸機(jī)程序到nandflash
先上程序
c程序:
- //led.c
一個(gè)簡(jiǎn)單的循環(huán)點(diǎn)燈程序 - #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 - }
- 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< msDelay(10); } } - }
- void
main(void) - {
GPIO_Init(); LedTest(); - }
匯編程序:
- .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:
- 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
我們假設(shè)你的OK6410什么程序都沒(méi)有(開(kāi)機(jī)沒(méi)有任何反應(yīng))。
我們將三個(gè)線(xiàn)連接到開(kāi)發(fā)板上面:
1,開(kāi)發(fā)板電源線(xiàn)
2,USB轉(zhuǎn)串口線(xiàn):一端連接電腦USB口,一端連接開(kāi)發(fā)板。
3,USB device線(xiàn):一端連接電腦USB口,一端連接開(kāi)發(fā)板。(就是開(kāi)發(fā)板上面的小USB口,dnw下載程序用,請(qǐng)根據(jù)飛凌的資料安裝好驅(qū)動(dòng)程序)
硬件連接完畢,現(xiàn)在介紹燒寫(xiě)步驟。
燒寫(xiě)原理:用Linux的UBOOT命令 nand 燒寫(xiě)程序到開(kāi)發(fā)板。
1,通過(guò)SD_Writer.exe將mmc.bin燒寫(xiě)到SD 卡中
2,將SD卡安裝到開(kāi)發(fā)板中并啟動(dòng),快速敲空格鍵讓開(kāi)發(fā)板停留在uboot的啟動(dòng)畫(huà)面,如下圖所示。
3,輸入dnw 50008000 下載你要燒寫(xiě)的程序,如圖:
然后從dnw的usbport->Transmit->Transmit發(fā)送你要生成的led.bin文件。如下圖
4,輸入 nand erase 0 100000 擦除nandflash前1Mb空間。
5,輸入 nand write.uboot 50008000 0 100000 將內(nèi)存地址50008000中的1Mb數(shù)據(jù)寫(xiě)到nandflash的0~100000空間中。(即前1Mb中,uboot中輸入的數(shù)據(jù)默認(rèn)16進(jìn)制)
6,將開(kāi)發(fā)板設(shè)置到nandflash啟動(dòng),并啟動(dòng)開(kāi)發(fā)板,你就可以看到4盞LED燈在循環(huán)亮。
因水平有限,如果有什么錯(cuò)誤請(qǐng)各位網(wǎng)友指出,我看到一定會(huì)更正。
---------------------------------------------------------------------------
2012/08/08修改說(shuō)明:由于OK6410采用的是每頁(yè)4KB的nandflash,而CPU默認(rèn)支持最大2KB每頁(yè)的nandflash,而造成第一種方法燒寫(xiě)超過(guò)2KB,則方法失效,這是第二種方法,可以很好的兼容大的bin文件。
評(píng)論