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

BLE SoC PHY6202

pvvx

Активный участник сообщества
На phy6222 возможно это реализовать?
Там есть какой-то код для "расширенной рекламы". Это увеличивает размер прошивки, а надо сделать примитивный и ужатый по размеру OTA и в нем нет нужны в "расширенной рекламе"...
---
И если уточнять - с тем вторым моим домом связь WiFi сделана на роутере Keenetic Hero на чердаке, помешенным в экран типа тарелки из жести с долгой подстройкой положения антенн. А на другом доме - Asustek, тоже на чердаке...
Только так удалось получить более менее WiFi связь на 2.4ГГц. И не понятно как простой BLE термометр передает на тупой USB-BTсвисток без антенн, да ещё внутри помещений... при том что тут более 60-ти вечно орущих BLE и два десятка WiFi.
 

cool2000

Member
с тем вторым моим домом связь WiFi сделана на роутере Keenetic Hero на чердаке, ...
Только так удалось получить более менее WiFi связь на 2.4ГГц.
Всё дело в скорости. Подозреваю, впрочем, что WiFi на 2.4ГГц тоже не high speed. Обычный WiFi это не про дальность. Для таких целей лучше специализированный роутер с тарелкой взять, например, убик LiteBeam 5AC 23 5ГГц. Легко получите 500-600mbit/s. Наверняка, можно найти недорого рабочий б/у на авито.
 

pvvx

