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

SDK 4.0a

pvvx

Активный участник сообщества
Количество примеров увеличилось в разы (example, application, ...).
Заменена/добавлена старая либа polarssl-1.3.8 -> mbedtls-2.4.0
Есть HTTPDS (SSL)...
Глобально, для RT871xAx/8195 ничего сверх нового нет. Модули с RTL871xBx ещё не пришли и нет в широком свободном доступе для покупки...
Но Итого - близиться долгожданная свобода: мне пора заканчивать начальную поддержку моей сборки SDK для RTL :) Теперь этим смогут заняться другие... (пора искать что-то новое)
 

IKSIK67

New member
Не могли бы подсказать, я не совсем разобрался с SDK. Скачал sdk-ameba-v4.0a_without_NDA.zip, там есть какие-то примеры, но не смог найти саму среду?...:confused: или здесь все работает как-то не так?.. o_OЧто надо сделать после скачивания среды, что бы начать писать код и заливать его в микроконтроллер?
 

pvvx

Активный участник сообщества
1) Скачиваете SDK, разворачиваете архив.
2) Выбираете sdk-ameba-v4.0a_without_NDA\project\realtek_ameba1_va0_example\EWARM-RELEASE\Project.eww или sdk-ameba-v4.0a_without_NDA\project\realtek_amebaz_va0_example\EWARM-RELEASE\Project.eww и запускается IAR Embedded Workbench IDE.
Снимок1495.gif
3) Жмете в нем make и проект собирается.
4) Выбираете программатор Jlink
Снимок1496.gif Снимок1497.gif
5) Программируете модуль или производите отладку...
 
  • Like
Реакции: KomX

IKSIK67

New member
1) Скачиваете SDK, разворачиваете архив.
2) Выбираете sdk-ameba-v4.0a_without_NDA\project\realtek_ameba1_va0_example\EWARM-RELEASE\Project.eww или sdk-ameba-v4.0a_without_NDA\project\realtek_amebaz_va0_example\EWARM-RELEASE\Project.eww и запускается IAR Embedded Workbench IDE.
Посмотреть вложение 4235
3) Жмете в нем make и проект собирается.
4) Выбираете программатор Jlink
Посмотреть вложение 4236 Посмотреть вложение 4237
5) Программируете модуль или производите отладку...
Благодарю)
 

pvvx

Активный участник сообщества
Для сборки AmebaZ не обращайтесь :)
А всё равно не собирается в рабочий вариант с GCC. Там либы созданы в IAR, с его прибамбасами.
Если и собирается, то вылетает на netdev_open()...
-------
Пока дела с GCC обстоят так GCC libraries in ameba-sdk-v.4.0 missing – Realtek IoT/Arduino Solution
Там ищут в старой либе lib_wlan.a функцию rtw_if_wifi_thread(), а оно всё есть в Ameba Arduino lib_wlan.a :) Но это делу не помогает, хотя и собирается и всё работает. Жирная бага - низкая скорость работы (трафик приема-передачи) на SoftAP, когда включен режим SoftAP + Station, всё равно не исправляется. Так-же не исправляется долгое подключение Station модуля к внешнему роутеру*.
Т.е. смысла данная версия SDK не несет, кроме очередного номерка.

*Если покрутить частоту системного таймера, то напиханные паузы уменьшаются и скорость полного цикла подключения Station модуля с выдачей IP от роутера доходит до 0.3..0.5 сек от старта питания. А в текущем виде - для сборки на IAR это 1.2..1.8 сек, а на GCC или Arduino - 2...3 сек. Зачем там Амебщики накрутили задержек по каждому поводу в циклах опроса от 100 мс для GCC в либах - неизвестно.
Можно покрутить и вызовы задержек из lib_wlan.a патчами внешних процедур - выходит та-же история, но это портит другие дела. В общем Ameba делает Амебу из модуля :)
 
Последнее редактирование:

sharikov

Active member
Там ищут в старой либе lib_wlan.a функцию rtw_if_wifi_thread(), а оно всё есть в Ameba Arduino lib_wlan.a :) Но это делу не помогает, хотя и собирается и всё работает.
с этого места подробнее пожалуйста.

Жирная бага - низкая скорость работы (трафик приема-передачи) на SoftAP, когда включен режим SoftAP + Station, всё равно не исправляется.
Приведите тестовый пример. Проверю. У меня SoftAP + Station на данный момент основной режим работы (ну так сложилось по разным причинам)

