• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе 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 общего пользования, который жрет питание постоянно для нагрева атмосферы.
 
Сверху Снизу