• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

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

Помнится в JDY-10 можно было выводить отладочные сообщения через USB-COM
Не надо подсказывать сам разобрался. Точнее нашел в коде прошивки термометра. :)
находим папку ATC_MiThermometer\SDK\components\application\print и переносим ее содержимое в аналогичную папку нашего проекта.
аналогичным образом копируем в наш проект файл ATC_MiThermometer\src\uprintf.mk
в makefile, рядом с -include $(PROJECT_PATH)/drivers_8258.mk прописываем
-include $(PROJECT_PATH)/uprintf.mk

Затем идем в наш app_config.h и добавляем следующие строки

#define UART_PRINT_DEBUG_ENABLE 1 // =1 use u_printf() (PA7/SWS), source: SDK/components/application/print/u_printf.c
#if UART_PRINT_DEBUG_ENABLE
#define PRINT_BAUD_RATE 1500000 // real 1000000
#define DEBUG_INFO_TX_PIN GPIO_PA7 // SWS
#define PA7_DATA_OUT 1
#define PA7_OUTPUT_ENABLE 1
#define PULL_WAKEUP_SRC_PA7 PM_PIN_PULLUP_1M
#define PA7_FUNC AS_GPIO
#endif // UART_PRINT_DEBUG_ENABLE

После этого можем пользоваться в коде командой printf. и проект будет собираться без ошибок. А вот будет ли это работать я еще не успел проверить :)
 

pvvx

Активный участник сообщества
Проверил - не работает. :(
Вчера запускал этот "принтф"... Врет по скорости при более 1 мегабита, а но работает.
Если уж в штатный UART гнать - то по DMA... Ещё есть свободный SWM и его можно на другой SWS пустить - там 2 мегабита и синхронизация лучше UART.
 

pvvx

Активный участник сообщества
Именно в AdScannerTrg?
Именно - почему-то из него слепил master устройство для теста, оставив и возможность сборки AdScannerTrg :)
Так было проще...

Вроде ничего... кроме "Может перемычку SWS-Rxd отпаять надо? "
 

pvvx

Активный участник сообщества
@GermanIvanov - Pin2 - это TXD, Output, UART Data Transmit output.

Он пересилит GPIO TLSR825x. У некоторых GPIO есть биты повышения выходного тока - включите - будет лучше греться :)
 
Он пересилит GPIO TLSR825x.
Ага, значит буду думать дальше.
Еще тут вопрос возник, а что больше всего жрет батарейку во время работы AdScannerTrg ?
Я предполагаю что режим сканирования. Достаточно будет для его отключения следующих правок, или еще что то отключить надо?

C:
// app.c

void user_init_normal(void) {
    check_battery(MIN_VBAT_MV); // 2.2V
    random_generator_init(); //must
    ...
    init_ble();
#if    SCAN_SERVICE    // отключаем сканирование
    start_adv_scanning();
#endif
    ...
}

_attribute_ram_code_ void main_loop(void) {
    blt_sdk_main_loop();
    ...
    #if SCAN_SERVICE // отключаем сканирование
        scan_task();
    #endif
    ...   
}
Думаю сделать единый код как для "маяка", так и для "радара", а впоследствии сделать для маяка запрос окружения по внешней команде.
Что еще можно отключать из соображений экономии энергии, ибо "маяк" планируется питать от CR2032.
 

pvvx

Активный участник сообщества
Там, в main_loop() вообще не включено энергосбережение( bls_pm_setSuspendMask(SUSPEND_DISABLE); ), т.к. ведется постоянный прием.
А надо что-то типа этого: bls_pm_setSuspendMask (SUSPEND_ADV | DEEPSLEEP_RETENTION_ADV | SUSPEND_CONN | DEEPSLEEP_RETENTION_CONN);
 
Приехала новая порция чипов, сел их перешивать и опс. https://pvvx.github.io/ATC_MiThermometer/USBCOMFlashTx.html не работает. Вроде все проходит без ошибок но прошивка в чипе не меняется. Попробовал на нескольких платах эффект сохраняется. Может Chrome неудачно обновился?
 

pvvx

Активный участник сообщества
Добавил последнюю версию прошивки для Telink EVK на E104-BT10-G/N module (TLSR8269). EVK - это плата отладчика и программатора от Telink с программным комплектом BDT на сайте Telink. В последних версиях добавили OpenOCD...

EVK для BDT можно слепить на модуле c TLSR8269 и припаять провода, а можно купить готовый EVK за 3 т.р. (в нем TLSR8266 многоножка)...
 

Slacky

Member
Пока модуля нет, но вопрос уже есть :))

Скачал сингл SDK и IDE от Telink. Запустил. Ну bc нет, это ладно. Но нет директории utils

Код:
make --no-print-directory post-build
"C:\Users\lizunkov.f.a\eclipse-workspace-telink\b85m_ble_single_connection_sdk/tl_check_fw.sh"   825x_driver_test   b85m_ble_single_connection_sdk
*****************************************************
this is post build!! current configure is :825x_driver_test
OS from uname is: MINGW32_NT-6.1
825x_driver_test
b85m_ble_single_connection_sdk
copy from `b85m_ble_single_connection_sdk.elf' [elf32-littletc32] to `825x_driver_test.bin' [binary]
c:\Users\lizunkov.f.a\python\python.exe: can't open file '../utils/memap/memap.py': [Errno 2] No such file or directory
c:\Users\lizunkov.f.a\python\python.exe: can't open file '../utils/memap/memap.py': [Errno 2] No such file or directory
Windows OS
check_fw in Windows...
output done!