...Зачем там Амебщики накрутили задержек по каждому поводу в циклах опроса от 100 мс для GCC в либах - неизвестно.
На работе к древнему usb свистку подключается через раз на 3-5-тый. По логам свисток в половине случаев дает отлуп а в половине тупо не хватает таймаута. Дома на относительно свежем Keenetic giga II подключается влет. Предполагаю что таймауты увеличивали для совместимости с зоопарком AP.
 

pvvx

Активный участник сообщества
с этого места подробнее пожалуйста.
А чего подробнее? Берете либу от lib_wlan.a Arduino/hardware_v2/variants/rtl8710 at master · Ameba8195/Arduino · GitHub и вперед. Она создана Ameba в одно время с SDK4.0a, а сам SDK выложен позже, но с кодом либы на IAR.
Приведите тестовый пример. Проверю. У меня SoftAP + Station на данный момент основной режим работы (ну так сложилось по разным причинам)
Записываете web-свалку в модуль. Включаете SoftAP + Station, идете на страницу:
Снимок1498.gif
И качаете файл c http://rtl871x0/protect2/ram.bin?start=0x10000000&stop=0x20000000
и с http://rtl871x1/protect2/ram.bin?start=0x10000000&stop=0x20000000
Сравниваете:
Снимок1499.gif Снимок1500.gif
Свисток или даже если сделать подключение от одного роутера
Снимок1502.gif
итого не меняют. Проверено на нескольких разных роутерах и свистках (включая и MiFi :)), на Arduino и "AT" прошивке - итог один - тормозит AP в режиме AP+ST. Скорее всего она опрашивается каким-то пулом, в данном режиме (AP+ST), т.к. задержки передачи пакетов после запроса (приема) в TCP всегда более 0.01 сек. Station то при этом пашет нормально... Кроме тормоза там ещё потребление вылетает за нормы - это явный баг. Предположить как он создан выходит только если выключать передатчик с задержкой после передачи пакета или типа того...
Т.е. это сделано "логике вопреки". Наверно специально - иначе не понять Амебнутых :) SoftAP то должна быть всегда активна и следить за каналом согласно спецификациям...
На работе к древнему usb свистку подключается через раз на 3-5-тый. По логам свисток в половине случаев дает отлуп а в половине тупо не хватает таймаута. Дома на относительно свежем Keenetic giga II подключается влет. Предполагаю что таймауты увеличивали для совместимости с зоопарком AP.
Не - они там от балды. Как "рука написала". Замена на более короткие наоборот улучшает дело с первым соединением. (пробовал патчить часть lib_wlan.a)
Бага у AP тоже есть - она видимо как-то криво инициализируется у Ameba и первое соединение после инициализации WiFi часто неудачное. Ну это ещё одна бага. В Arduino, если не запросить WiFi.status() перед иницализацией AP, то она вообще там не работает. :)

Про глупости с задержками при соединении модуля к AP было описано и даны примеры замеров в том году Тестирование и модификация RTL SDK для автономных устройств.
На IAR с кодом SDK 3.4a или SDK4.0a соединение с выдачей IP происходит на 1200 шаге RTOS (шаг 1 ms от старта), а любая прошивка с любым SDK на GCC - от 2 сек минимум.
Если при старте задать ход таймера RTOS в 2 раза быстрее (он об этом не уведомлен :)), то и соединение реально происходит в 2 раза быстрее.

Диагноз простой - кто-то в Ameba занимается вредительством - не желает использования в open-source, а только с проприетарным ПО компиляторов. Это влияет и на их Arduino - там ситуация аналогична - встроенные тормоза везде.
Так-же все дополнительные режимы, типа "WiFi моста" Амебнутые вырезали из драйвера WiFi в SDK. При включении в них он сообщает кодом отсутствия реализации в ПО, хотя драйвер стандартный с интерфейсом управления как для всех чипов RTL под Андроид и *nix (Standard Wireless Extensions ver 22. Wireless-Extensions (WE или Wext) являются расширениями, добавленными в ядро около 1997 )
 
Последнее редактирование:
Почему-то не удается запустить этот SDK. Есть модуль (RTL00), J-Link (сделанный из ST-Link-а), IAR (из последних). Открываю проект, компилирую, пытаюсь запустить отладку, пишет:

Пропускаю (диска D: у меня вообще нет). В конце Debug log пишет:
Wed Jun 07, 2017 19:49:52: Could not go to 'main'.
Модуль после этого на АТ команды реагировать перестает, при передергивании питания встроенный светодиод загорается и гаснет. С помощью флэшера модуль реанимируется (зашиваю заранее прочитанную, родную прошивку). Куда смотреть? Что я делаю не так? То, что в SDK кругом 8195, а у меня 8710 не влияет?
 

pvvx

