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

BLE модули TB-04/TB-03F (TLSR8253F512)

pvvx

Активный участник сообщества
Со счетчиком импульсов по прерыванию с просыпанием от GPIO такой расклад:

Время ‘просыпания-засыпания’ чипа из deep-sleep около 2 мс и уже при частоте за 50 Гц использование deep-sleep становится нерентабельным. Для больших частот счета импульсов следует применять простой sleep (сон только CPU). Но в таком режиме CR2032 слишком быстро истощится. Потребление при 10 импульсах в секунду тоже требует более емкую батарейку…

Т.е. сам счетчик импульсов желательно делать на чем-то другом и передавать в SoC с BLE...
 

Slacky

Member
Время ‘просыпания-засыпания’ чипа из deep-sleep около 2 мс и уже при частоте за 50 Гц использование deep-sleep становится нерентабельным. Для больших частот счета импульсов следует применять простой sleep (сон только CPU). Но в таком режиме CR2032 слишком быстро истощится. Потребление при 10 импульсах в секунду тоже требует более емкую батарейку…
Я хочу попробовать прикрутить это дело к подсчету воды. А там один оборот - один импульс. Вот сейчас кран открыл, один оборот - 1 минута 26 секунд. Даже если открыть еще один кран на кухне и включить посудомойку и стиралку, врядли мы сильно сократим время оборота.
 

pvvx

Активный участник сообщества
Я хочу попробовать прикрутить это дело к подсчету воды. А там один оборот - один импульс. Вот сейчас кран открыл, один оборот - 1 минута 26 секунд. Даже если открыть еще один кран на кухне и включить посудомойку и стиралку, врядли мы сильно сократим время оборота.
Тогда делать уже нечего - надо купить Xiaomi LYWSD03MMC, открутить винтики, припаять геркон или короткие провода к контакту, закрутить и прошить custom прошивкой, затем в настройках включить "счетчик"...
Короткие провода по причине того, что в режиме "счетчик" включается "подтяжка" контакта к питанию на 1 МОм ... и при замкнутом контакте она тоже нехило жрет и если ещё провода с утечками, да на длинные наводки бывают...
 

pvvx

Активный участник сообщества
1 МОм на замкнутом контакте - это дополнительные 3 мкА от 3В, при среднем потреблении в "default" настройках 15 мкА!
 

Slacky

Member
Тогда делать уже нечего - надо купить Xiaomi LYWSD03MMC, открутить винтики, припаять геркон или короткие провода к контакту, закрутить и прошить custom прошивкой, затем в настройках включить "счетчик"...
Тут есть один нюанс. Это же хобби. Результат, конечно хорошо, но очень важен сам процесс :))

К тому же, GPIO нужно от 2-х до 4-х, как правило ...

Возьму Ваш код, как пример :))
 

pvvx

Активный участник сообщества
Тут есть один нюанс. Это же хобби. Результат, конечно хорошо, но очень важен сам процесс :))
Для этого необходимо досконально изучить BLE и конкретную реализацию SDK на чипе. Это займет 99% времени.
Остальной 1% уйдет на создание системы отладки - в основном на измеритель потребления с желательным шагом замера от 10 кГц (оптимально 50..100кГц) и хотя-бы 12 бит в диапазоне 0..30 мА.
Возьму Ваш код, как пример :))
Как пример он не очень - сильно завязан со всем остальным...
 

Slacky

Member
Для этого необходимо досконально изучить BLE и конкретную реализацию SDK на чипе. Это займет 99% времени.
Остальной 1% уйдет на создание системы отладки - в основном на измеритель потребления с желательным шагом замера от 10 кГц (оптимально 50..100кГц) и хотя-бы 12 бит в диапазоне 0..30 мА.
Это же какой-то приборчик? Есть где посмотреть реализацию?

Как пример он не очень - сильно завязан со всем остальным...
Можете предложить что-то попроще? Например, датчик двери (закрыто/открыто) и заряд батарии. Маяк.
 

