• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе 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 дальше.

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