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

UrikEEE

New member
Скачал и установил Telink_SDK. Также скачал отсюда SDK с примерами для 825X. Создаю новый проект, затягиваю в него папку из SDK с примером "blink". Начинаю компилировать проект - валится ошибка:

make all
Building target: Blink.elf
Invoking: TC32 C Linker
tc32-elf-ld -T ../boot.link -o"Blink.elf" ./main.o
C:\TelinkSDK\opt\tc32\bin\tc32-elf-ld.exe: cannot open linker script file ../boot.link: No such file or directory

Я пока так и не понял, какого файла или папки не может найти линкер?
../boot.link - где должен быть? в файле проекта (у меня щас проект лежит в папке D:\Projects\Telink\Blink) или в папке Telink IDE (C:\TelinkSDK\) ?
Понимаю, что это детские вопросы, но я только начал делать первые шаги в освоении TLSR и их IDE...
 

pvvx

Активный участник сообщества

UrikEEE

New member
Сегодня удалось продолжить (танцы с бубнами) попытки с компиляцией примера "blink".

Скачал и развернул упрощенную среду разработки для windows с сайта производителя модулей TB. В папку "D:\TB" скопировал папку "tc32", которая была в архиве скачанной IDE.
Затем в эту же папку "D:\TB" скопировал папку "Telink_825X_SDK-master" из этого архива. После чего запустил Git Bash и далее в нем выполнил команды:
Код:
cd D:/TB/SDK/Telink_825X_SDK-master/example/blink
make
Поначалу при выполнении make валилась такая ошибка:
*** fatal error - cygheap base mismatch detected - 0x6131F400/0xC7F400.
This problem is probably due to using incompatible versions of the cygwin DLL.
Search for cygwin1.dll using the Windows Start->Find/Search facility and delete all but the most recent version.
The most recent version *should* reside in x:\cygwin\bin, where 'x' is the drive on which you have installed the cygwin distribution.
Rebooting is also suggested if you are unable to find another cygwin DLL.

Скачал с сайта https://cygwin.com утилиту setup-x86_64.exe и затем с ее помощью загрузил cygwin.
После чего команда make стала выполняться и пример "blink" скомпилировался:
mingw64.png

Уже что-то. Конечно, куда интересней работать в полноценной IDE, в которой сразу можно редактировать и компилировать. Но я уже и такому рад:)

Самое смешное, что подобная консольная оболочка MINGW64 есть и в Telink IDE. Для нее создается при установке ярлык "Telink-semi Console 1.3" и при запуске открывается консольное окно MINGW32. Возможно, я перемудрил, установив Telink IDE в папку "C:\TelinkSDK", а свой проект создал в папке "D:\Projects\Telink\Blink". Буду потихоньку ковырять дальше, как упрощенное IDE (надо изучать возможности bash), так и Telink IDE.
 

pvvx

Активный участник сообщества
Самое смешное, что подобная консольная оболочка MINGW64 есть и в Telink IDE. Для нее создается при установке ярлык "Telink-semi Console 1.3" и при запуске открывается консольное окно MINGW32. Возможно, я перемудрил, установив Telink IDE в папку "C:\TelinkSDK", а свой проект создал в папке "D:\Projects\Telink\Blink". Буду потихоньку ковырять дальше, как упрощенное IDE (надо изучать возможности bash), так и Telink IDE.
Да, перемудрили.
Telink IDE имеет всё необходимое для сборки проектов. Именно по этому я не пользуюсь альтернативными вариантами сборки от Ai-Thinker.
SDK от Ai-Thinker устанавливается и в Telink IDE, но необходимо изменять makefile и вариант сборки в Eclipse.
SDK от Ai-Thinker имеет отличия от SDK Telink только в сборочных makefile-s.
Обычно доустанавливается только python3.
 

pvvx

Активный участник сообщества
И не забудьте, что SDK от Ai-Thinker является всего одним вариантом из множества от Telink (поддерживает только один вариант протокола BLE), и не обновляется и не включает патчи безопасности...
И не содержит программы для создания подписи с правильной контрольной суммы для обновления по воздуху...
 

pvvx

Активный участник сообщества
А так-же:
  • Cодержит блок пустой области RAM в десятки килобайт в объеме кода прошивки (бинарного файла) в Flash
  • Включает лишний, никогда не исполняемый код в прошивку.
  • Имеет неоптимальный код cstartup_825x.s
И ещё много по мелочи...
 

UrikEEE

