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

Arduino для RTL8710.

nicelight

Member
Для Arduino IDE никакой поддержки нет и не будет, кроме Ameba для RTL8195AM с прошивкой через свой программатор и моего кривенького RtlDuino, с прошивкой через SEGGER Jtag/SWD и OTA.
Ваш кривенький Duino это уже много и я надеюсь, мы с Вашей периодической помощью его допилим до приемлемого использования. Знаю что Вам это не интересно, но ведь дело серьезное делаете. Мало кому дано так виртуозить исходниками))

Arduino IDE - это среда для создания проектов не больше чем магалки парой светодиодов, а модули RTL8711AM позволяют гораздо большее в своих за 2 мегабайта набортной RAM и RTOS.
С удовольствием бы шил их из под нативной SDK но собрать весь необходимый материал чтобы разобраться в том как это делать, съедает много времени, которое и так не просто выделять.
 

nicelight

Member
Для такого класса устройств, для ARM, ныне развивается mbed. Запись прошивки производится путем копирования бинарного файла на USB-диск, предоставляемый дев-боард. Так это и работает в Ameba Arduino. Никаких USB-COM/UART и специального ПО для прошивки не используют.
Это не сделано в RtlDuino, т.к. в продаже есть только платы для ESP8266 с напаянным туда USB-COM, включенным к неполноценной Console UART и замененным модулем на RTL00. Докупить STLink и подключить выходит дешевле, чем покупать Ameba платы. Тем более STLink, перешитый в Jlink, позволяет делать полную отладку и имеет поддержку во всех операционных системах и множество отладочного ПО на любой вкус и цвет. Jtag/SWD дает больше возможностей, чем UART, а стоимость переходника USB-COM и USB-JTAG/SWD - одинакова, как и кол-во подключаемых проводов.
Спасибо, думал, не и дождусь такой ценной выжимки информации! )
Направьте на документ или ссылку где более менее подробно можно прочитать последовательность действий для прошивки RTL по Jtag/SWD. And how it works. English is ok. Stlink скоро приедет, вдохну в него Jlink. Хотелось бы уже переходить на более серьезный уровень взаимодействия с железом.
 

pvvx

Активный участник сообщества
pvvx стесняюсь спросить повторно. не получилось сремапить network ota в B000? там (в NwOTA), насколько я понимаю, используются средства амебы.
Там надо переписать-дописать класс в OTA.cpp. Адрес записи там берется из переменной ota_addr. Т.е. приходящую прошивку можно писать куда угодно, если дописать изменение этого ota_addr в процедуре [inline]int OTAClass::beginLocal(uint16_t port, bool reboot_when_success)[/inline] ...
 

pvvx

Активный участник сообщества
Хотелось бы уже переходить на более серьезный уровень взаимодействия с железом.
Mbed - это API и всё наоборот - там обращение к аппаратуре идет через высокий уровень, нашлепку над HAL и завязкой с RTOS - мютексы и прочее, для работы с устройствами ...
С удовольствием бы шил их из под нативной SDK но собрать весь необходимый материал чтобы разобраться в том как это делать, съедает много времени, которое и так не просто выделять.
Это значит, что сам проект примитивен. Если что-то более серьезное, то время на разборку с SDK составляет малую часть... Arduino, в основном, для простой одиночной задачи. Но если вдруг требуется что-то большее, например малопотребляющий датчик IoT, то в Arduino это сложно или практически невозможно сделать...
 
Последнее редактирование:

Pilnikov

Active member
Там надо переписать-дописать класс в OTA.cpp. Адрес записи там берется из переменной ota_addr. Т.е. приходящую прошивку можно писать куда угодно, если дописать изменение этого ota_addr в процедуре [inline]int OTAClass::beginLocal(uint16_t port, bool reboot_when_success)[/inline] ...
#define IMAGE_2 0x0000B000
#define DEFAULT_OTA_ADDRESS 0x80000