Активный участник сообщества
Почему-то не удается запустить этот SDK. Есть модуль (RTL00), J-Link (сделанный из ST-Link-а), IAR (из последних).
Чтобы запустить, можно и проще, с помощью JLink.exe.
Распаковываете вложенный файл в sdk-ameba-v4.0a_without_NDA\project\realtek_ameba1_va0_example\EWARM-RELEASE, исправляете в bat путь к Jlink.exe и вперед...
Но не забывайте желательный провод на RESET модуля. Без него Jtag/ST-Link работает ужасно - вручную дергать не очень...
 

Вложения

Последнее редактирование:
Правильно ли я понял метод: скрипт дергает сброс, пишет в ОЗУ ram1_r.bin (что это?), пишет в ОЗУ ram_2.bin (собственно это часть из того, что IAR создал), опять дергает сброс, пишет что-то в какой-то регистр, запускает процессор в работу. Т.е. во флэш программа при этом не попадает, и как будет работать отладка в IAR-е не понятно, вероятно не будет?
 

sharikov

Active member
скрипт дергает сброс, пишет в ОЗУ ram1_r.bin (что это?), пишет в ОЗУ ram_2.bin (собственно это часть из того, что IAR создал), опять дергает сброс, пишет что-то в какой-то регистр, запускает процессор в работу. Т.е. во флэш программа при этом не попадает, и как будет работать отладка в IAR-е не понятно, вероятно не будет?
Правильно.
8710AF программу исполняет из ОЗУ поэтому содержимое флэш ему до лампочки. Загрузчик ram1_r.bin при старте копирует прошивку из флэш в озу , после этого флэш становится ненужной (ну только для вебдиска или настроек). Пишут в "какой-то регистр" чтобы сказать загрузчику что копировать не надо - программу уже залили по jtag.
 

pvvx

Активный участник сообщества
Правильно ли я понял метод: скрипт дергает сброс, пишет в ОЗУ ram1_r.bin (что это?)
Альтернативный boot.
Записать в Flash тоже можно другой программой, хоть JFlash.exe, если кинуть к ней скрипт с форума...
Т.е. во флэш программа при этом не попадает, и как будет работать отладка в IAR-е не понятно, вероятно не будет?
Отладка работает в самом IAR.
По вашей картинке он пишет, что нет исходника ram_lib.c, т.к. код из бинарной библиотеки, как и многие другие файлы, например исходники ROM-BIOS... SDK же without_NDA, т.е. часть исходников закрыта.
 
Продолжаю разбираться почему у меня не завелся этот SDK на RTL00. Приделал отладочный порт, посмотрел что там, узнал, что оказывается программа падает еще до запуска main.
Код:
=========================================================                     
                                                                              
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: 0x3a18, Image Addr: 0x10000bc8                                 
Image1 Validate OK, Going jump to Image1                                      
BOOT from Flash:YES                                                           
===== Enter Image 1 ====                                                      
                                                                              
