pvvx
Активный участник сообщества
Загрузка кода в SDRAM для RTL8711AM & RTL819AM.
Простейшим решением, подходящим для разных вариантов Jtag/SWO является такой вариант:
Boot_loader, при старте по ветке загрузки для отладки (загрузка приложения в RAM), после инициализации SDRAM контроллера, проверяет флаг “запрос дозагрузки с Jtag/SWD” кода и если флаг активен, то меняет его на значение “ожидаю” и ждет до N секунд его смены со стороны Jtag и продолжает выполнение далее по стандартной программе.
Для теста был выбран первый адрес TCM памяти (0x1FFF0000).
Значение “запрос дозагрузки с Jtag/SWD” = 0x12345678;
Значение “ожидаю ” = 0x87654321;
Пример добавки кода в мой rtl_boot.c:
Полный вариант: RTL00MP3/rtl_boot.c at master · pvvx/RTL00MP3 · GitHub
Со стороны JLink.exe, без полинга, получаем такой рабочий скрипт (RTL_RunRAM.JLinkScript):
Для gdb и DAP-Link можно организовать полинг – ожидание смены в памяти флага “запрос дозагрузки с Jtag/SWD” на “ожидаю”, остановить CPU (не обязательно, если загрузка уложиться в ограничение периода ожидания), дозагрузить код в SDRAM, записать флаг значением 0 (или понравившимся), пустить CPU дальше.
Есть другие предложения?
Простейшим решением, подходящим для разных вариантов Jtag/SWO является такой вариант:
Boot_loader, при старте по ветке загрузки для отладки (загрузка приложения в RAM), после инициализации SDRAM контроллера, проверяет флаг “запрос дозагрузки с Jtag/SWD” кода и если флаг активен, то меняет его на значение “ожидаю” и ждет до N секунд его смены со стороны Jtag и продолжает выполнение далее по стандартной программе.
Для теста был выбран первый адрес TCM памяти (0x1FFF0000).
Значение “запрос дозагрузки с Jtag/SWD” = 0x12345678;
Значение “ожидаю ” = 0x87654321;
Пример добавки кода в мой rtl_boot.c:
Код:
#ifdef CONFIG_SDR_EN
// Тест и ожидание загрузки Jlink-ом sdram.bin (~7 sec)
if(*((uint32 *)0x1FFF0000) == 0x12345678) {
*((volatile uint32 *)0x1FFF0000) = 0x87654321;
uint32 tt = 0x03ffffff; // ~7 sec
DBG_8195A("Waiting for SDRAM to load...\n");
while(*((volatile uint32 *)0x1FFF0000) == 0x87654321 && tt--);
}
#endif // test
Со стороны JLink.exe, без полинга, получаем такой рабочий скрипт (RTL_RunRAM.JLinkScript):
Код:
r0
trst0
r1
trst1
h
r
loadbin build/bin/ram_1.r.bin 0x10000bc8
loadbin build/bin/ram_2.bin 0x10006000
r
w4 0x40000210,0x20111113
w4 0x1FFF0000,0x12345678
g
sleep 3000
h
loadbin build/bin/sdram.bin 0x30000000
w4 0x1FFF0000,0
g
q
Есть другие предложения?