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

aloika

Active member
Нашел вероятную ошибку в Bluetooth LE Multi Connection SDK 4.0.1.1. В master connection не устанавливается CONN_INTERVAL более 300 мс (значение 256). По-разному пробовал, безуспешно. В single connection SDK все значения работают. Кроме того, Multi SDK не умеет менять параметры соединения по запросу slave. Ну это-то ладно, мне не критично. А вот частые соединения - это плохо с точки зрения энергосбережения подключенного slave.
 

pvvx

Активный участник сообщества
Устройство, инициирующее connect, выходит на соединение со своими параметрами. А уже далее происходит согласование по запросу от отвечающего устройства.
Удержание мульти-соединения требует от расчета временной диаграммы переключения каналов и это устройство диктует параметры соединения подчиненным. Иначе у ведомых будет большее потребления из-за перезапросов которые не услышит ведущий.
 

pvvx

Активный участник сообщества
USB брелки и прочие BLE на компах и телефонах выходят на соединение с CONN_INTERVAL от 20 до 60. Только после соединения интервал можно изменить...
В атрибутах у устройства есть данные о предпочтительном интервале соединения. Запрашивающий обычно их игнорирует... Так сложилась практика...
 

aloika

Active member
Устройство, инициирующее connect, выходит на соединение со своими параметрами. А уже далее происходит согласование по запросу от отвечающего устройства.
Сейчас мульти-сдк такие запросы не обрабатывает. В руководстве написано, что, может потом, в будущем сделают. В сингл-сдк всё это работает. Как-нибудь задать прямо на слейве, чтобы отвечал пореже, тоже не получилось (идея была поставить latency на мастере побольше, а слейвом отвечать пореже). Так, похоже, нельзя.
 

pvvx

Активный участник сообщества
@aloika А с Zigbee есть какие успехи?
 

aloika

Active member
В Bluetooth LE Multi Connection SDK 4.0.1.1. также не работает шифрование прошивки (то, что в app_config называется FIRMWARES_SIGNATURE_ENABLE). Даже либы такой нет в комплекте. Попробовал взять либу от сингл SDK - не, не получается, не стартует прошивка.
А в обычной (single conn) SDK этот функционал работает.

Кстати. Во всех руководствах к SDK написано, что каналы ADC надо включать по очереди, что MISC канал должен работать не одновременно с LEFT и RIGHT. Такое вот ограничение. Хотя в datasheet'е никаких ограничений на это - нет. Я попробовал одновременно их запустить - и относительно несложно всё получилось. Могу поделиться, если интересно кому.

Эх, китайский форум по TLSR совсем дохлый. Задал там вопрос про CONN_INTERVAL - всё глухо, никакой реакции.
 

Simon

Member
2. Замыкаем проводом с коннектором папа-мама
ногу с номером 2 CH340C и SWS:
Посмотреть вложение 11337
Подскажите, пожалуйста, как это работает. Получается, мы замыкаем SWS на TX (от PC) или на RX у TSLR. И все. Это не совпадает с вашими схемами программаторов UART/SWS.

Или в этом случае SWS используется только как триггер запуска загрузчика для прошивки по UART?
 

aloika

Active member
Эх, китайский форум по TLSR совсем дохлый. Задал там вопрос про CONN_INTERVAL - всё глухо, никакой реакции.
Ответили:

1. In version 4.0.1.1, the master role support a maximum connection interval of 320ms.
2. You can register the event 'GAP_EVT_MASK_L2CAP_CONN_PARAM_UPDATE_REQ'. If slave conn param update req occur, then respond in app_host_event_callback().
 

pvvx

Активный участник сообщества
Подскажите, пожалуйста, как это работает. Получается, мы замыкаем SWS на TX (от PC) или на RX у TSLR. И все. Это не совпадает с вашими схемами программаторов UART/SWS.