pvvx

Активный участник сообщества
Это же какой-то приборчик? Есть где посмотреть реализацию?
INA199 + Осциллограф с 12 бит
А минималка - PowerProfiler , коих много разных...
Можете предложить что-то попроще? Например, датчик двери (закрыто/открыто) и заряд батарии. Маяк.
А нафига, если есть LYWSD03MMC? Он все эти роли и исполняет. Как Маяк - изначально. Как датчик двери он уже в базовой версии custom прошивки работает и всё давно интегрировано в Home Assistant, а у других вариантов термометров есть и кнопка, по которой удобно включать/выключать чего ...
И в коде есть переключение и на вариант 2-х входов ADC - это если вам чего измерять и писать логи ...
 

pvvx

Активный участник сообщества
И у TLSR8251, который установлен в LYWSD03MMC, есть ноги USB. В TB-04/03 у TLSR8253 эти ноги не выведены у чипа. USB ноги торчат ещё у TLSR8258 - с ними ныне модули есть на ali ...
 

pvvx

Активный участник сообщества
Можете предложить что-то попроще? Например, датчик двери (закрыто/открыто) и заряд батарии. Маяк.
В этом деле главное кто принимать данные и выполнять действия будет. Форматы сообщений (рекламы). Вариант прошивки для LYWSD03MMC и т.д. имеет 4 типа форматов без шифрации и с шифрацией - итого 8. И они уже поддерживаются в разнообразном ПО "вумных домов", включая программки для смартфона...
Пока разберетесь как в данном SDK включить защиту pin-кодом, да как включить поддержку 2Mbit PHY или LongRange, да новые варианты канального переключения для поддержки современного BLE 5.0 - куча времени уйдет... Это всё и наляпано в custom прошивку для термометров. А с нуля, если всё это не разгребать, выйдет примитивная и никому не нужная игрушка и никакого обучения такое не дает.
 

Slacky

Member
Чтение/программирование TB-03F-KIT.

1. Скачиваем TlsrComProg.py и floader.bin.
2. Замыкаем проводом с коннектором папа-мама

ногу с номером 2 CH340C и SWS:
Посмотреть вложение 11337
А вот такой модуль можно также прошить?
H364ea8e239ed47f3a62611f154be19887.jpg
H0b857a61ccee44758b6e3c11ac7fd3331.jpg
При попытке выдает такое
Код:
$ ./TlsrComProg.py -p COM10
================================================
TLSR825x Floader version 10.11.20
------------------------------------------------
Open COM10, 230400 baud...
Reset module (RTS low)...
Activate (600 ms)...
Warning: Wrong RX-TX connection?
Connection...
Load <floader.bin> to 0x40000...
Bin bytes writen: 1896
CPU go Start...
------------------------------------------------
ChipID: 0x5562 (TLSR8253), Floader ver: 1.0
Flash JEDEC ID: c86013, Size: 512 kbytes
------------------------------------------------
------------------------------------------------
(1) Warning
Все.
 

pvvx

Активный участник сообщества
Он уже считал код установленной в чипе flash (ID: c86013). Так что всё работает...
Код:
------------------------------------------------
ChipID: 0x5562 (TLSR8253), Floader ver: 1.0
Flash JEDEC ID: c86013, Size: 512 kbytes
------------------------------------------------
А далее глядеть опции по загрузке...
 

pvvx

Активный участник сообщества
(1) Warning там от неправильного согласования резисторов. Та и фиг с ним, т.к. эмуляция Telink SWire на прием в UART имеет проблемы с дровами USB-UART, типами чипов USB-UART и распаянными на плате резисторами...
В начале по Telink SWire через pin SWS грузится UART драйвер в RAM чипа, а потом всё работает по UART c CRC...
 

Slacky