New member
Продолжил мучать Telink IDE с их же SDK Bluetooth LE Single Connection V3.4.2.0. Создал в Telink IDE (установлен в папке "C:\TelinkSDK") новый проект во вложенной папке "\proj\b85_ble_sdk\" и затем импортировал туда содержимое этого SDK. В нем в папке "vendor" размещено несколько вложенных папок с разными примерами. Ну и начал собирать этот проект. Стали валится многочисленные ошибки о некорректных путях в #include, пришлось проверять пути и корректировать их (в основном добавляя туда подстроку "../../"). Потратил на это несколько часов, но добился того, что ошибок не стало. Делал это на рабочем компе с win7 и надо сказать, что на нем Telink IDE ведет себя весьма глючно. Постоянно при сборке проекта валились сообщения об ошибках такого рода:
Код:
couldn't reserve space for cygwin's heap, win32 error 0
причем выскакивали они все время на разных местах. Гуглил и радовался результатам: типа, библиотека cygwin под windows весьма своеобразно работает с памятью и рекомендуют ... почаще перегружать комп)) Или еще часто вылетала ошибка запуска приложения sh.exe. Но иногда сборка проекта все-таки проходила без вышеописанных проблем и тогда (чаще всего) вылезала очередная ошибка (как правило в путях #include).

Я начал потихоньку удалять из папки "vendor" папки с примерами, в итоге оставил только папку "b85m_driver_test". Затем посыпались многочисленные ошибки о множественном определении функций в папке "drivers" (во вложенных папках 8258 и 8278). Ну я подумал-подумал и грохнул папку 8278 - ошибки пропали.

В итоге теперь при сборке проекта вылетает такая ошибка:
Telink_IDE.png

При этом строка 137 в файле boot.link - это последняя строка с закрывающей фигурной скобкой.

Сижу вот теперь, чешу репу... Может, я изначально выбрал неправильную тактику - затянуть в новый чистый проект целиком SDK, в котором поначалу (в примерах в папке "vendor") было много файлов с функцией main().
 

aloika

Active member
Сижу вот теперь, чешу репу...
Непонятно, зачем так мучаться. Есть примеры. Они компилируются? Бинарник собирается? Если да, то сделайте свою конфигурацию на основе имеющейся, скопируйте туда наиболее подходящий пример, проверьте, что ваша конфигурация собирается. А потом редактируйте этот пример до состояния, нужного вам.
 

pvvx

Активный участник сообщества
Код:
couldn't reserve space for cygwin's heap, win32 error 0
Эта беда в WIN возникла много лет назад и была исправлена в последующих версиях cygwin. Ору было много...
Но cygwin с тех времен никто уже не использует. Появились другие версии пакетов...
Т.е. вы замусорили свой копм древними версиями среды для поддержки Linux команд. Telink IDE тут не при чем - они ему не нужны.
 

pvvx

Активный участник сообщества
Может, я изначально выбрал неправильную тактику - затянуть в новый чистый проект целиком SDK, в котором поначалу (в примерах в папке "vendor") было много файлов с функцией main().
А это бяка всех SDK от Telink. Все примеры впихнуты в одну папку и трансляция нужного переключается в меню сборки Eclipse. При этом сама Eclipse не шарит, что там переключено и контекст по includ-ам не пашет... Но всё собирается без редактирования чего либо. Нужно только сделать экспорт SDK в Telink IDE и нажать "собрать".
С опытом работы в Eclipse с разными микроконтроллерами и SDK рекомендую изучить make и создавать свои makefile, а SDK в проект подключать ссылкой. У вас будет больше возможностей и упрощается выбор версий SDK и т.д. для каждого отдельного проекта, как и перенос проектов на другой комп и т.д...
 

aloika

Active member
Т.е. вы замусорили свой копм древними версиями среды для поддержки Linux команд. Telink IDE тут не при чем - они ему не нужны.
Этот старый cygwin в архиве SDK идет, комплектом. Вот, пришлось на новый заменить, чтобы работало. А как надо?

При этом сама Eclipse не шарит, что там переключено и контекст по includ-ам не пашет...
Пашет, если в настройках С/С++ General/Indexer правильно включить там.
 

pvvx

Активный участник сообщества
Этот старый cygwin в архиве SDK идет, комплектом. Вот, пришлось на новый заменить, чтобы работало. А как надо?
В комплекте нет пакета cygwin. Там всего пару утилит и у них этой беды нет.
Пашет, если в настройках С/С++ General/Indexer правильно включить там.
Оно ничего хорошего не переключает :)
Всё равно все примеры будут отображены как исключенные из трансляции, но будет толпа main() и прочих дублей в Open Declaration и куча варнингов у анализатора Eclipse. Т.е. смысл применения Eclipse теряется - проще тогда уж тупым редактором :)
 

pvvx

