Я работаю над новой платой на платформе iMX31, эта плата имеет
однокристальный 256 МБ LPDDR от Micron (MT46H64M32LFCM-6), и я использую NAND для
загрузите доску (BOOT [4: 0] = 00001).
Мы знаем, что как только RedBoot начнет работать, он сначала инициализирует систему, затем скопирует
первые 2 КБ своего кода от NAND до DDR, затем перейдите в область памяти
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, и значение ПК также было правильным.
Пожалуйста, помогите, спасибо!