OTAClass::OTAClass() {
ota_addr = 0xFFFFFFFF;
mdns_buf = NULL;
mdns_service_id = NULL;
txtRecord = NULL;
}

int OTAClass::setOtaAddress(uint32_t address) {

set_system_data(0x0000, address);
ota_addr = address;
}

int OTAClass::sync_ota_addr() {
flash_t flash;
uint32_t ota_addr_in_flash;

flash_read_word(&flash, FLASH_SYSTEM_DATA_ADDR, &ota_addr_in_flash);
if (ota_addr_in_flash == ~0x0) {
// No OTA address configuired in flash
OTA_PRINTF("use default OTA address\r\n");
ota_addr = DEFAULT_OTA_ADDRESS;
flash_write_word(&flash, FLASH_SYSTEM_DATA_ADDR, ota_addr);
} else {
ota_addr = ota_addr_in_flash;
}
}

судя по этим выжимкам адрес задан в ota.h
а классом int OTAClass::setOtaAddress(uint32_t address) можно задать другой???
ota_addr_in_flash - эта откуда берется?
[off]pvvx если я это поменяю у меня только скеч ота будет по другому работать? [/off]
 
Последнее редактирование:

pvvx

Активный участник сообщества
ota_addr_in_flash - эта откуда берется?
RTL871x Flash Memory Map - первая позиция в секторе
[off]pvvx если я это поменяю у меня только скеч ота будет по другому работать? [/off]
Да. OTA.cpp - это только для "скетчей" :)
Там всё равно путаница с переписыванием "сигнатур" в заголовках и разному расчету "где находиться OTA". Тяжелый случай от Ameba. Имеющаяся там логика имеет ошибки и это не исправимо.
В своем SDK уже долепил boot-loader. Он пока поддерживает оф. версии, но логика выбора "прошивки по старту" немного другая:
1) Если нет назначенных пинов выбора загрузки, то пытается загрузить:
Основную, "первую", прошивку. Если её нет, то смотрит указатель на OTA, но считает что он указывает на "резервную прошивку" и грузит её, если она там есть :)
2) Если назначены пины выбора загрузки, то грузит прошивку от №1 до №4. Два назначенных пинов дают 2 бита, "1" + 2-х битное значение = номер прошивки.
Если прошивки с таким номером нет, то смотрит указатель на OTA, но считает что он указывает на "резервную прошивку" (№0) и грузит её, если она там есть :)
Сигнатуры, которые переписывает Ameba Arduino не смотрит, т.е. проверяет их наличие и валидность, но на отметку что это помеченная (зачем-то, для кого-то в Ameba, чтобы возникали непреодолимые варианты переключения пинами по их логике) не смотрит.
Скорее всего он (новый boot-loader) скоро переедет в RtlDuino.

Прошивки теперь подписываются именами, которые можно увидеть в логе загрузки.
Ранее там вписывалась никчемная надпись "Customer Signature-modelxxx" (32 символа).
Кроме надписи у каждого заголовка прошивки есть номер версии, подверсии и т.д. - с десяток параметров, которые прописываются всегда одним и тем-же... Пока не задействовано.
Код:
=========================================================

ROM Version: 0.3

Build ToolChain Version: gcc version 4.8.3 (Realtek ASDK-4.8.3p1 Build 2003)

=========================================================
Check boot type form eFuse
SPI Initial
Image1 length: 0x201c, Image Addr: 0x10000bc8
Image1 Validate OK, Going jump to Image1
===== Enter FLASH-Boot ====
CPU CLK: 83333333 Hz, SOC FUNC EN: 0x11113
Selected Image 1.
Load Flash seg0: 0x0000b010 -> SRAM: 0x10006000, size: 297868
Img Sign: RTKWin, Go @ 0x1000607d
===== Enter Image: MP3 Stereo ====
WdgPeriod = 10000 ms