Активный участник сообщества
nRFConnect c термометрами на TLSR825x:
```
Requesting preferred PHYs...
gatt.setPreferredPhy(LE Coded, LE Coded, coding option = No preferred)
PHY updated (TX: LE Coded, RX: LE Coded)
``
C PHY62x2 не проходит. Переключает на 2M или 1M только.
Менял и раскомментировал в patch.c всё связанное с Coded PHY.
В старт добавлял:
C:
#if 1 // CODED PHY not work?
    deviceFeatureSet.featureSet[1] |= (uint8)(
            LL_FEATURE_2M_PHY
            | LL_FEATURE_CODED_PHY
            | LL_FEATURE_CSA2);
   // CSA2 feature setting
    pGlobal_config[LL_SWITCH] |= CONN_CSA2_ALLOW;
#endif
    llInitFeatureSetCodedPHY(TRUE);
    llInitFeatureSet2MPHY(TRUE);
    llInitFeatureSetDLE(TRUE);
Ещё надо найти почему, зачем и где он переключает соединение на 2M автоматом.
 

pvvx

Активный участник сообщества
В Keil SDK3.1.3 пытается переключиться на Coded PHY, но теряет соединение.
 

powar

New member
Господа!!! Я вижу прекрасное общение и решение возникающих проблем 2х очень осведомленных в определенной теме разработчиков (моё почтение!)... Но может в личку будете писать? Я, и много кто еще, "нихуан" не понимают..
Категорически не согласен. Имхо, форум нужен для обмена опытом, чтобы любой желающий мог найти максимум информации. Если не понятно - значит, возможно, эта информация Вам лично не нужна, но может быть нужна другому.
 

pvvx

Активный участник сообщества
до 34 секунды 2M PHY, потом смена на Coded РНY и потеря интервалов - с чего?
1705097070729.png
Ну а потом разрыв соединения по таймауту соединения (наверно стоит 8 сек) и переход к рекламе.
Код примера OTA.
 

pvvx

Активный участник сообщества
Категорически не согласен. Имхо, форум нужен для обмена опытом, чтобы любой желающий мог найти максимум информации. Если не понятно - значит, возможно, эта информация Вам лично не нужна, но может быть нужна другому.
Вы забываете, что есть коммерсанты и им невыгодно что кто-то получит знания или бесплатный программный продукт.
Но коммерсанты - это ещё ладно. Ремонтники - вот это да. Для них чем меньше народ знает, тем им выгоднее. :p
 

pvvx

Активный участник сообщества
HCI_LE_SetDefaultPhyMode() описывает приоритет какой PHY будет выбран по соединению. Тогда поведение в GСС при переключении в Coded PHY становится аналогичным с вариантом Keil SDK3.1.3 - потеря соединения.
Китайцы наверно не доделали соединение в Coded PHY :( В описаниях версий SDK не значится поддержка Coded PHY. В примерах встречается только 2M.И работает 1M и 2М.
 

cool2000

Member
Китайцы наверно не доделали соединение в Coded PHY
Проглядел по диагонали исходник rf_phy_driver.c. В функции void rf_phy_change_cfg0(uint8_t pktFmt) размер преамбулы для coded phy устанавливается в 0, тогда как в примере void rf_phy_dtm_trigged(void) (direct test mode) записывается 1.
C:
    #define RF_PHY_EXT_PREAMBLE_US 8
...
    #if(RF_PHY_EXT_PREAMBLE_US)

    //ext preamble for BLE 1M/2M, nByte
    if(pktFmt==PKT_FMT_BLE1M) {
        subWriteReg(0x40030040, 7, 5, (RF_PHY_EXT_PREAMBLE_US>>3) ); // 1byte -> 8us
    } else if(pktFmt == PKT_FMT_BLE2M) {
        subWriteReg(0x40030040, 7, 5, (RF_PHY_EXT_PREAMBLE_US>>2) );//2 byte -> 8us
    } else {
        subWriteReg(0x40030040, 7, 5, (0) ); ///// ????
    }
    #endif
...
    preambleLen = 1;
            if(!(g_rfPhyPktFmt==PKT_FMT_ZIGBEE)) {
                //[15:8] payload Len [7:5] preamble len, [4] tx mode, [3:0] payload type
                PHY_REG_WT(0x40030040,0x00030010|(preambleLen<<5));
            } else {
                //[15:8] payload Len [7:5] preamble len, [4] tx mode, [3:0] payload type
                PHY_REG_WT(0x40030040,0x000b0013|(preambleLen<<5));
                PHY_REG_WT(0x40030000,0x78068002);
            }
Может это и не ошибка, но выглядит подозрительно. Можно ещё проверить выставление интервалов в файле patch.c void init_config(void). Но у меня нет идей, какие д.б. значения для coded phy.
C:
    // LL engine settle time
    pGlobal_config[LL_HW_BB_DELAY] = 54;//54-8;
    pGlobal_config[LL_HW_AFE_DELAY] = 8;
    pGlobal_config[LL_HW_PLL_DELAY] = 40;//45;//52;
    // Tx2Rx and Rx2Tx interval
    //Tx2Rx could be advanced a little
    //Rx2Tx should be ensure T_IFS within150us+-2us
    pGlobal_config[LL_HW_Rx_TO_TX_INTV] = 62-RF_PHY_EXT_PREAMBLE_US;
    pGlobal_config[LL_HW_Tx_TO_RX_INTV] = 50;//65
    //------------------------------------------------2MPHY
    // LL engine settle time
    pGlobal_config[LL_HW_BB_DELAY_2MPHY] = 59;
    pGlobal_config[LL_HW_AFE_DELAY_2MPHY] = 8;
    pGlobal_config[LL_HW_PLL_DELAY_2MPHY] = 40;//45;//52;
    // Tx2Rx and Rx2Tx interval
    //Tx2Rx could be advanced a little
    //Rx2Tx should be ensure T_IFS within150us+-2us
    pGlobal_config[LL_HW_Rx_TO_TX_INTV_2MPHY] = 73-RF_PHY_EXT_PREAMBLE_US;//20200822 ZQ
    pGlobal_config[LL_HW_Tx_TO_RX_INTV_2MPHY] = 57;//72
    //------------------------------------------------CODEPHY 500K
    // LL engine settle time CODEPHY 500K
    pGlobal_config[LL_HW_BB_DELAY_500KPHY] = 50;//54-8;
    pGlobal_config[LL_HW_AFE_DELAY_500KPHY] = 8;
    pGlobal_config[LL_HW_PLL_DELAY_500KPHY] = 40;//45;//52;
    // Tx2Rx and Rx2Tx interval
    //Tx2Rx could be advanced a little
    //Rx2Tx should be ensure T_IFS within150us+-2us
    pGlobal_config[LL_HW_Rx_TO_TX_INTV_500KPHY] =  2;
    pGlobal_config[LL_HW_Tx_TO_RX_INTV_500KPHY] = 66;//72
    //------------------------------------------------CODEPHY 125K
    // LL engine settle time CODEPHY 125K
    pGlobal_config[LL_HW_BB_DELAY_125KPHY] = 30;//54-8;
    pGlobal_config[LL_HW_AFE_DELAY_125KPHY] = 8;
    pGlobal_config[LL_HW_PLL_DELAY_125KPHY] = 40;//45;//52;
    // Tx2Rx and Rx2Tx interval
    //Tx2Rx could be advanced a little
    //Rx2Tx should be ensure T_IFS within150us+-2us
    pGlobal_config[LL_HW_Rx_TO_TX_INTV_125KPHY] = 5;
    pGlobal_config[LL_HW_Tx_TO_RX_INTV_125KPHY] = 66;//72
В примерах встречается только 2M.И работает 1M и 2М.
С примерами про coded phy вообще пхохо. Похоже единственный пример PHY62XX_SDK_3.1.3/example/ble_peripheral/bleUart_AT. Там после установления соединения режим переключается на Coded 125К.
C:
        case GAP_LINK_ESTABLISHED_EVENT:
            gapRole_state = GAPROLE_CONNECTED;
            g_rfPhyPktFmt = PKT_FMT_BLR125K;
            notify = TRUE;
            break;
 

pvvx

Активный участник сообщества
Пробовал и на PHY6252, вдруг у меня какой бракованный чип - но всё тоже самое.
bleUart_AT ещё не проверял.
И с али пришли другие всякие термометры с PHY6222... А так-же ещё 3 новых типа коробочек с Tuya с TLSR8258 (ZTU модуль).
 

pvvx

Активный участник сообщества
BTH01 хуже THB2:
  • кнопка не торчит
  • вставлять плату в корпус сложнее
  • корпус с резкими углами
  • крышка батареек хлипче
 

pvvx

Активный участник сообщества
Сенсор в BTH01 при понижении напряжения ниже 2.5В начинает страшно врать. В документации к датчику CHT8305 минимум питания = 2.5В.
При 22С показывает 13С
1705259338662.png
Если опускать напряжение ниже, тогда будет и -25С и т.д.
 

pvvx

Активный участник сообщества
Датчики CHT8305 и CHT8310 имеют одинаковый ID.
В доке CHT8305 id указан неверно 0x5950 != 0x5959.
Но отличается неописанный в доке CHT8310 номер модели = 0x8215 (CHT8305 = 0x8305) .
Т.е. надпись врет насчет CHT8310, а там CHT8315
И BTH01 кушает больше THB2 в режиме sleep на 0.7 мкА. Наверно датчик жрет больше...
 

pvvx

Активный участник сообщества
Т.е. при выборе, если есть THB2 не покупать BTH01. BTH01 по многим параметрам хуже, особенно по ограничению нижнего напряжения питания до 2.5В и неудобной кнопке.
 
Сверху Снизу