Как прошить, куда копать RTL8710

vad7

Active member
И как вижу вам сказать уже конкретно нечего о том чего нету в RTL на сегодня в Arduino и других примерах...
Вот когда цена упадет на али приблизительно до цены esp8266 и доступность увеличится, тогда и пощупаю...
А пока мне достаточно, того что вы вещаете (склероз?):
То, что там сейчас творится - это просто бардак.
Вся документация в CИ файлах и в IDA :)
Не забудь оставить адресок для адептов RTL.
Да небось: RTL8710RUS
 
Последнее редактирование:

pvvx

Активный участник сообщества
Вот когда цена упадет на али приблизительно до цены esp8266 и доступность увеличится, тогда и пощупаю...
А пока мне достаточно, того что вы вещаете (склероз?):
Тогда будут новые чипы. Некромантией не замаюсь - могил не раскапываю. Наверно забыли.
Цена на нормальные вещи не падает ниже дурных.
Ну вот и выяснили - просто выдумываете глупости, т.к. "покупалка" ещё не выросла :)
Там миссия не подходящая :)
 

sharikov

Active member
0x00000 Image1 - bootloader - ram_1.p.bin
0x09000 SystemData.bin
0x0A000 CalibrationData.bin
0x0B000 Image2 - прошивка - ram_2.bin - для области SRAM
0x0......... 0x7..... Image3 - прошивка - sdram.bin - для области SDRAM
..... (может быть доп.блок - лоадер обслуживает)
0x80000 OTA - ota.bin - так-же может быть из двух или 3-х частей
0xFC000 SavedData2.bin FEEP Установки WiFi, LwIP, UART из AT или пользовательские
---------
Старые SDK ota писали последовательно за первыми блоками.
2pvvx:
Изменилось ли размещение OTA в новом загрузчике ?
Хочу OTA писать не с 0x80000 а со следующего блока за Image2 (примерно как было раньше).
Общая структура такая:
default Image2 - обновлялка OTA Image через web + сброс настроек wifi, в него попадаем по кнопке (IsForceLoadDefaultImg2).
OTA Image - приложение, оно стартует по умолчанию если зашито
 

pvvx

Активный участник сообщества
Хочу OTA писать не с 0x80000 а со следующего блока за Image2 (примерно как было раньше).
Это зависит от программатора. Загрузчик поддерживает 4 последовательных прошивки и 5-ую (нулевую) по адресу в 9-ом секторе... Arduino для RTL8710.
Сегменты в прошивках могут грузиться в любую память, включая регистры периферии или запись в Flash (копировать), но надо указать разрешающие флаги RTL00MP3/rtl_boot.c at master · pvvx/RTL00MP3 · GitHub
Номер прошивки, положительный 32-х битный задается тут RTL00MP3/rtl_boot.c at master · pvvx/RTL00MP3 · GitHub
Полностью переделанный инит Spic работает пока только с MXIC Flash (задается таблицей) RTL00MP3/rtl_boot.c at master · pvvx/RTL00MP3 · GitHub
Предел у SPIC - 35 тактов на байт, в режиме блоков memcpy или dwordcpy (без разницы). SDK использовало и настраивало от 72 тактов (в лучшую погоду)...
 
Последнее редактирование:

sharikov

Active member
Это зависит от программатора. Загрузчик поддерживает 4 последовательных прошивки и 5-ую (нулевую) по адресу в 9-ом секторе... Arduino для RTL8710.
Если есть 2 прошивки: 1 и 2 они во флэшке должны располагаться одна за другой с выравниванием на границу блока ?

Не могу понять вашу логику выбора прошивок.
1-4 выбираются пинами, это все рабочие прошивки ?
0 прошивка что должна делать ? Аварийная на случай повреждения рабочих ?
Если аварийная то нет условий ее вызова по пинам. Рабочая прошивка может быть с валидным заголовком но неработоспособная (наговнокодили/повредилась/юзер залил по OTA не тот апдейт). Сейчас в этом случае запустить аварийную никак не получится и устройство окирпичится.
Также если стереть блок 0x9000 аварийная прошивка не запустится а этот блок иногда стоит очищать если туда прописались глючные настройки.

Амебовкий вариант с Default Image2 и Upgraded Image2 был логичнее и проще в реализации .
Проще - значит меньше багов. А они в rtl_boot.c есть: не все варианты загрузки рабочие (я знаю что это трудно протестировать) и сейчас опрашивается только 1 пин gpio_pin[1] (цикл for (int i = 1; i; i--) делает только одну итерацию).


Удобнее было бы с другой логикой выбора прошивки:
2 пина дают 4 кода: 0,1,2,3.
0 - пины в воздухе (неактивны), 3 - пины притянуты к замле/питанию (активны).

