我正在開發一個基於iMX31平臺的新主板,該主板有一個 單片機,來自Micron的256MB LPDDR(MT46H64M32LFCM-6),我用NAND到 啓動主板(BOOT [4 :0] = 00001)。我們知道,一旦RedBoot開始運行,它將首先初始化系統,然後將其代碼的前2KB從NAND複製到DDR,然後跳轉到DDR的內存位置,然後從那裏運行代碼。但在我的情況下,更改爲程序櫃檯只需 將我的主板變成無聲磚。以下是代碼片段我說 約:RedBoot不能從DDR運行
1: ldmia r0!, {r3-r10}
stmia r1!, {r3-r10}
cmp r0, r2
blo 1b
/* Jump to SDRAM */
ldr r1, CONST_0x0FFF
and r0, pc, r1 /* offset of pc */
ldr r1, MXC_REDBOOT_ROM_START
add r1, r1, #0x10
add pc, r0, r1
nop
nop
nop
nop
...
一旦add pc, r0, r1
得到執行,整個事情停止。我已經驗證了我的DDR 初始化是正確的(所有的時序參數,ROW = 14,COL = 10和數據總線 size = x32),並且我已經跑了好幾次內存測試,沒有失敗,所以我非常自信 控制器和內存芯片本身都很好。在RedBoot中,一切 的外觀和工作狀況良好,直到我必須手動將程序計數器的值設置爲DDR存儲器映射範圍內的某個地方的 。
我在這裏呆了幾天,我仔細檢查了我複製到DDR 的數據與NAND中的數據是否相同,PC的價值也是正確的。
請大家幫忙,謝謝!
你是如何處理你的緩存?你在使用它嗎?在嘗試執行新代碼之前刷新它嗎?如果它已打開,請嘗試關閉緩存並查看是否有幫助。 – Splat 2011-04-01 03:10:59
@Splat在CPU初始化期間,L2緩存被禁用。 – 2011-04-01 15:30:11
是否包含啓用了RAM的內存範圍?如果沒有,它會拋出異常,你可能還沒有設置。 – 2011-04-30 11:51:09