• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

CH582M (СH581, CH582, СH583)

pvvx

Активный участник сообщества
И прочтите другие статейки - упомянутые SoC от WCH полные аутсайдеры по всему, как и было предсказано: народ выбирает самый худший вариант, т.к. можно постоянно писать статейки "как лепить из г..". На нормальные чипы статейки не пишут - их просто используют незаморачиваясь.
 

pvvx

Активный участник сообщества
Последний позавчерашний пример - открыл список встроенных контроллеров в BL702... вижу там есть I2S в PDF. Ну и прилепил к нему AUDIO ADC на 24 бита 2 канала на 100 ksps и в USB через 3-х разовую буферизацию (ну лень было оптимизировать). И всё Ок - т.к. оно тянет изначально в USB2.0 FS полные 12 Мбит/c в любые стороны, а поток 24-х бит 2 канала - это всего 600 килобайт + ещё 20% заголовков (так вышло для совместимости внешнего ПО) и в тупой USB-COM. Нашел ошибку в SDK, написал в репо, но оказалось что SDK не поддерживает I2S....
А тут CH579 не тянет в Ethernet тот-же поток. С USB у CH58x будут те-же проблемы, что описывает автор "лапши из пачкордов" для излюбленного толпой чипа? (интересно, почему это простейшая инфа только через десятилетия до таких авторов доходит?)
 

pvvx

Активный участник сообщества
Ну и теперь главный вопрос пишущему: "Друзья, я давно занимаюсь BLE." - вышло ли на CH582M с WCH-Link добиться хотя-бы 15200 BAUD на BLE при совместимости с BT4.2?
 

pecherskih

Member
Там и написано - никакого JTAG, а отладка по считыванию переменных только на ходу, без остановки CPU! Научитесь читать внимательно, или только писать переводы PDF умеете?
Вам обязательно надо чтобы из платы торчали пины с подписями SWDIO? А SWM (Telink Swire Master) c SWS (Telink Swire Slave) не катит? :)
Ну может я чего то не понимаю, так объясните. В статье первый раздел так и называется 1. Включаем JTAG Для этого товарищ использует WCHISPTool. А что бы использовать PrintF Debug включать совсем не обязательно. А проблема протокола SWS, как вы сами писали - отсутствие точек остановки. И как следствие не умении ходить по коду. Как то так. Но я никого не агитирую, каждому своё :) Хорошего вечера всем :)
 

pvvx

Активный участник сообщества
И ещё раз напомнить чем отличается WCH-Link от одного провода SWM<->SWS у TLSR чипов. Но могу только на своих примерах, т.к. не пользуюсь "народными":
Вот надо поглядеть сколько примерно чип находится в sleep, запускаю чтение любого адреса в нем и период сего действия (0x6bc - это регистр PC счетчика):
python3 TlsrPgm.py -pCOM11 -z10 dc 0x6bc 10000
1674743524666.png
Получаю, что цикл рекламы примерно 2.5 сек и иногда SoC читает датчик и не спит глубоко (0.01 сек активности в suspend).
Или вдрух мне нужно прочитать что там у чипа в памяти (или регистрах и т.д., пусть по адресу 0x840000, адрес нужного можно взять из лога сборки), когда он активен и не спит и не останавливая CPU:
Код:
python3 TlsrPgm.py -pCOM11 -z10 ds 0x840000 16
=======================================================
TLSR82xx TlsrPgm version 14.01.23
-------------------------------------------------------
Open COM11, 230400 bit/s... ok
PGM: ChipID: 0x5327 (TLSR8269), ver: 0.0.0.2
swdiv 5, addrlen 3, swbuf [5a 00 06 02 00 05], pfr Off
SWire bit rate: 1.2800 Mbits/s
=== PreProcess ========================================
CPU sleep? (0.810 sec)
CPU PC=0x00005e04
840000: 26 80 00 00 a5 81 5d 02 4b 4e 4c 54 da 05 88 00
Можно и изменить какой байт/бит на ходу - очень удобно при реверсе неописанных регистров... Накалякал нужное на питоне (можно и bat файле :) ) и вперед тестить что меняет битик в ....
Аналогично работает и J-Link RTT...
Более от отладчиков ничего не требуется, т.к. все современные интерфейсы время-зависимые и любая "точка останова" накроет весь процесс и убьет ваше время на итерации перезапуска процессов и разглядывание незнакомых битиков... :p
 