load NEW fw 0                                                                 
Flash Image2:Addr 0xb000, Len 260352, Load to SRAM 0x10006000                 
No Image3                                                                     
Img2 Sign: RTKWin, InfaStart @ 0x10006051                                     
===== Enter Image 2 ====                                                      
RTL8195A[HAL]: Hard Fault Error!!!!                                           
RTL8195A[HAL]: R0 = 0x20                                                      
RTL8195A[HAL]: R1 = 0x0                                                       
RTL8195A[HAL]: R2 = 0x1000da9d                                                
RTL8195A[HAL]: R3 = 0x0                                                       
RTL8195A[HAL]: R12 = 0x1c                                                     
RTL8195A[HAL]: LR = 0x16477                                                   
RTL8195A[HAL]: PC = 0x0                                                       
RTL8195A[HAL]: PSR = 0x20000200                                               
RTL8195A[HAL]: BFAR = 0x8                                                     
RTL8195A[HAL]: CFSR = 0x20000                                                 
RTL8195A[HAL]: HFSR = 0x40000000                                              
RTL8195A[HAL]: DFSR = 0x0                                                     
RTL8195A[HAL]: AFSR = 0x0                                                     
RTL8195A[HAL]: PriMask 0x0                                                    
RTL8195A[HAL]: BasePri 0x0                                                    
RTL8195A[HAL]: SVC priority: 0x00                                             
RTL8195A[HAL]: PendSVC priority: 0x00                                         
RTL8195A[HAL]: Systick priority: 0x00
Пошаговой отладкой выяснил, что падение происходит тут:
Код:
1001f458 <__iar_cstart_call_ctors>:
1001f458:       b510            push    {r4, lr}
1001f45a:       4604            mov     r4, r0
1001f45c:       4904            ldr     r1, [pc, #16]   ; (1001f470 <__iar_cstart_call_ctors+0x18>)
1001f45e:       4479            add     r1, pc
1001f460:       310e            adds    r1, #14
1001f462:       4804            ldr     r0, [pc, #16]   ; (1001f474 <__iar_cstart_call_ctors+0x1c>)
1001f464:       4478            add     r0, pc
1001f466:       300c            adds    r0, #12
1001f468:       f000 f81a       bl      1001f4a0 <__call_ctors>
1001f46c:       4620            mov     r0, r4
1001f46e:       bd10            pop     {r4, pc}
1001f470:       effe0b90        .word   0xeffe0b90
1001f474:       fffe8a1c        .word   0xfffe8a1c
точнее тут:
Код:
1001f4a0 <__call_ctors>:
1001f4a0:       b538            push    {r3, r4, r5, lr}
1001f4a2:       4604            mov     r4, r0
1001f4a4:       460d            mov     r5, r1
1001f4a6:       42ac            cmp     r4, r5
1001f4a8:       d005            beq.n   1001f4b6 <__call_ctors+0x16>
1001f4aa:       6820            ldr     r0, [r4, #0]
1001f4ac:       1820            adds    r0, r4, r0
1001f4ae:       4780            blx     r0
1001f4b0:       1d24            adds    r4, r4, #4
1001f4b2:       42ac            cmp     r4, r5
1001f4b4:       d1f9            bne.n   1001f4aa <__call_ctors+0xa>
1001f4b6:       bd31            pop     {r0, r4, r5, pc}
На адресе 1001f4ae в R0 какой-то левый адрес (0x0001776F), там программа благополучно валится.
Вопрос, может кто сталкивался с подобным? В каком направлении искать причину?
 

pvvx

Активный участник сообщества
Вопрос, может кто сталкивался с подобным? В каком направлении искать причину?
Не описаны условия. Валится при после прошивки или при отладке с непрописанными установками в 9 и 10 секторе Flash, опции отладки и т.д...
Гадать это никто не будет.
 
Валится после прошивки, при исполнении. Прошивал Вашим скриптом, прошивал из IARа, результат одинаковый. Прошивка в модуль заливается нормально. Проблема в том, что нагенерил IAR, или какое-то искажение при подготовке ram_2.bin. Поиск по инету пока дал только то, что процедура __iar_cstart_call_ctors - это вызов конструкторов классов при начальной инициализации. По идее, классов в программе нет, этой функции не должно быть совсем, или она должна сразу вернуться. Но у меня ей дается какой-то список с левыми адресами. Опции в проекте ни какие не менял, все так как было установлено в SDK. Честно говоря пока не знаю какие они вообще бывают. Надеялся что все запустится без разбирательств.
Код, созданный IARом, у меня вообще вызывает удивление. Такой способ загрузки адреса таблицы:
Код:
1001f462:       4804            ldr     r0, [pc, #16]   ; (1001f474 <__iar_cstart_call_ctors+0x1c>)
1001f464:       4478            add     r0, pc
1001f466:       300c            adds    r0, #12
...
1001f474:       fffe8a1c        .word   0xfffe8a1c
Должно получиться 10007е92?
Такой способ извлечения и использования адреса из таблицы (R4 до этого загружен из R0):
Код:
1001f4aa:       6820            ldr     r0, [r4, #0]
1001f4ac:       1820            adds    r0, r4, r0
1001f4ae:       4780            blx     r0
Это все с целью получения переносимого по адресам кода?
 

pvvx

Активный участник сообщества
Это все с целью получения переносимого по адресам кода?
А как предполагаете написать код короче на ARM?

И ram_2.bin не записывается в Flash. Он должен быть обрамлен заголовками для записи во flash.
Счас гляну, что там может быть не так и как сделать правильно...
 
А как предполагаете написать код короче на ARM?
Если нужна переносимость, то вряд ли смогу лучше. Но зачем переносимость по адресам? Вроде бы адрес загрузки известен заранее. Ну пусть будет так, переносимость не вредит. А с этой таблицей у меня IAR явно что-то не то генерит. Если начальный адрес таблицы 10007е92 можно понять, то конец таблицы:
Код:
1001f45c:       4904            ldr     r1, [pc, #16]   ; (1001f470 <__iar_cstart_call_ctors+0x18>)
1001f45e:       4479            add     r1, pc
1001f460:       310e            adds    r1, #14
...
1001f470:       effe0b90        .word   0xeffe0b90
Получается 00000002, это явно не то.
Спасибо за поддержку! Буду пытаться разобраться, но если сможете мне помочь буду очень признателен.
 
Сверху Снизу