S3c2410軟件調(diào)試總結(jié)
初始化串口
串口統(tǒng)一選用UART0,模式采用115200、1bit STOP、No Parity。
最后跳轉(zhuǎn)到我們自己的應(yīng)用程序!
附:我得程序所使用的地址空間結(jié)構(gòu)以及MMU中C、B的設(shè)置:
Blank Area: RW_FAULT 0x5b000000 ~ 0xffffffff
Sram SFR: NCNB 0x40000000 ~ 0x4affffff
Blank Area: RW_FAULT 0x34000000 ~ 0x3fffffff
Int_Vec, Stack, MTT: CNB 0x33f00000 ~ 0x33ffffff
SDRAM Download: NCNB 0x31000000 ~ 0x33efffff
SDRAM Exec RW: CB 0x30800000 ~ 0x30ffffff
SDRAM Exec R CNB 0x30000000 ~ 0x307fffff
Bank5, FPGA: NCNB 0x28000000 ~ 0x2fffffff
Bank4, FPGA: NCNB 0x20000000 ~ 0x27ffffff
Bank3, Bottom NIC: NCNB 0x18000000 ~ 0x1fffffff
Bank2, Bottom Flash: CNB 0x10000000 ~ 0x17ffffff
Bank1, Bottom Sram: CNB 0x08000000 ~ 0x0fffffff
Bank0, Flash or Sram: CNB 0x00000000 ~ 0x07ffffff
Nor Flash Bootloader
這是我著手寫的第一個(gè)程序,我的想法是讓這個(gè)程序同時(shí)支持通過串口對(duì)Nand 和 Nor FLASH的燒寫,如果不進(jìn)行任何燒寫,那么就跳到Nor Flash的第二個(gè)section啟動(dòng)應(yīng)用程序,這樣一來,即使脫離JTGA,我也可以使用串口進(jìn)行盲調(diào)。
由于有現(xiàn)成的初始化文件和flash燒寫的示例程序,開發(fā)起來還比較快。當(dāng)然也遇到了一些問題,一開始連flash的device ID都讀不出來,后來發(fā)現(xiàn)我指針沒有定義成volatile類型,flash的操作時(shí)序被編譯器優(yōu)化了;再者,在對(duì)Nor Flash進(jìn)行操作時(shí),bank0在MMU中的類型一定要設(shè)為NCNB,這樣比較保險(xiǎn)。
遇到最大的問題就是下面的了,一開始我用jtag把程序下載到0x30000000的地方運(yùn)行,對(duì)Nor Flash的燒寫完全正常,但是當(dāng)把程序下載到Nor Flash中啟動(dòng)運(yùn)行后,再對(duì)Nor Flash的section 2進(jìn)行燒寫時(shí),就出現(xiàn)了問題。所幸沒多久我就意識(shí)到了問題,將程序放在Nor Flash中運(yùn)行,同時(shí)有對(duì)同一片flash進(jìn)行操作,那么操作時(shí)序勢(shì)必會(huì)被CPU的指令讀取時(shí)序所破壞,因此程序必須搬運(yùn)到SDRAM中運(yùn)行。
但是啟動(dòng)地址有必須是零地址,所以我采用了前文提到的scatter文件的方法,將非必要的代碼全部搬到sdram中運(yùn)行,scf文件格式就是前文中的那個(gè)。當(dāng)然采用了__main的入口,調(diào)用了ADS的鏈接庫(kù),讓它幫忙建立程序的運(yùn)行環(huán)境。
至此,Nor Flash Bootloader可以順暢無憂的實(shí)現(xiàn)其功能了。
評(píng)論