CLK CPU         83333333 Hz
RAM heap        2217456 bytes
TCM heap        64768 bytes
...
===== Enter SRAM-Boot 1 ==== - указывает, что грузимся с RAM, по выбору процедуры загрузки №1. (Их 4 варианта :) - всё описано где-то, про загрузку)...
===== Enter FLASH-Boot ==== - указывает, что грузимся с flash.
Selected Image 1 - пинами выбрана прошивка №1.
===== Enter Image: MP3 Stereo ====

Причина такого бардака - на модуле RTL8711AM в flash на 512 МБайт лезет где-то 2 тысячи вариантов прошивок, а как выбрать какую грузить - ? :)
 
Последнее редактирование:

Pilnikov

Active member
Причина такого бардака - на модуле RTL8711AM в flash на 512 МБайт лезет где-то 2 тысячи вариантов прошивок, а как выбрать какую грузить - ?
[off]Идею хотите...бесплатно....В эти 2 тысячи+ вариантов зашейте все примеры из стандартного набора для дурины. А в заголовке (после 2 тысяч закомментированных строк с названиями и номерами) впишите селектор. Чтоб телепузик только указывал номер примера который ему нужен и все! Эврика![/off]
 
Последнее редактирование:

Pilnikov

Active member
[off]512М flash это уже "ботекс" какой-то, она, эта ваша 8711ам, еще и внешнюю рам по спи поддерживает вроде
Нет так становится не интересно. Прям 486дх. pvvx, пора винду портИть[/off]
 

pvvx

Активный участник сообщества
[off]512М flash это уже "ботекс" какой-то, она, эта ваша 8711ам, еще и внешнюю рам по спи поддерживает вроде
Нет так становится не интересно. Прям 486дх. pvvx, пора винду портИть[/off]
Win3.1 пойдет.
Тут как-бы и приходим, что "прошивками" такие вещи не строятся. Нужна некая ОС с загрузкой исполняемых файлов. В Arduino поддержки такого нет.
Всё, что тут, на форуме, долго-долго пытаются изобразить на Arduino, давно собирается иконками на CuberWRT и модуле, дешевле большинства DevBoard к Arduino...
 
Последнее редактирование:

Pilnikov

Active member
c:/users/alex/appdata/local/arduino15/packages/realtek/tools/arm-none-eabi-gcc/4.8.3-2014q1/bin/../lib/gcc/arm-none-eabi/4.8.3/../../../../arm-none-eabi/bin/ld.exe: Z:\Temp\arduino_build_220684/application.axf section `.bf_data' will not fit in region `BD_RAM'

c:/users/alex/appdata/local/arduino15/packages/realtek/tools/arm-none-eabi-gcc/4.8.3-2014q1/bin/../lib/gcc/arm-none-eabi/4.8.3/../../../../arm-none-eabi/bin/ld.exe: region RAM overflowed with stack

