• Система автоматизации с открытым исходным кодом на базе 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, с заменой
 
Сверху Снизу