什么是燒寫
燒寫就是將寫好的程序編譯好形成HEX或BIN文件后,將這個程序?qū)戇M單片機芯片的過程就叫燒寫,是沿用最早的單片機只能一次性寫入,因此就叫做燒寫,后來有了紫外線可擦除的EEPROM,現(xiàn)在有了可隨時擦除的FLASH ROM,但依然沿用叫燒寫了,這樣也方便特指PC向MCU寫入程序。免得和單片機工作時串口的上傳和下次數(shù)據(jù)相混淆。
開發(fā)板燒寫
開發(fā)板沒有BootLoader的燒寫(flash中沒有任何內(nèi)容時,或誤擦除uboot),僅用于燒寫bootloader和裸機程序到flash上。
1.)并口Wiggler JTAG調(diào)試板 配合HJTAG軟件,可以燒寫nandflash和norflash,并口速度較慢 (需要用到并口,現(xiàn)在筆記本電腦基本沒有并口了,這個方法局限性很大)
2.)HJTAG USB仿真器 配合HJTAG軟件,可以燒寫nandflash和norflash,速度極快,適用于沒有并口的電腦
3) Jlink V8仿真器 配合JFlash Arm軟件,只能燒寫Norflash(也可間接燒寫Nandflash,間接燒寫到Nandflash是借助sdram來實現(xiàn)燒寫的,稍微有一點難,這里公司為了節(jié)約成本很多都采用nandflash來啟動內(nèi)核,norflash和nandflash這里區(qū)別就明顯體現(xiàn)出來了,norflash可以像內(nèi)存一樣直接操作,nandflash只能通過控制寄存器來操作,這里大家一定明白過來,硬件上的差異也是很大的),適用于沒有并口的電腦
開發(fā)板有u-boot,使用uboot燒寫,flash中需要能正常運行uboot,適用于燒寫bootloader,kernel和rootfs
1)USB口,S3C2440提供的uboot集成了USB Download的功能,可配合三星提供的DNW軟件,方便的下載程序(缺點是燒寫速度太慢,優(yōu)點是三星廠家提供制作好的u-boot源碼) DNW軟件有windows版本和linux版本,其中l(wèi)inux版本較方便使用,并且穩(wěn)定。
2)網(wǎng)口,也是一種速度較快的下載方式,uboot中集成了tftp Download功能,可配合任意一種tftp Server軟件實現(xiàn)下載程序。同樣可用于windows和linux平臺,推薦大家使用這種方式來下載,因為速度非常的快。
3)串口,使用串口Xmodem協(xié)議下載程序,相比USB和網(wǎng)口,速度較慢,不推薦此方式
4)U盤,不需要PC機軟件的支持,將U盤插在板上,就可以利用uboot下載U盤中要燒寫的文件,并可實現(xiàn)全自動燒寫
5)SD/TF卡,等同于U盤燒寫程序
燒寫程序
1、uboot的燒寫
下載Uboot分為兩個步驟,第一步將uboot下載到系統(tǒng)的擴展RAM并運行,第二步通過內(nèi)存中運行的uboot把整個uboot下載到內(nèi)存再燒寫到nandflash
第一步下載uboot到擴展RAM
首先使用短路塊選擇系統(tǒng)從內(nèi)部啟動,復(fù)位或者上電就會在串口軟件(115200 8 n 1)看到打印的信息LPC31xx READY FOR PLAIN IMAGE》,此時使用串口軟件的發(fā)送文件選擇發(fā)送u-boot-init.bin,再發(fā)送u-boot.bin,之后就會在RAM中啟動uboot,打印輸出啟動信息,并進行倒計時,此時發(fā)送任意字符給系統(tǒng),停止計時,關(guān)閉串口軟件,使用超級終端連接系統(tǒng)。
第二步燒寫uboot到nandflash
在超級終端中輸入loady命令,再使用傳送/發(fā)送文件,選擇Ymodem協(xié)議,發(fā)送u-boot.bin,接收完成后,先擦除nand erase,可以全擦掉(不用給參數(shù)),也可以使用使用參數(shù)指定區(qū)域,一般第一次要全擦,而后使用nand_params將flash的信息寫入其中,最后使用nand write 0x30001000 0x4000 0x100000
其中,0x30001000 是uboot在內(nèi)存中的地址;
0x4000 uboot在flash中存放的起始地址,需要根據(jù)實際的分區(qū)情況而定;
0x100000 是uboot的大小,不小于實際大??;
至此,將uboot寫入到nandflash中,可以將短路跳線去掉,使其從nandflash啟動。
2、內(nèi)核的燒寫
在uboot啟動倒計時,擊任意鍵停止,輸入loady,與uboot燒寫相似,使用的命令主要有:nand erase 0x200000(地址) 0x200000(大?。?/p>
nand write 0x30001000 0x200000 0x200000
3、文件系統(tǒng)的燒寫
文件系統(tǒng)的燒寫,可以通過與內(nèi)核相似的方法使用串口燒寫,也可以通過掛載nfs使用mtd_debug 工具燒寫,由于文件系統(tǒng)較大,使用第一種方式會慢一些。
串口燒寫使用到的命令
loady
nand erase 0x600000 0x3a00000(目前的分區(qū)情況)
nand write 0x30001000 0x600000 0x800000(實際大?。?/p>
使用nfs燒寫用到的命令
mtd_debug erase /dev/mtd2 0 0x3a00000
mtd_debug write /dev/mtd2 0 0x800000 ubi.img
各項的含義可以參考mtd_debug 的幫助,直接mtd_debug 即可獲取說明,其中的len可以使用十進制數(shù),但是在uboot中是不可以的,不加0x也會認為是十六進制。
4、啟動掛載文件系統(tǒng)的選項
在uboot中可以通過環(huán)境變量設(shè)置啟動的選項,一般只需要配置掛載的文件系統(tǒng)是nfs還是ubi,及內(nèi)核啟動選項。
掛載nanflash中的ubifs:
setenv bootargs console=ttyS0,115200n8 ubi.mtd=2 root=ubi0:rootfs rootfstype=ubifs;
掛載129.1.4.199上/rfs/rootfs,并且本機的ip設(shè)為129.1.31.33等:
setenv bootargs noinitrd root=/dev/nfs console=ttyS0,115200n8 nfsroot=129.1.4.199:/rfs/rootfs,proto=tcp,nfsvers=3,nolock ip=129.1.31.33:129.1.4.199:129.1.88.1:255.255.0.0::eth0:off
啟動內(nèi)核的選項:
setenv bootcmd nand read 0x30001000 0x200000 0x200000; bootm 0x30001000;
修改過uboot的環(huán)境變量都需要saveenv命令保存修改
評論