Код 3 (аварийный режим, все пины активны) всегда запускает аварийную.
Коды 1-2 (служебный режим: сервис или калибровка) всегда запускают прошивки 1 или 2.
Код 0 (нормальный режим, все пины неактивны) запускает прошивку по адресу из 0x9000 если там не пусто или 3 прошивку если пусто.
Если выбранной прошивки нет автоматически запускается аварийная.
Если задан только 1 пин логика сводится к выбору 0/3. Если пины не заданы всегда запускается аварийная.
 

pvvx

Активный участник сообщества
Не могу понять вашу логику
Не могу понять вашу логику, т.к. исходники даны и указано где и что ставится как вам нравится. Даже читать не буду ваши предложения, пока не попробуете (измените сами - это просто), потыркаетесь и выработаете более нормальное решение. Думаю, что на это уйдет неделя минимум (на обдумывание, пробы и поиск нормальных решений, не обязательно через пины и т.д. Когда наберется от разных людей вариантов - можно и мне будет подумать :) А пока и так потянет.
 

sharikov

Active member
Не могу понять вашу логику, т.к. исходники даны и указано где и что ставится как вам нравится. Даже читать не буду ваши предложения, пока не попробуете (измените сами - это просто), потыркаетесь и выработаете более нормальное решение.
Второй день тыркаюсь, впечатление *****. Мне было интересно узнать под какой сценарий использования было написано то что написано.
От разных людей ответов не дождетесь: RTL ковыряет 2,5 человека а загрузчик - 1,5.
 

pvvx

Активный участник сообщества
Второй день тыркаюсь, впечатление *****. Мне было интересно узнать под какой сценарий использования было написано то что написано.
От разных людей ответов не дождетесь: RTL ковыряет 2,5 человека а загрузчик - 1,5.
А и без них разберется, когда полеплю свои проекты... От вас никакого проекта, кроме ужасного RTLHTTPD то нет, а RTLHTTPD пока никуда не годиться и вам нужна только ветка отладки - загрузка для теста в RAM и она работает :) Рано вам с ним думать как его грузить в flash.
Сценарий такой: когда писал код, так рука написала при стыковке подпрограмм. Больше там мыслей не было. Голова не использовалась :) Потом зато пришлось включить распознавание, чтобы описать вам что там накалякалось :) Но вроде работает же ? (!)
Вторая причина - совместимость с старыми вариантами SDK и Arduino. Он победил - глюков со Spic от разных версий startup в прошивках теперь нет.
А так, по поводу инита - осталась одна бяка - там, при типа deep_sleep, но хитрых, есть перезагрузка модуля сразу, из первой процедуры ROM-BIOS прямо в назначенный адрес приложения (энерго-экономичные режимы всякие). Вот в нем бяда - инициализация LOGUART там происходит не на том baud rate. Надо что-то править где-то в HAL (горе писаки SDK) :mad:
 
Последнее редактирование:

Bebebe

New member
Делаю первые шаги с этим контроллером. Пытаюсь получить OTA.bin, а получаю вот это:
Используем библиотеку OTA версии 1.0.1 из папки: C:\Arduino\hardware\development\rtl87xx\libraries\OTA
Скетч использует 263684 байт (70%) памяти устройства. Всего доступно 372736 байт.
Внимание: Это ядро не подерживает экспорт скетчей. Пожалуйста ожидайте обновлений или свяжитесь с автором
Версия ArduinoIDE 1.8.2 . Может я что-то не так делаю....

Update: разобрался, я пытался сделать экспорт бинарного файла и получал такую ошибку. Попробовал типа загрузить прошивку в устройство через сом-порт, естественно получил ошибку соединения но и bin файл я тоже получил :).
 
Последнее редактирование:

Lom

New member
...
Speed rd RAM = 147462, clk/byte = 2 (просто чтение RAM в цикле)
Speed rd TCM = 136536, clk/byte = 2 (просто чтение TCM в цикле)
...
Абсолютная скорость у TCM области - 1 такт на обращение в 16 или даже 32 бита.
...
Добрый день!
Подскажите пожалуйста про RAM RTL8710

1) Что есть RAM, а что TCM?
2) Где-то написано RAM 512к, где-то указано 48k available for user

P.S. Что-то уже нашел

"Memory map:


  • 0x00000000 - 0x0FFFFFFF: ROM
    0x10000000 - 0x1006FFFF: RAM
    0x1FFF0000 - 0x1FFFFFFF: TCM (tightly coupled memory)"
Но не понятно TCM=64k, можно ли как-то использовать более 64к RAM ?

Или подскажите, где можно это прочитать, пока найти не смог, заранее спасибо.
 
Последнее редактирование:

pvvx

