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