Или в этом случае SWS используется только как триггер запуска загрузчика для прошивки по UART?
После сброса все GPIO настроены как входы и TX и RX, активен только SWS.
1. Пока процессор не очнулся после сброса, USB-UART на TX по протоколу Telink Swire передает код остановки CPU на SWS pin.
2. Далее USB-UART на TX по протоколу Telink Swire через pin SWS передает загрузчик-программатор и запускает его.
3. Код загрузчика-программатора включает UART на MCU и далее связь c USB-UART идет по TX-RX.
 

pvvx

Активный участник сообщества
SWS pin - двунаправленный - и вход и выход. Для разрешения конфликта на TX включен токоограничивающий резистор. Прием-детектирование протокола Telink Swire на RX USB-UART возможен не всеми адаптерами.... В Git указано какие проверены...
 

aloika

Active member
Неожиданно вылезла проблема - среда стала компилировать не каждый раз. выдает ошибку:

m.AllocationBase 0x0, m.BaseAddress 0x60E90000, m.RegionSize 0x1A0000, m.State 0x10000
C:\TelinkSDK\bin\sh.exe: *** Couldn't reserve space for cygwin's heap (0x60E90000 <0x2680000>) in child, Win32 error 0
make: *** [boot/8253/cstartup_8253_RET_16K.o] Error 1

Ошибка может меняться - разные файлы и т.д., но остается этот "Couldn't reserve space for cygwin's heap"
Что это? Как с этим бороться?
 

aloika

Active member
А иногда такое вылезает:

Building file: ../vendor/SWBD_Remote/remote.c
0 [main] sh 7888 open_stackdumpfile: Dumping stack trace to sh.exe.stackdump
make: *** [vendor/SWBD_Remote/remote.o] Error 5


Файл может быть любой. Теперь, чтобы откомпилировать, приходится жать кнопку компиляции последовательно 4-5 раз. Каждый раз он компилирует следующий кусок и вылетает с одной из этих ошибок. С пятого-шестого подхода компилирует всё.
 

aloika

Active member
Неожиданно вылезла проблема - среда стала компилировать не каждый раз. выдает ошибку:

m.AllocationBase 0x0, m.BaseAddress 0x60E90000, m.RegionSize 0x1A0000, m.State 0x10000
C:\TelinkSDK\bin\sh.exe: *** Couldn't reserve space for cygwin's heap (0x60E90000 <0x2680000>) in child, Win32 error 0
make: *** [boot/8253/cstartup_8253_RET_16K.o] Error 1

Ошибка может меняться - разные файлы и т.д., но остается этот "Couldn't reserve space for cygwin's heap"
Что это? Как с этим бороться?
Более-менее разобрался с этим.

Суть беды описана здесь. Но решения там нет, мне ничего не помогло.

Я делал так:

1. Ставим cygwin64
2. Переименовываем C:/TelinkSDK/bin в C:/TelinkSDK/bin1, например.
3. Копируем папку bin из комплекта cygwin64 в C:/TelinkSDK/ (т.е. заменяем штутную папку bin на новую, от cygwin64)
4. Запускаем компиляцию, будут ошибки "не найдена dll такая-то". Из сохраненной bin1 копируем в новую подменную bin нужные dll.
 

pvvx

Активный участник сообщества
Файл может быть любой. Теперь, чтобы откомпилировать, приходится жать кнопку компиляции последовательно 4-5 раз. Каждый раз он компилирует следующий кусок и вылетает с одной из этих ошибок. С пятого-шестого подхода компилирует всё.
Компиляция в многопотоке (с опцией -jn )?
 

aloika

Active member
Более-менее разобрался с этим.

Суть беды описана здесь. Но решения там нет, мне ничего не помогло.

Я делал так:

1. Ставим cygwin64
2. Переименовываем C:/TelinkSDK/bin в C:/TelinkSDK/bin1, например.
3. Копируем папку bin из комплекта cygwin64 в C:/TelinkSDK/ (т.е. заменяем штутную папку bin на новую, от cygwin64)
4. Запускаем компиляцию, будут ошибки "не найдена dll такая-то". Из сохраненной bin1 копируем в новую подменную bin нужные dll.
Это решило проблему (не знаю, надолго ли).
 
Сверху Снизу