• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

BLE SoC PHY6202

pvvx

Активный участник сообщества
@cool2000 - Патчи вашего *,ld:
Вставить пустую таблицу
Код:
/* jump_table.c: uint32 global_config[SOFT_PARAMETER_NUM] __attribute__((section("global_config_area"))); */
    .gcfgtbl : {
       KEEP(*(global_config_area))
    } > gcfgtbl
Отделить сегмент: } > sram /* AT > flash */

И т.д.
Но это всё безразлично. Для GCC нужно всё переписывать, а на это нет столько сил и времени
 
Всем привет.
Искренне прошу прощения за вопросы не совсем по теме, но где еще как спросить не у автора.
Я прошил THB2, все получилось.
Как можно с помощью PHP или Python получать с него данные.
Я хочу данные с датчика передавать в MajorDoMo.
 

cool2000

Member
А их нет. Они заполняются из кода.
global_configпустой. А вот jump_tableинициализируется статически
C:
const uint32_t* const jump_table_base[256] __attribute__((section("jump_table_mem_area"))) =
{
    (const uint32_t*)0,                         // 0. write Log
    (const uint32_t*)osalInitTasks,             // 1. init entry of app
    (const uint32_t*)tasksArr,                  // 2. task list
    (const uint32_t*)& tasksCnt,                // 3. task count
    (const uint32_t*)& tasksEvents,             // 4. task events
...
Отделить сегмент: } > sram /* AT > flash */
Ну можно и без AT > flash. Тогда нужно добавить сегмент в разметку и bootloader загрузит его в память.
соберите и посмотрите в hexinfo.py.
Собрал, посмотрел:
Код:
  - { first: 0x11020000, last: 0x11024D2D, length: 0x00004D2E }        // sram AT > flash
  - { first: 0x11024D30, last: 0x110253E7, length: 0x000006B8 }        // xip
  - { first: 0x1FFF0000, last: 0x1FFF07FF, length: 0x00000800 }        // jump_table, global_config
  - { first: 0x1FFF1838, last: 0x1FFF185F, length: 0x00000028 }        // startup code
 

pvvx

Активный участник сообщества
Ну можно и без AT > flash. Тогда нужно добавить сегмент в разметку и bootloader загрузит его в память.
CMSIS\device\phyplus\phy6222_cstart.c
C:
#if 0
    src = (const uint8_t*)&_eronly;
    dest = (uint8_t*)&_sdata;
    edest = (uint8_t*)&_edata;
    osal_memcpy(dest, src, edest - dest);
#endif
 

pvvx

Активный участник сообщества
Это безбожно устарело и я давал для Ernst79 в качестве исправления-примера как ему писать парсер для интеграции "Passive BLE Monitor integration" и "BTHome".
Теперь все интеграции для BLE построены по тому алгоритму.
Надо стереть следы моего участия...
 

cool2000

Member
Ну как вариант. Можно было и в ld скрипте подправить, раз вы его корректировали
Код:
    /*    _edata = ABSOLUTE(.); */
        _edata = _sdata
    } > sram /* AT > flash */
Надо стереть следы моего участия...
Увы уже не получится, время редактирования сообщения слишком короткое...
 

pvvx

Активный участник сообщества
Увы уже не получится, время редактирования сообщения слишком короткое...
Gihub ругается - не хочет удалять репо...

Тут собрал кое как пример simpleBlePeripheral на GCC в PHY62XX_SDK_3.1.3 от AiThinker.
Но как всегда не работает sleep.
1704368378147.png
И колбасит питание GPIO от внешней наводки 50Гц, т.к. никуда не притянуты...
 

pvvx

Активный участник сообщества
Накрутил sleep до 4.7 мкА в simpleBlePeripheral. Ниже не выходит. Это уже было в Keil с SDK_3.1.3. Лишние минимум 1+ мкА.
Для THB2 - 3 мкА в SDK_3.1.1(2). Если добавить блок RAM с питанием в sleep, то это дает совсем немного - 0.2..0.5 мкА
 

pvvx

Активный участник сообщества
Не вижу смысла в lib.a для GCC от китайцев.
На них итог, по размеру для TestTHB2 (SDK 3.1.3):
- { first: 0x11020000, last: 0x11033A27, length: 0x00013A28 }
- { first: 0x1FFF0000, last: 0x1FFF07FF, length: 0x00000800 }
- { first: 0x1FFF1838, last: 0x1FFF6803, length: 0x00004FCC }
а на Keil:
- { first: 0x11020000, last: 0x1102897B, length: 0x0000897C }
- { first: 0x1FFF0000, last: 0x1FFF040B, length: 0x0000040C }
- { first: 0x1FFF1838, last: 0x1FFF67B7, length: 0x00004F80 }
Они gcc собирают с опцией -O0 и т.д.
 

cool2000

Member
Не вижу смысла в lib.a для GCC от китайцев.
У вас зацепился большой кусок libc из-за sprintf в ota_app_service.c:process_cmd()
Вот что получается, если его тупо закомментировать.
Код:
  - { first: 0x11020000, last: 0x1102BC52, length: 0x0000BC53 }
  - { first: 0x1FFF0000, last: 0x1FFF07FF, length: 0x00000800 }
  - { first: 0x1FFF1838, last: 0x1FFF3EB7, length: 0x00002680 }
Ещё часть кода д.б. в sram. В итоге у gcc (без sprintf) получается 0xE2D4 (0xBC54 + 0x2680), у keil 0xD8FC (0x897C+0x4F80).
Часть функций из библиотек для gcc скомпилирована без rom_sym_def.h, что дополнительно тянет ещё как минимум memset и memcpy из libc gcc.
Ну и не забываем, что часть keil runtime китайцы тупо запихнули в rom.
 

pvvx

Активный участник сообщества
Всё это бесполезно - надо пересобирать либу. Оно собирается, имеет несколько исправляемых warnig.
Кто напишет человеческий makefile со сборкой всего плюс librf.a пусть из 3.1.1?
Китайский и другие имеющиеся - ужасны.
 

pvvx

Активный участник сообщества
Мне просто некогда в этом ковыряться. Есть куча других дел и ещё пользователи в github наседают с тупыми вопросами... похоже что у англо-язычных тоже "праздники"...

Вот это надо нормально собрать: https://github.com/biemster/st17h66_FindMy

Имеющийся там https://github.com/biemster/st17h66_FindMy/blob/main/FindMy/Makefile ужасен. И всё равно надо переписать стартовую часть.
 
Сверху Снизу