• Система автоматизации с открытым исходным кодом на базе 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 ужасен. И всё равно надо переписать стартовую часть.
 
Сверху Снизу