pvvx

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

pvvx

Активный участник сообщества
@pecherskih - ещё написать? :)
Ну как, насмотрелись неандертальцев, которые ещё вставляют в код GPIO Output и тыкают ослом, вместо вывода счетчика в тактах CPU в RTT? :)
 

sed_alex

New member
Более от отладчиков ничего не требуется, т.к. все современные интерфейсы время-зависимые и любая "точка останова" накроет весь процесс и убьет ваше время на итерации перезапуска процессов и разглядывание незнакомых битиков... :p
Какое интересное у Вас мнение на счет отладчиков.
Свет клином на BLE вообще то не сошелся, и точка останова - весьма полезная штука, при настройке многих участков кода.

То что WCH накуролесили в файлах debug.c и debug.h - было выпилено первым делом, ибо использовать Систик исключительно для Delay - это так себе решение.
 

aloika

Active member
А вот расскажите мне (вечно начинающему и ни на что не претендующему) - как вы отлаживаете? Я по-простому - назначаю какую-нибудь ногу uart-tx, и вывожу туда что хочу вывести. Но минус в том, что нормальных программ для разглядывания потока из UART как-то и нет. Я пользуюсь Terminal by Br@y++, как наиболее вменяемый из того, что вообще есть. А больше особо и нет ничего.

Вот хочу я, например, посмотреть, что принимает АЦП. В терминале можно вывести в виде графика, но только 8-битные данные и только беззнаковые. Приходится прибавлять 0x80 к значениям (т.к. дифференциальный вход), чтобы ноль посередине графика был. Если АЦП больше 8 бит - то всё, так просто не получится. Смотрю только младшие 8 бит тогда.

Поделитесь опытом - чем вы пользуетесь? Сейчас мне актуально для tlsr.
 

pecherskih

Member
@pecherskih - ещё написать? :)
Ну как, насмотрелись неандертальцев, которые ещё вставляют в код GPIO Output и тыкают ослом, вместо вывода счетчика в тактах CPU в RTT? :)
Нет, спасибо, можно не продолжать. Вы всё обо одном и том же. Никто же ведь с вами не спорит, что точка останова разрушает BLE процесс. Зачем это лишний раз доказывать. Но я придерживаюсь того же мнения что и sed_alex : "точка останова - весьма полезная штука, при настройке многих участков кода ". Не хотите использовать - не нужно, делайте как вам удобнее. Что касается вопроса aloika, то ничего нового посоветовать не могу. Я то же через Терминал отлаживаюсь. В особенных случаях для визуального отображения использую Builder C++ c его TChart. В Builder-е можно разные алгоритмы приема данных из UART-а реализовать, а потом в красивом виде вывести. Сам Builder конечно не ахти, но для таких профанов в GUI как я - вполне подходит. Всё просто и быстро.
 

pvvx

Активный участник сообщества
Да, прикольно. Что же, получается - вспоминать Делфи, самому писать... что ж никто не написал что-то более-менее универсальное-то...
Давно уже сделан API в Chrome для работы с USB-UART. А уж js Chart там много разных. И не только Chart.
Для Arduino где-то валяется отображение в графике чисел, посылаемых в UART и с конвертированием html в виде приложения...
С BLE ещё проще - гоните отладку прямо в BLE.
И ещё есть Питон.
 

pvvx

Активный участник сообщества
Нет, спасибо, можно не продолжать. Вы всё обо одном и том же. Никто же ведь с вами не спорит, что точка останова разрушает BLE процесс. Зачем это лишний раз доказывать. Но я придерживаюсь того же мнения что и sed_alex : "точка останова - весьма полезная штука, при настройке многих участков кода ". Не хотите использовать - не нужно, делайте как вам удобнее.
Для точки останова необходимо модифицировать исходники, т.е. создавать специальную версию программы. Отключать всё.
Это "удобно" исключительно в одном случае - отладки программы мигающего светодиода с задержкой на циклах while() CPU. Или для "Hello World!".
В остальных случаях уже не годится.
Сравните время - написать в исходник "printf("x=%08x", x) и загрузить и время пайки JTAG c загрузкой и переключением в режим отладки, да с поиском переменной.
 

aloika