Где взять эту memap.py?
 

pvvx

Активный участник сообщества
Где взять эту memap.py?
Оно чисто информационное и его не положили в данный SDK. Забыли наверно или нужен полный набор с NDA...
Видимо пытались накалякать подобие моей утилиты TlsrMemInfo.py (но у меня используется другой загрузчик и разметка ld файла...)
Кароче memap.py - это глупость - бинарник вам выдает и ладно :) Удалите из tl_check_fw.sh.
И tl_check_fw.sh с 'сикретным' tl_check_fw2.exe давно заменили на tl_check_fw.py

Цель tl_check_fw - прилепить контрольную сумму для OTA бинарника.
 

Slacky

Member
Оно чисто информационное и его не положили в данный SDK.
Ок. Но воспросы остались. По SDK. От Ai-Thinker более мне понятный. Но Вы его критикуете. Я бегло пробежался по ошибкам и варнингам. И нашел некоторое несоответствие.

Напримет от Ai-Thinker в файле u_printf.c вот так

C:
int u_printf(const char *format, ...) {
    static char my_printf_buff[1024] = { 0 };
    char *out = &my_printf_buff[0];

    extern void puts(char* s);
    
    va_list args;
    va_start(args, format );
    print(&out, format, args);
    puts(my_printf_buff);
}
А от TeLink

C:
int u_printf(const char *format, ...) {
    int ret;
    va_list args;

    va_start( args, format );
    ret = print(0, format, args);
    va_end( args );

    return ret;
}
А вот полез к Вам на github, там вообще по другому.

C:
int u_printf(const char *format, ...) {
    static char my_printf_buff[1024] = { 0 };
    char *out = &my_printf_buff[0];

    extern int puts(char* s);
    
    va_list args;
    va_start(args, format );
    print(&out, format, args);
    return puts(my_printf_buff);
}
И еще, у обоих sdk в ll.h

C:
my_fifo_t            blt_rxfifo;
u8                    blt_rxfifo_b[];

my_fifo_t            blt_txfifo;
u8                    blt_txfifo_b[];
А у Вас

C:
my_fifo_t            blt_rxfifo;
u8                    blt_rxfifo_b[64 * 8];

my_fifo_t            blt_txfifo;
u8                    blt_txfifo_b[40 * 16];
Вопрос - какую все-таки SDK стоит выбрать?
 

pvvx

Активный участник сообщества
Напримет от Ai-Thinker в файле u_printf.c вот так
Объявлен return int, но его нет :)
И данный SDK не для Eclipse... И он уже старый.
А вот полез к Вам на github, там вообще по другому.
Я поправил как мне удобнее и чтобы не сыпал warning-ами.
Вопрос - какую все-таки SDK стоит выбрать?
Который подходит для проекта. У Telink все SDK разные и на разные случаи.
Процессор то не шустрый и ресурсов у него не много, по тому и разделение на варианты.
Исходников либ BLE или ZIgbee стека не дают...
И все SDK выглядят как свалка примеров, совершенно не приспособленных для работы со своим проектом. По этому приходится менять компоновку и make...
Для BLE и прочих требуется хорошая оптимизация кода, т.к. время исполнения = жор от батарейки.
 

pvvx

Активный участник сообщества
И какой нафиг printf() ?

В BLE и ZigBee текстовых сообщений не передается.

Имеющееся подобие printf() вставлено по просьбе трудящихся (по запросу в issue github) не освоивших разные методы отладки и разбирающихся только в концепции Arduino. Но это им не поможет, т.к. концепция работы BLE устройств далека от алгоритмов и принципов построения программ в Arduino.

Вывод printf() в UART или подобие – это микросекунды. А проц. с циклом прием-передачи рекламы или при связи просыпается на 3..4 мс и добавка к каждому просыпанию printf() равна увеличению среднего потребления в десятки процентов…
 

Slacky

Member
Который подходит для проекта. У Telink все SDK разные и на разные случаи.
Процессор то не шустрый и ресурсов у него не много, по тому и разделение на варианты.
Что хочу попробовать - маяк, который ведет счет на паре gpio, сохраняет данные в память и транслирует их в эфир, с возможностью подключиться с вешнего устройства для первичной настройки. Какая SDK лучше отвечает моим запросам?
 

Slacky

Member
А еще не очень понятно что с патчами делать, например в сингл от TeLink их три и в каждом есть liblt_825x.a и он в каждом имеет разный размер ...
 

pvvx

Активный участник сообщества
маяк, который ведет счет на паре gpio, сохраняет данные в память и транслирует их в эфир, с возможностью подключиться с вешнего устройства для первичной настройки.
Эти функции уже встроены в прошивку типа для LYWSD03MMC.
Там есть счетчик импульсов от геркона или открытия-закрытия дверей/окон... И события со счетчиком передаются в формате HA-BLE.
А еще не очень понятно что с патчами делать, например в сингл от TeLink их три и в каждом есть liblt_825x.a и он в каждом имеет разный размер ...
Скопировать в SDK, с заменой
 
Сверху Снизу