• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Загрузка кода в SDRAM для RTL8711AM & RTL8195AM.

pvvx

Активный участник сообщества
Загрузка кода в SDRAM для RTL8711AM & RTL819AM.


Простейшим решением, подходящим для разных вариантов 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
Полный вариант: RTL00MP3/rtl_boot.c at master · pvvx/RTL00MP3 · GitHub
Со стороны 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
Для gdb и DAP-Link можно организовать полинг – ожидание смены в памяти флага “запрос дозагрузки с Jtag/SWD” на “ожидаю”, остановить CPU (не обязательно, если загрузка уложиться в ограничение периода ожидания), дозагрузить код в SDRAM, записать флаг значением 0 (или понравившимся), пустить CPU дальше.

Есть другие предложения?
 
Сверху Снизу