Member
Он уже считал код установленной в чипе flash (ID: c86013). Так что всё работает...
Код:
------------------------------------------------
ChipID: 0x5562 (TLSR8253), Floader ver: 1.0
Flash JEDEC ID: c86013, Size: 512 kbytes
------------------------------------------------
А далее глядеть опции по загрузке...
Да это я тупанул, строку запуска полностью не скопировал. Сейчас проверил, все считалось.

Код:
$ ./TlsrComProg.py -p COM10 rf 0 0x80000 xx1.bin
================================================
TLSR825x Floader version 10.11.20
------------------------------------------------
Open COM10, 230400 baud...
Reset module (RTS low)...
Activate (600 ms)...
Warning: Wrong RX-TX connection?
Connection...
Load <floader.bin> to 0x40000...
Bin bytes writen: 1896
CPU go Start...
------------------------------------------------
ChipID: 0x5562 (TLSR8253), Floader ver: 1.0
Flash JEDEC ID: c86013, Size: 512 kbytes
------------------------------------------------
Read Flash from 0x000000 to 0x080000...
Outfile: xx1.bin
------------------------------------------------
(1) Warning
 

Slacky

Member
Прошил для пробы blink. Моргает, на кнопку переключения реагирует.

Ща буду глупые вопросы задавать :))

1. А как это все отлаживать? Ну там хоть банальный вывод в com-порт организовать можно?
2. По программатору из модуля 8253. Я правильно понял, что заливаем в первый модуль прошивку и пин SWS назначается SWM, его мы соединяем напрямую с SWS второго модуля и шьем?
3. Как правильно запрограммировать в начале старта GPIO (ну допустим мы их не используем, чтоб не жрало)?

Спасибо :))
 

Slacky

Member
Немного поизучал предмет. Взял SDK от TeLink - Bluetooth LE Single Connection. Скачал их же IDE. Собрал 825x_ble_sample из примеров. Собрался и насоздавал makefile и всякие подключаемые *.mk. Поглядел на это дело. Переписал makefile от https://github.com/pvvx/ATC_MiThermometer. Собрался. Есть только нюанс - вывел для меня не очень понятную инфу, но мне она не нравится.

Код:
TLSR825x MemInfo version 12.11.20
Warning: Undefined symbol 'btusb_bulk_in_packet'!
Warning: Undefined symbol 'btusb_interrupt_in_packet'!
Warning: Undefined symbol 'firmware_encrypt_based_on_uid'!
Warning: Undefined symbol 'hci_rx_fifo'!
Warning: Undefined symbol 'hci_tx_fifo'!
Warning: Undefined symbol 'usb_bulk_in_packet'!
Warning: Undefined symbol 'usb_bulk_out_get_data'!
===================================================================
 Section|          Description| Start (hex)|   End (hex)|Used space
-------------------------------------------------------------------
 ramcode|   Resident Code SRAM|           0|        2D04|   11524
    text|           Code Flash|           0|           0|       0
  rodata| Read Only Data Flash|           0|           0|       0
  rtdata|       Retention SRAM|      842D04|      843A3C|    3384
      nc|   Wasteful Area SRAM|      843A3C|           0|-8665660
   ictag|     Cache Table SRAM|           0|           0|       0
  icdata|      Cache Data SRAM|           0|         800|    2048
    data|       Init Data SRAM|      844900|      84491C|      28
     bss|        BSS Data SRAM|      844920|      844C05|     741
 irq_stk|        BSS Data SRAM|      844920|      844AA0|     384
   stack|       CPU Stack SRAM|      844C05|      840000|  -19461
   flash|       Bin Size Flash|           0|        C26C|   49772
-------------------------------------------------------------------
Start Load SRAM : 0 (ICtag: 0x0)
Total Used SRAM : 19461 from 0
Total Free SRAM : -8665660 + stack[-19461] = -8685121
Warning! Stack is low!
Работоспособность не проверял ...
 

pvvx

