參考博文“OK6410啟動分析”可知S3C6410在nand flash啟動時硬件會自動將NANDflash中前8K的程序完整復制到S3C6410片內內存中(OK6410的nand flash一頁是4K),但是這前8K并不是連續(xù)的2頁內容,6410為了兼容2K頁的nand flash啟動時自動拷貝nand flash前4頁的內容到片內內存執(zhí)行,而且拷貝時只拷每頁中的前2KByte,面對這樣的拷貝方式,如果我們的裸機代碼小于2k則可以正常運行,但是如果編譯出來的.bin文件大于2K就要注意了,不能直接把邏輯代碼直接一股腦寫到nand flash當中,在我們前面的裸機實驗當中編譯出來的邏輯代碼都小于2K,上電啟動后可以直接在片內RAM中運行。
像自己寫的bootloader源碼初始化硬件后直接把內核拷貝到SDRAM中,不像2440自己寫的bootloader那樣想拷貝自己到SDRAM中,跳過去運行以后再初始化內核參數拷貝內核到SDRAM中再啟動內核,編譯出來.bin文件很小。但是當邏輯程序大于2K怎么辦?解決辦法如下:
1、只燒寫前4頁的前2K,前4頁的后2K不用,處理方法有兩種:
①用燒寫命令多次燒寫,比如示例如下:
參考博文“百問網6410第1期Nand flash的問題”,編譯得到uart.bin文件(8.83 KB )后,從SD卡啟動,利用SD卡上的u-boot,將uart.bin 文件寫入nand flash中,操作步驟如下:
a. dnw 50008000 //將uart.bin發(fā)送到內存地址50008000處
b. nand erase 0 100000 //擦除nand flash 0地址開始的1M空間
c. nand write 50008000 0 1000 //將uart.bin 偏移為0開始的4k寫入第1頁nand flash
d. nand write 50008800 1000 1000 //將uart.bin 偏移為2k開始的4k寫入第2頁nand flash
e. nand write 50009000 2000 1000 //將uart.bin 偏移為4k開始的4k寫入第3頁nand flash
f. nand write 50009800 3000 1000 //將uart.bin 偏移為6k開始的4k寫入第4頁nand flash
g. nand write 5000A000 4000 FE000
//將uart.bin 偏移為8k開始的剩余(1M - 8k)內容寫入nand flash 第5頁開始之后的空間
這樣nand flash前4頁的每頁前2k便保存了uart.bin文件的前8k內容。
②用"mlc_boot_tool"工具處理一下BIN文件:
以"Ok6410_mlc_demo"目錄下的"16th_nand_all"為例子
a. cd Ok6410_mlc_demo
b. make clean
c. make // 得到 uart.bin ,發(fā)現(xiàn)他大于2K,所以需要處理
d. ./mlc_boot_tool uart.bin wy.bin // 重新生成的 wy.bin 就這最用下載到開發(fā)板上面的bin文件
注意:
為什么需要"mlc_boot_tool"工具呢?請結合源碼和6410的啟動流程自行分析。
a、S3C6410 nand啟動,會自動拷貝前8K數據到SRAM中,但是我們的MLC nand每頁大小為4K的,而6410的CPU硬件決定了在它自動拷貝的時候每頁只能拷貝2K。即NAND啟動時,nand的前4頁中,每頁中的前2K數據才是有用的。
b、所以我們的工具就是把bin文件前面連續(xù)的8K數據拆出來放到MLC NAND的前4頁里去。即:BIN文件中的第1個2K數據放在NAND的第1頁,第2個2K數據放在第2頁,第3個2K數據放在第3頁,第4個2K數據放在第4頁。 因為MLC NAND頁大小為4K,所以前面4頁只有一半的空間被用到了。從第5頁開始,每頁的4K空間都被用到了。
c、mlc_boot_tool工具就是把bin文件做成:(2k有用數據+2k無用數據) x 4 + 剩余數據
2、代碼重定位的時候自動判斷,前4頁中只拷貝2K,其他頁正常拷貝:
參考博文“百問網6410第1期Nand flash的問題”修改nand_read函數,如果是前4頁,則只讀取每頁的前2k內容;如果是前4頁之后,則讀取每頁的全部內容。
3、按照博文“燒寫OK6410裸板方法匯總”來燒寫nand flash即可。
====================================================================
番外篇:
1、6410 NAND問題
答:對于OK6410,需要處理一下BIN文件。我們發(fā)布的源碼里有這一段話:
(2).處理bin文件
以"Ok6410_mlc_demo"目錄下的"16th_nand_all"為例子
a. cd Ok6410_mlc_demo
b. make clean
c. make // 得到 uart.bin ,發(fā)現(xiàn)他大于2K,所以需要處理
d. ./mlc_boot_tool uart.bin wy.bin // 重新生成的 wy.bin 就這最用下載到開發(fā)板上面的bin文件
注意:
為什么需要"mlc_boot_tool"工具呢?請結合源碼和6410的啟動流程自行分析。
①. S3C6410 nand啟動,會自動拷貝前8K數據到SRAM中,但是我們的MLC nand每頁大小為4K的,而6410的
CPU硬件決定了在它自動拷貝的時候每頁只能拷貝2K。即NAND啟動時,nand的前4頁中,每頁中的前2K數
據才是有用的。
②. 所以我們的工具就是把bin文件前面連續(xù)的8K數據拆出來放到MLC NAND的前4頁里去。即:BIN文件中的第
1個2K數據放在NAND的第1頁,第2個2K數據放在第2頁,第3個2K數據放在第3頁,第4個2K數據放在第4
頁。因為MLC NAND頁大小為4K,所以前面4頁只有一半的空間被用到了。從第5頁開始,每頁的4K空間都被
用到了。
③. mlc_boot_tool工具就是把bin文件做成:(2k有用數據+2k無用數據) x 4 + 剩余數據
2、我這最近在玩GSM模塊,需要用到uart; 我發(fā)現(xiàn)在終端中,開發(fā)板自己本身用的是s3c2410_serial0, 我想知道是如何來確定引腳引腳與設備文件的關系?在/dev下,還有很多tty設備文件,這些是具體怎么關聯(lián)到引腳上的?
答:/dev/tty1,2...等都是虛擬的設備,不用管它。
你只需要管/dev/s3c2410_serial0,1,2;在驅動程序里,它會操作的UART的對應寄存器,設置對應的引腳
3、 dm9k問題這里dm9000的操作有個地方不大明白?
static void dm9000_reset(board_info_t * db)
{
// RESET device
writeb(DM9000_NCR, db->io_addr);
udelay(200);
writeb(NCR_RST, db->io_data);
udelay(200);
}
reset操作就是往下面寄存器寫NCR_RST,可是上面函數中db->io_addr代表S3C2410_CS4
而db->io_data代表S3C2410_CS4 + 4,可是這兩個東西到底代表什么呢?寄存器?
答:對于DM9000,要把數據B寫入地址A,是這樣操作的:
先把A作為數值發(fā)給io_addr;再把B作為數值發(fā)給io_data。io_addr和io_data的差別在于地址線BIT2,對應DM9000的CMD引腳。
上一篇:OK6410-實驗指令筆記
下一篇:OK6410默認u-boot啟動參數
推薦閱讀
史海拾趣
設計資源 培訓 開發(fā)板 精華推薦
- 正式發(fā)布本土化戰(zhàn)略,英飛凌猛攻中國市場
- 純視覺的自動駕駛會有哪些安全問題?
- 電池市場月報|2025年5月:穩(wěn)定增長,動力電池同比出口+30%
- 7納米以下汽車芯片測試的新挑戰(zhàn)!
- 英飛凌將CAPSENSE?集成到PSOC? HV MCU中 用于智能傳感器和執(zhí)行器
- 恩智浦與Rimac Technology聯(lián)合開發(fā)用于高級域和區(qū)域控制的集中式車輛架構
- 佳能開發(fā)高動態(tài)范圍SPAD傳感器 有望應用于自動駕駛和高級駕駛輔助系統(tǒng)
- 全固態(tài)電池生產線落地韓國
- 10 萬顆下線,車企很難拒絕4D成像雷達
- 自動駕駛毫米波雷達之間會相互干擾嗎?
- 答題抽獎:Mentor Tessent Automotive相關測試解決方案(獎品池還剩不少獎品喲)
- Mouser&TE直播:解鎖智能家居部件新技術,探索連接黑科技
- 全球首款Cortex-M23內核物聯(lián)網芯片SAML10和SAM L11系列 闖關獲取SAML10/SAML11法寶,拆除電子界安全危機,贏好禮!
- 有獎電源設計問卷調查
- 直播已結束【用于光伏逆變器/儲能系統(tǒng)的歐姆龍繼電器 /開關/連接器解決方案】
- 【搶樓贏禮】聊聊我用過的MOSFET!
- 【已結束】有獎直播【TI 全新CC2340無線 MCU,助力低功耗藍牙應用】
- 羅姆有獎直播 | 高輸出功率激光二極管—助力激光雷達性能提升
- 有獎評測:50套來自恩智浦全新快速物聯(lián)網原型設計套件(價值350元)
- 您的電路保護有足夠的空間嗎?Littelfuse的881系列保險絲迎接這一挑戰(zhàn)