Активный участник сообщества
Этот старый cygwin в архиве SDK идет, комплектом. Вот, пришлось на новый заменить, чтобы работало. А как надо?
Во первых там не cygwin.
И во вторых:
Не следует смешивать данные пакеты:
  • Cygwin предлагает эмуляцию POSIX поверх окон
  • msys пытался упростить Cygwin, но устарел с 2010 года.
  • msysGit - разрешено использование Git до 1.9.4 в Windows (может называться git-for-windows-1.X ) на основе старой версии msys.
  • msys2 - упрощенный Cygwin, созданный на его основе, с изменениями из msys и синхронизированный с функциями Cygwin, интегрированный с Pacman
  • MinGW - начальный MinGW, заброшен с 2010 г.
  • MinGW-w64 - более быстрая и лучшая интеграция с Windows без POSIX
  • git-for-windows-2.x - предлагает Git из 2.X для Windows с использованием MinGW-64 , MinGW-32, а когда это невозможно, с откатом на msys2
(список из https://stackoverflow.com/questions...ysgit-related-to-each-other/53572628#53572628 )

В третьих - на AMD64 поведение отличается. На WinXP, Win7 - фигово и надо Win10 мин.
 

UrikEEE

New member
Вчера подпаял к модулю TB-03F-KIT проводок с кнопкой на замыкание так, как было указано здесь:
Замыкаем проводом с коннектором папа-мама
и сегодня попробовал прочитать в файл текущую прошивку из модуля командой:
TlsrComProg.py -p COM5 -b 115200 rf 0 0x80000 D:\fw.bin
но в ответ получаю сообщение: Error get version floader!
Причем не важно, в какой момент я замыкаю кнопкой пин 2 (TXD) чипа CH340 с пином SWS модуля.
Начал вставлять в программный код TlsrComProg.py вывод отладочных сообщений. Если кнопку замыкаю в момент активации (600мс), то модуль в ответ на запрос версии floader ничего не отвечает (число прочитанных байт равно 0). А если кнопку вообще не замыкать, то модуль отвечает 10 байт: 6e 6f 20 30 41 20 30 44 20 0d

А еще я смотрю эту (верхнюю) схему и вижу, что между пинами TXD и RXD модуля есть резистор 1K, в то время как проводок с кнопкой замыкает TXD и SWS. Может, все-таки надо подпаять еще и резистор?

Еще момент: я нормально читаю содержимое флеш-памяти модуля родной утилитой
Telink_Tools.py -p com5 0 255
но эта утилита читает не более 255 байт за раз и отображает их в консольном окне, а не пишет в файл. Понятно, что несложно ее допилить, но если есть уже готовый инструмент...
 

pvvx

Активный участник сообщества
Вчера подпаял к модулю TB-03F-KIT проводок с кнопкой на замыкание так, как было указано здесь:
...
но в ответ получаю сообщение: Error get version floader!
Наверно вы забыли нажать reset, в момент активации.
Работающее ПО может перепрограммировать вывод SWS на GPIO OUT или CPU может спать.
Для таких случаев задается время активации на секунды...
 

pvvx

Активный участник сообщества
Еще момент: я нормально читаю содержимое флеш-памяти модуля родной утилитой
Telink_Tools.py -p com5 0 255
но эта утилита читает не более 255 байт за раз и отображает их в консольном окне, а не пишет в файл. Понятно, что несложно ее допилить, но если есть уже готовый инструмент...
Считать прошивку у неизвестного TLSR825x, но имеющего Telink OTA, можно и так:
https://github.com/pvvx/TLSR825x_OTA_Flash_Hacker
Этим и считана прошивка CGPR1, а так-же дает возможность считать bindkey у всех mija совместимых или перевести CGPR1 в начальный режим работы :)
И что вам мешает использовать OTA для программирования? (Меня не устраивает скорость прошивки - через аппаратный программатор это обычно сводится к десятке секунд, как и чтение всей Flash памяти)
 

UrikEEE

New member
Наверно вы забыли нажать reset, в момент активации.
Да, не нажимал. Увеличил время активации до 4 секунд, запускаю:
TlsrComProg.py -p COM5 -b 115200 -t 4000 rf 0 0x80000 D:\fw.bin
затем кратковременно на плате нажимаю на кнопку RST и затем на свою кнопку, замыкающую TXD и SWS.
Результат прежний - сообщение Error get version floader!

Хотя я смотрю программный код TlsrComProg.py и вижу там установку в 0 модемного сигнала RTS (если задано время активации > 0). А пин RTS через резистор 4.7K подключен к пину RESET модуля (если верить схеме модуля TB-03-KIT). По идее, и кнопку сброса нажимать не надо.
 
Сверху Снизу