Активный участник сообщества
1. А как это все отлаживать? Ну там хоть банальный вывод в com-порт организовать можно?
К примеру, в проекте термометра, есть возможность включения примитивного вывода в u_printf().
Включение производится флагом в 'app_config.h': #define UART_PRINT_DEBUG_ENABLE 0 // =1 use u_printf() (PA7/SWS), source: SDK/components/application/print/u_printf.c
Слеплено "по просьбе трудящихся", т.к. мелкую отладку, да если ещё и приспичит, мне проще выводить в BLE или USB (если используется). Или программатором по типу TLSRPGM - он читает на ходу любые регистры и области памяти...
У Telink для SDK есть донгл-отладчик-программатор EVK работающий по Telink SWire. На али ныне стоит 2 т.р.
Можно слепить самому из модуля за 200..300 руб.
Т.е. вариантов отладки целая куча, но нужны ли они, если главным отладчиком в деле BLE является PowerProfiler?
2. По программатору из модуля 8253. Я правильно понял, что заливаем в первый модуль прошивку и пин SWS назначается SWM, его мы соединяем напрямую с SWS второго модуля и шьем?
Не так - у чипов есть вывод SWM. Он и работает как "мастер". Вывод SWS - это slave.
3. Как правильно запрограммировать в начале старта GPIO (ну допустим мы их не используем, чтоб не жрало)?
Оно в любом случае не жрет, если вы не сделали КЗ - выход к примеру "1" засадили на gnd :)
При переходе в сон все выводы переводятся в режим "входов", т.е. контроллер GPIO полностью отключается. Работают только "подтяжки".
 

pvvx

Активный участник сообщества
Немного поизучал предмет. Взял SDK от TeLink - Bluetooth LE Single Connection. Скачал их же IDE. Собрал 825x_ble_sample из примеров. Собрался и насоздавал makefile и всякие подключаемые *.mk. Поглядел на это дело. Переписал makefile от https://github.com/pvvx/ATC_MiThermometer. Собрался.
Нахимичили - нет соответствия кода загрузчика и разметки файла линковщика.
ATC_MiThermometer использует свои, специально заточенные коды загрузчика и линковщика. К ним и привязана программа показа информации по разметке.
Оф. линк и код loader-a создают большой бинарный код с дырами заполненными нулями. Это увеличивает время загрузки OTA и, следовательно, потребление при OTA. А OTA обходится жирно для CR2032 и т.д.
 

pvvx

Активный участник сообщества
Читайте документацию по SDK. Там всё описано как для детсада (китайцы по другому ещё не умеют). Или вам надо переводить и описывать по типу отсебятины?

BLE устройство всегда спит. Когда просыпается по событию, то тогда на время активности и включается всякая периферия CPU. В данном SDK при каждом старте вставлена и производится настройка всех GPIO и “подтяжек”. Но конфиг “подтяжек” отрабатываются только по холодному старту.

Вы должны в “app_config.h” описать требуемую конфигурацию GPIO. Или перед действием конфигурировать мелкими функциями нужные, примерно как аля “Arduino”. Но зачем, если в самом старте после каждого просыпания все GPIO переназначаются #define, даже если вы ничего не описали в своем “app_config.h”. Будут назначены как описано в “gpio_default_8258.h” – там же и пример что и как…

Для снижения потребления вы должны инициализировать любую периферию только на время работы с ней. А по окончанию действия – деинициализировать. Система то пащет импульсно и все действия укладываются в пару мс с секундными паузами… Это ещё один камень в огород любителей отладки. Проц всё время спит и что скажет отладчик? И какой нафиг UART с медлительным выводом отладки, если это жрет более чем вся система, да никак не согласуется с орбитражем таймингов в BLE?

Вывод отладки в UART возможен только если из контролера BLE делают MCU общего пользования, который жрет питание постоянно для нагрева атмосферы.
 
Сверху Снизу