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

BLE SoC PHY6202

cool2000

Member
В итоге идти надо с обратной стороны
Будем посмотреть...

Ещё хотел спросить: кем формируется сектор 0x0003000-0x0003FFF (разметка Application)? Ни в TestTHB2.hex, ни в TestTHB2_phy6222.hexf этой области нет, зато область 0x11020000 - 0x110270CF (Application) присутствует в обоих файлах.
 

pvvx

Активный участник сообщества
Ещё хотел спросить: кем формируется сектор 0x0003000-0x0003FFF (разметка Application)? Ни в TestTHB2.hex, ни в TestTHB2_phy6222.hexf этой области нет, зато область 0x11020000 - 0x110270CF (Application) присутствует в обоих файлах.
Что то вы опять напутали.
hexf содержит такие блоки:
NO.1 Flash_Addr: 0x11002000, Size: 00130
NO.2 Flash_Addr: 0x11005000, Size: 03FF4
NO.3 Flash_Addr: 0x11020000, Size: 08A88

NO.1 создается
Начало flash защищено загрузчиком в ROM. Информации по ней нет. Там пишется типа FAT записанных блоков. Дырку, какая была у прошлой серии закрыли и эту область не записать из COM порта. Ранее можно было обойти - писать/стирать область со смещением кратным размеру Flash. Там Flash дублируется, а ROM не ограничивала по размеру...
В области 0x800..0x9xx - ROM кидается данными типа из OTP. Шифрованы, т.е. дичайщая побитная разметка. Как выудить от туда MAC - неизвестно.
 

pvvx

Активный участник сообщества
И с MAC проблема. Сейчас пишу его в FS. И при команде стирании всей flash он стирается. Китайцы...

В PhyPlusKit записал MAC - 0123456789AB
Он в 0x900, 24 байта:
02 00 01 00│08 00 04 00│20 00 10 00│80 00 40 00
00 02 00 01│00 08 00 04│FF FF FF FF│FF FF FF FF
Кто разгадает, как из этого получить 0123456789AB ?
 

pvvx

Активный участник сообщества

pvvx

Активный участник сообщества
Нашел - для декодировки MAC используется chip_id_one_bit_hot_convter();
 

pvvx

Активный участник сообщества
А по адресу 0x4000 что записано? структура прошивки
по адресу 0x4000 - ничего. Это для древнего SDK.
структура прошивки - это наверно для старых или разных вариантов SDK.
Сенсор 8305, скорее всего прошивка Tuya та же самая.
А толку? Сенсор 8305 всё равно обрабатывать по другому.
Вы не запишите прошивку через COM-PORT пока я не дам питонову утилиту для записи FullFlash. Уже 99% сделано - осталось навести красоту.
Китайцы старались чтобы никто не мог скопировать FullFlash в другой чип. :) :)
 

pvvx

Активный участник сообщества
Восстановление Tuya в THB2
Код:
WrFlash-PHY6222 Utility version 28.12.23
Connecting...
PHY62x2 - Reset Ok
Revision: b'001364c8 6222M005'
FlashID: 1364c8, size: 512 kbytes
PHY6222 - connected Ok
Reopen COM11 port 1000000 baud... ok
Write Flash data 0x00000000 to 0x00040000 from file: ff_r11000000-00040000.bin ...
Erase block 64k Flash at 0x00000000... ok
Erase block 64k Flash at 0x00010000... ok
Erase block 64k Flash at 0x00020000... ok
Erase block 64k Flash at 0x00030000... ok
Write 0x00002000 bytes to Flash at 0x00000000... ok
Write 0x00002000 bytes to Flash at 0x00002000... ok
Write 0x00002000 bytes to Flash at 0x00004000... ok
Write 0x00002000 bytes to Flash at 0x00006000... ok
Write 0x00002000 bytes to Flash at 0x00008000... ok
Write 0x00002000 bytes to Flash at 0x0000a000... ok
Write 0x00002000 bytes to Flash at 0x0000c000... ok
Write 0x00002000 bytes to Flash at 0x0000e000... ok
Write 0x00002000 bytes to Flash at 0x00010000... ok
Write 0x00002000 bytes to Flash at 0x00012000... ok
Write 0x00002000 bytes to Flash at 0x00014000... ok
Write 0x00002000 bytes to Flash at 0x00016000... ok
Write 0x00002000 bytes to Flash at 0x00018000... ok
Write 0x00002000 bytes to Flash at 0x0001a000... ok
Write 0x00002000 bytes to Flash at 0x0001c000... ok
Write 0x00002000 bytes to Flash at 0x0001e000... ok
Write 0x00002000 bytes to Flash at 0x00020000... ok
Write 0x00002000 bytes to Flash at 0x00022000... ok
Write 0x00002000 bytes to Flash at 0x00024000... ok
Write 0x00002000 bytes to Flash at 0x00026000... ok
Write 0x00002000 bytes to Flash at 0x00028000... ok
Write 0x00002000 bytes to Flash at 0x0002a000... ok
Write 0x00002000 bytes to Flash at 0x0002c000... ok
Write 0x00002000 bytes to Flash at 0x0002e000... ok
Write 0x00002000 bytes to Flash at 0x00030000... ok
Write 0x00002000 bytes to Flash at 0x00032000... ok
Write 0x00002000 bytes to Flash at 0x00034000... ok
Write 0x00002000 bytes to Flash at 0x00036000... ok
Write 0x00002000 bytes to Flash at 0x00038000... ok
Write 0x00002000 bytes to Flash at 0x0003a000... ok
Write 0x00002000 bytes to Flash at 0x0003c000... ok
Write 0x00002000 bytes to Flash at 0x0003e000... ok
--------------------------------------------------------
Write Flash data 0x00000000 to 0x00040000 from file: ff_r11000000-00040000.bin - ok.
 