Active member
Давно уже сделан API в Chrome для работы с USB-UART. А уж js Chart там много разных. И не только Chart.
Для Arduino где-то валяется отображение в графике чисел, посылаемых в UART и с конвертированием html в виде приложения...
С BLE ещё проще - гоните отладку прямо в BLE.
И ещё есть Питон.
Понятно, что полуфабрикатов много каких-то. Хотелось бы готовое решение без бубна. Напрямую в BLE я делал, с вашей подачи. Да, удобно, но... не очень. Т.к. устройство может быть подключено к чему-то другому по BLE, или я, например, могу не хотеть сильно модифицировать исходник (заводить там отдельную характеристику для отладки) и т.д.
 

pvvx

Активный участник сообщества
Производитель обычно выпускает отладочные средства. Для Telink оно всё представлено в виде BDT. Другие производители, кто помелочнее и жаднее, юзают чужое - всякие примочки/интерфейсы для JTAG из open-source.
SEGGER не удалось возглавить стандарт, хотя он пытался... Опять подвела жадность.
 

pvvx

Активный участник сообщества
Не хотите использовать - не нужно, делайте как вам удобнее.
А с Jtag не выйдет как удобнее.
Имеющиеся варианты ограничены применением dll от SEGGER для быстрого описания отладочных средств на питоне или чем вам удобнее.
В итоге Jtag в пролете, т.к. проприетарщина.
 

sed_alex

New member
Для точки останова необходимо модифицировать исходники, т.е. создавать специальную версию программы. Отключать всё.
Это "удобно" исключительно в одном случае - отладки программы мигающего светодиода с задержкой на циклах while() CPU. Или для "Hello World!".
В остальных случаях уже не годится.
Сравните время - написать в исходник "printf("x=%08x", x) и загрузить и время пайки JTAG c загрузкой и переключением в режим отладки, да с поиском переменной.
Какую специальную версию программы ?
Любой GCC, ARMC да даже мертворожденное убожество от C-Sky (W806 - которое вы так хвалили) при компиляции в настройках компилятора просто ставим поддержку отладки и, спокойно отлаживаем, отладили выбираем Release в соответсвующих настройках.
Если нужно смотреть процесс энумерации USB или начальный обмент BLE - покупаем анализатор и опять же спокойно смотрим какие пакеты и в какой последовательности идут - анализатор разбирает пакеты, ставит метки времени и даже красиво подсвечивает места с ошибкой. Вы же предлагаете шарашить поток в порт и потом разбирать портянку, не ну я понимаю гуру любят нестандартные методы :) Касаемо отладчиков - Сеггер де факто и по сей день является лучшим отладчиком и это признают большинство производителей, ну а то что не все Китайцы смогли с ними договорится, ну это как бы не проблема Сеггера а проблема Китайцев (и нас как пользователей китайских камней).
 

pvvx

Активный участник сообщества
Какую специальную версию программы ?
Любой GCC, ARMC да даже мертворожденное убожество от C-Sky (W806 - которое вы так хвалили) при компиляции в настройках компилятора просто ставим поддержку отладки и, спокойно отлаживаем, отладили выбираем Release в соответсвующих настройках.
Если нужно смотреть процесс энумерации USB или начальный обмент BLE - покупаем анализатор и опять же спокойно смотрим какие пакеты и в какой последовательности идут - анализатор разбирает пакеты, ставит метки времени и даже красиво подсвечивает места с ошибкой. Вы же предлагаете шарашить поток в порт и потом разбирать портянку, не ну я понимаю гуру любят нестандартные методы :) Касаемо отладчиков - Сеггер де факто и по сей день является лучшим отладчиком и это признают большинство производителей, ну а то что не все Китайцы смогли с ними договорится, ну это как бы не проблема Сеггера а проблема Китайцев (и нас как пользователей китайских камней).
Вы о чем? Об снифере BLE в Wireshark? Действительно - "шарашить поток в порт и потом разбирать портянку" :)
Или вас смущает нормальный отладочный лог, принятый везде при нормальном программировании?
Обычно он выводится текстом понятным для человека, а не в виде табличек битов в вашем любимом отладчике.
"ну это как бы не проблема Сеггера а проблема Китайцев" а не о этом ли я написал?
У вас плохо со всем связанным с электроникой и программированием. Наверно только вчера взяли первый чип в руки... Потыркаетесь и поймете.
 
Сверху Снизу