c:/users/alex/appdata/local/arduino15/packages/realtek/tools/arm-none-eabi-gcc/4.8.3-2014q1/bin/../lib/gcc/arm-none-eabi/4.8.3/../../../../arm-none-eabi/bin/ld.exe: region `BD_RAM' overflowed by 8300 bytes

почему то мне не хватило рам под буфер.
кстати вышел sdk 2.0.1
 

pvvx

Активный участник сообщества
почему то мне не хватило рам под буфер.
Возьмите модуль на сотню руб дороже.
кстати вышел sdk 2.0.1
Это хорошо.
Но это всего условные единицы у Ameba Arduino. Могут написать и "Вышла версия 100500!".
Снимок1332.gif
Всё равно полной поддержки модулей RTL871xAx у них нет. Есть всего под RTL8195AM что-то на их демо-плате с их программатором на OpenOCD и тоже с полностью закрытым кодом.
На RTL00 модуле у них работает всего 9 пинов. Arduino/variant.cpp at master · Ameba8195/Arduino · GitHub
Номер 2.0.1 у них вышел в связи с выходом поправки номера версии: Title: SDK 2.0.1 release · Ameba8195/Arduino@86bac8f · GitHub
Им наверно надо отчитываться за бездарно потраченные, вот и меняют номера каждый месяц :)
За срок, c нового года, они там изменили пару строчек - исправили мелкие недочеты в примерах скетчей, наплодили надписей в либах Arduino - "незя на RTL8710!" и при этом сделали много ошибок, которые и исправляли все эти три месяца. Общее шевеление за срок более года - где-то на уровне изменения 30 строк и разделения конфигурации Arduino на два типа плат.
Движение ныне можно ожидать только в ARM MBED - там начался процесс встраивания RTL-ок в него.
Ameba Arduino не поддерживает совсем никак RTL8711AM, а уже вышла новая серия RTL871xBx. Скоро уже везде в продаже... Запросы от продавцов на поддержку серии 'B' уже получил. Но не нанимался :)
Говорят как корабль назовешь, так и поплывет.... Амеба... :)
А в MBED всё хорошо - "We can't accept proprietary licenses." - там счас у исходников SDK усиленно стирают и переписывают заголовки всех исходников на лицензию APACHE2.0 :) Поглядим, на сколько процентов справятся :)
Не знаю, зачем простым смертным регистры WiFi (phy) части, но их вписали первыми -> mbed-os/targets/TARGET_Realtek/TARGET_AMEBA/sdk/common/drivers/wlan/realtek at 7689cf5c290bbe11f936abce287d204575b904dc · Archcady/mbed-os · GitHub
 
Последнее редактирование:

Pilnikov

Active member
exit status -1073741819
Ошибка компиляции для платы RTL00 (RTL8710).

exit status -1073741819
Ошибка компиляции для платы F11AMIM13 (RTL8711AM).

Что за ошибка такая? Главное не показывает откуда, и кто вызвал.
При этом в амебе под 8710 и 8195 нормально компилируется
 

pvvx

Активный участник сообщества
exit status -1073741819
Ошибка компиляции для платы RTL00 (RTL8710).

exit status -1073741819
Ошибка компиляции для платы F11AMIM13 (RTL8711AM).

Что за ошибка такая? Главное не показывает откуда, и кто вызвал.
При этом в амебе под 8710 и 8195 нормально компилируется
А чё это такое - exit status -1073741819? Как вы это выдоили?
 

pvvx

Активный участник сообщества
это не я, это компилятор.
error.JPG
Это с любыми скечами. Так стало после обновления амебы
А кто вас заставлял обновляться? :)
Ameba вставили ещё ограничений для RTL8710... Теперь у них ешё незя SSL на RTL8710AF
Такими обновлениями у Ameba скоро ничего незя будет на RTL8710AF. Только помигать светодиодом на одном пине.
Получите и распишитесь у Ameba:
rom_ssl_ram_map RTL8710 do not support SSL
analogReadResolution RTL8710 do not support ADC
analogRead RTL8710 do not support ADC

Это такое новое обновление у них. Включить его в rtlDuino?
 
Последнее редактирование:

Pilnikov

Active member
А кто вас заставлял обновляться? :)
Ameba вставили ещё ограничений для RTL8710... Теперь у них ешё незя SSL на RTL8710AF
Такими обновлениями у Ameba скоро ничего незя будет на RTL8710AF. Только помигать светодиодом на одном пине.
Получите и распишитесь у Ameba:
rom_ssl_ram_map RTL8710 do not support SSL
analogReadResolution RTL8710 do not support ADC
analogRead RTL8710 do not support ADC

Это такое новое обновление у них. Включить его в rtlDuino?
так у 8710 нету вроде ADC и без ssl можно прожить
 

Pilnikov

Active member
Черт, только хотел купить! А что-же из RTL брать? На сегодняшний момент 1 ШТ. НОВЫЙ RTl8711AF IOT Wifi беспроводной Модуль Развития новых на минуточку, это уже 6,3$. ESP не предлагать :D
RAK473 модуль UART WiFi | Wi Fi IoT модуль | серийный wifi модуль | безопасности Предприятия | 450 м купить на AliExpress
"голый" модуль без девборды 457,61 руб. с доставкой всяко лучше, чем RTl8711AF
 
Сверху Снизу