cool2000

Member
для декодировки MAC используется chip_id_one_bit_hot_convter();
Это так реализовано в SDK phyplus. В таком случае может будет проще поменять процедуру read_chip_mAddr(), или сохранять mac своим способом и активировать напрямую?
C:
CHIP_ID_STATUS_e LL_PLUS_LoadMACFromChipMAddr(void)
{
    check_chip_mAddr();
    volatile uint8_t* p_ownPublicAddr = (volatile uint8_t*)0x1fff0965;

    if(g_chipMAddr.chipMAddrStatus==CHIP_ID_VALID)
    {
        for(uint8_t i =0; i<CHIP_MADDR_LEN; i++)
            *(p_ownPublicAddr++) = g_chipMAddr.mAddr[i];
    }

    return g_chipMAddr.chipMAddrStatus;
}
}
по адресу 0x4000 - ничего. Это для древнего SDK.
Тем не менее кое-что полезное оттуда можно взять. Tuya хранит MAC по этому адресу во flash. А потом его активирует, записывая по адресу 0x1fff0965 в RAM.
C:
OPERATE_RET tkl_ble_gap_addr_set(TKL_BLE_GAP_ADDR_T CONST *p_addr)
{

    if(tkl_ble_gap_adv_stop() == OPRT_OK) {
        sg_is_restart_adv = TRUE;
    }

    volatile UINT8_T* p_ownPublicAddr = (volatile UINT8_T*)0x1fff0965;  // It's 0x1fff0965 for 6222.
    memcpy((VOID_T*)p_ownPublicAddr, p_addr->addr, 6);
  
    return OPRT_OK;
}
 

cool2000

Member
Сенсор 8305 всё равно обрабатывать по другому.
Если линии i2c разведены одинаково, то при старте программы прочитать Model Id, а затем обрабатывать в зависимости от модели сенсора.
  • CHT8305 0x8305
  • CHT8310 0x8215
Получится универсальная прошивка.
 

pvvx

Активный участник сообщества
C MAC одна проблема - если переписать прошивку в PhyPlusKit, то он стирается. Что неудобно, т.к. HA и другие приемники уже настроены на прошлый.
Начальный МАС от Tuya не нужен. Будут только проблемы. Он назначается - 3 первых байта от Tuya, следующие - случайные (рандом).
При перепрошивке с Tuya, если не сменить адрес, то будет бардак. Потребуется сбросить все кэши, во всех ПО и адаптерах, которые обращались к устройству. Иначе, по стандарту, они должны помнить все UUID с привязкой по MAC и при следующем соединении будут бардак и вылеты, пока специальный UUID на устройстве не сообщит, что надо всё обновить. А горе писатели ПО и этого не знают.
Но и устройство не может помнить все ваши адаптеры, чтобы дать команду обновления. А если давать всем и всегда - будет ужасная жручка при подключении - каждое соединение будут перечитываться все таблицы...
Этих вопящих в issue толпы. Они не шарят, что после перепрошивки с оф.версии нужно всё своё сбросить. Для совместимости с MiHome требуется оставить MAC. А для Tuya нет смысла.
 

pvvx

Активный участник сообщества
Дык вот указанный мной вариант MAC, который надо декодировать, не очищается в PhyPlusKit при перепрошивке, т.к. запись или стирание этой области Flash защищено программами в ROM.
Но очищается в моих утилитах, обходящих все защиты, если это нужно.
Декодирование MAC есть, но кодирование - хде?

---

Ещё можно только ругаться и плеваться - тупые иносранцы-писатели в HA не шарят, что есть случайный MAC, помеченный 2 битами. Весь HA засрут - найден новый ...
 

cool2000

Member
Декодирование MAC есть, но кодирование - хде?
Не всякая операция легко обратима.
Но очищается в моих утилитах, обходящих все защиты
В итоге удалось обмануть защиту, записав другой размер flash памяти и сдвинув адрес записи?
 

pvvx

Активный участник сообщества
Патчи в кернел Linux для адаптеров BT пишут тоже какие-то безграмотные обезянки...
 

pvvx

Активный участник сообщества
Не всякая операция легко обратима.
Этот MAC записывается в PhyPlusKit
В итоге удалось обмануть защиту, записав другой размер flash памяти и сдвинув адрес записи?
Да. Так было проще. Но есть и ещё варианты. Я с начала пошел другим путем - но там кода надо больше и хорошо, что не стал давать другие варианты...
 

pvvx

Активный участник сообщества
> Tuya хранит MAC по этому

Где эта SDK от Tuya?
 

cool2000

Member
В PhyPlusKit записал MAC - 0123456789AB
Он в 0x900, 24 байта:
02 00 01 00│08 00 04 00│20 00 10 00│80 00 40 00
00 02 00 01│00 08 00 04│FF FF FF FF│FF FF FF FF
Кто разгадает, как из этого получить 0123456789AB ?
Легко. Каждый 16-ричный символ кодируется позицией бита в 16 битном слове.
  • 0 - 0001
  • 1 - 0002
  • 2 - 0004
  • 3 - 0008
  • 4 - 0010
  • 5 - 0020
  • 6 - 0040
  • 7 - 0080
  • 8 - 0100
  • 9 - 0200
  • A - 0400
  • B - 0800
  • C - 1000
  • D - 2000
  • E - 4000
  • F - 8000
Кодированный адрес записывается в формате little endian.
Пример:
3F - 00 80 08 00, сначала F, потом 3
AB - 00 08 00 04
 
Сверху Снизу