Активный участник сообщества
1) Что есть RAM, а что TCM?
Это вопрос по архитектуре ARM, а не модуля.
Большинство других процов, типа в ESP-32, имеют память в виде множества малых раздельных блоков с разными шинами и объединить их в один непрерывный невозможно.
2) Где-то написано RAM 512к, где-то указано 48k available for user
48k - это размер заданный в исходниках для "heap" в готовом приложении (прошивке) какой-то версии "AT", которую оно пишет в logUART при загрузке :) Никоим образом не описывает кол-во RAM на чипе. Это значение задается для работы стеков RTOS и части буферов к конкретному приложению. Из описания, от куда вы взяли данную цифру - это указание, что для работы среднего приложения достаточно описать в файле конфигурации RTOS "heap" в 48 килобайт. При меньшем может не хватить на стеки задач RTOS, буферизацию потоков, буфера и переменные для работы WiFi в режиме AP+Station с поддержкой всех функций данной версии "AT" прошивки. :)
В чипе RTL8710AF 512 килобайт SRAM. Из них 64 килобайта отдельный блок в виде TCM RAM. Отличие в том, что TCM область не имеет тактов ожидания при работе с ней CPU. Остальная память (единый блок 448 килобайт SRAM) имеет такт ожидания при некоторых асинхронных обращениях. Вдаваться вам в это на первых этапах не стоит. Потери скорости исполнения от этого в ваших приложениях не составят более процента.
Различий типов имеющейся RAM памяти по возможности побайтового обращения (четные/нечетные адреса) у RTL8195/871x нет. Как и нет запретов что находится в RAM памяти - исполняемый код или данные. Для серии "A" есть одно ограничение - у неё нет XIP. Serial Flash не позволяет обеспечивать поток данных и кода со скоростью работы CPU (тут у нас 166 МГц CPU), а SRAM - позволяет. В дешевых WiFi-SoC при работе с Serial Flash (типа ESP8266) используют механизм аппаратного XIP - это система "кэширования" данных из Flash в SRAM. При этом сильно страдает производительность на ожидание CPU загрузки кода из Flash в область "кеширования", если их там ещё нет или они не вытеснены. И область "кеширования" обычно мала. У ESP8266 объем "кеша" - это два блока SRAM по 16 килобайт. Т.е. ваша программа с постоянно отрабатывающим кодом в размер более 32 килобайта будет достаточно сильно тормозить. Кроме этого на ESP8266 вы не можете писать Flash и одновремнно исполнять программу из Flash. На время записи (и чтения) Flash механизм XIP у ESP8266 отключен. По этому весь зависимый код у него находится в специальной области 64к SRAM названной IRAM (включающей и 32к "кеш") - только там и в ROM может исполняться код. Но в ROM ESP8266 код содержит много ошибок и не используется более чем на 10%, а ревизии с его исправлением нет.
У RTL спец. областей для исполнения кода нет. Другая архитектура CPU и меньше ошибок в ROM, да и туда помещен почти весь код API. От этого пользовательский код выходит объемом меньше. ROM не имеет тактов ожидания для CPU.
У чипов RTL серии "A" есть варианты с 2 МегаБайт SDRAM. SDRAM при этом имеет шину в 16 бит и 100 MHz. Это неизбежно дает такты ожидания для 166 MГц ядра CPU и в ней исполнение кода замедленное.
Flash в RTL серии "A" имеет контроллер отображения QSPI устройств в область памяти (до 128 МБайт). Но "кеша" для них более 64 байт не имеет. Аппаратно обслуживается и запись в эти устройства путем записи процессором в область отображения. Контролер имеет регистры для задания всех команд работы с устройством на QSPI, тактов ожидания и режимов (4/2/1 бит SPI). psRAM и другие типы могут работать на нем...
Это описание дано, чтобы понять различие в чипах, если знакомы с ESP8266.
 
Последнее редактирование:
Не знаю - точнее не помню. Воможно какая-то версия от китайцев.
Вот странслировал свой "AT" на SDK 3.5 (он без второй прошивки OTA - она пустая):
Pvvx , подскажите , как Вашу прошиву (webserver) залить через ота обновление ?
Скачал ваш исходник , а там куча бинарников .. Инструкции не нашел как это сделать.. Буду Вам искренне благодарен за помощь!
 

nikolz

Well-known member
можно отметить начало движения в сторону RTL.
кто-то утверждал 4 года назад,
что RTL быстро убьет ESP,
ему возражали, а он не верил.
 

pvvx

Активный участник сообщества
можно отметить начало движения в сторону RTL.
кто-то утверждал 4 года назад,
что RTL быстро убьет ESP,
ему возражали, а он не верил.
У меня и других всё хорошо и модули RTL нашли свою нишу за счет полноценных внутренних контролеров и скорости работы CPU серии A из SRAM, превышающих способности ESP32. В итоге так и произошло - RTL убил ESP наповал и во всех ком./пром./разработках.
Arduino это не касается. Там свои тараканы - тяп-ляп и блоггеры :p
Открою маленький сИкрет - за всю историю ESP у меня не сделано и не работает на них ни одного устройства. А вот на RTL - сделано и работают...
 
Сверху Снизу