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

CH582M (СH581, CH582, СH583)

pvvx

Активный участник сообщества
Но это надо не сюда плакать, каким-то редким прохожим, а идти прямо к начальству.
“Нет, я не плачу и не рыдаю,” … ( Песня Остапа Бендера, 1977)
Мне до их git пофигу - с CH582/592 я просто развлекаюсь - пытаюсь выжать из этого чипа максимум, а там на это ничего в ПО не рассчитано.
Китайцы не будут переписывать весь BLE стек и TMOS :)
И давно есть чипы с аналогичным построением BLE стека от PHY. Там всё аналогично.

По документации у CH570 нет BLE, но есть 2.4G беспроводной передачи. Но "регистры закрыты от простого люда". Так мне ответили на обращение в письме их официальные представители. А "пощупать" хочется за регистры беспроводную связь😅
Посмотрите там:

biemster хотел копаться с CH570 и обещал накидать в помощь указанному скоплению WCH.
 

pvvx

Активный участник сообщества
В CH582/592 и так уже 150 килобайт патча BLE стека из ROM :) OTA уже со скрипом лезет в объем встроенной Flash.
У PHY накидываемый во Flash "патч" ошибок ROM в два раза меньше :)
 

pvvx

Активный участник сообщества
Накатать им в issue на git про эту проблему. А то они думают раз все молчат то и проблем с их кодом не существует. Один только pvvx эту проблему нашёл на весь китай. Это не удивительно, чипом мало кто интересуется, хоть и CH5xx несколько лет в релизе, и али им завален за копейки. А 582F так вообще меньше доллара за дев боард. Но очень скудно про эти бле статей и видео в интернете.
Всё познается в сравнении – у Telink (TLSR825x) весь код и данные BLE стека 5.0 с программой пользователя влезает в RAM (64 килобайта). При этом CPU полный тормоз из-за простейшей упрошенной XIP к Flash и CLK CPU в 32 MHz и если надо что-то быстро и много – то можно всё закатать в RAM. А кэш для Flash всего килобайт и размещается в области RAM, как и все регистры чипа. Всё в те-же 64 кило. И для уменьшения потребления частоту CPU желательно ставить ниже 24 MHz. И в ROM чипа никаких BLE нет. Но он запросто гонит потоки BLE больше чем любой чип WCH .

И какой смысл писать о мелких ошибках в софте WCH, если там всё сплошная ошибка?

Это не удивительно, чипом мало кто интересуется,
Да многие интересуются и делают разные поделки-проделки, это только тут тишина....
А WCH шлепает новые чипы и постоянно что-то меняет. Возможно, что про CH582/592 они уже забыли... В серийном производстве ширпотребу эти чипы пока не замечены, сплавляют старый хлам через али...
 

pvvx

Активный участник сообщества
И вообще самое смешное и в тоже время дурное – это описывать ошибки в закрытых либах в git issue оперируя кухонными понятиями, тысячами слов о чем-то вокруг да около, вместо того, чтобы указать в какой строке кода исходников ошибка и как исправить…
WCH не хотят получить качественный код и продукт, по этому всё закрыто - типа стесняются :)
 

pvvx

Активный участник сообщества
С завышенной ценой.
преобразователь USB клавиатуры в Bluetooth клавиатуру.
Кто вам сказал что это Bluetooth?
По виду адаптера это 2.4ГГц с проприетарным протоколом.
А кто мне сделает такой же?
Вот - возьмите, полностью готовое - https://aliexpress.ru/item/1005005507061010.html
Сколько денег надо?
Там хотят
1758484607506.png
 

dzanis

Member
Т.е., при связи с Windows, и адаптеру с BT5.0+, при максимуме размера MTU для WCH, передача идет до 5-ти блоков. И минимальный интервал соединения равен 7.5 мс
Что за пример использовался? Если \EVT\EXAM\BLE\SpeedTest_Peripheral то я там ничего не понял. Самое качественное что я видел, это библиотека h2zero/NimBLE-Arduino, но она для esp32.
Ну в общем это надувательство со скоростью я могу наказать через продавца. Пожалуюсь что мол скорости нету 2mbs как указано в описании а всего 0.08mbs. Что возмутительно медленно, письма в конвертах и то быстрее приходят. Могу ему сделать самое максимальное наказание по меркам али, это влепить одну звезду. Ну может это как-то повлияет на wch,если продавцам станут предъявлять клиенты. Спекулянты сами наконец-то пнут в wch , что мол чипы ваши медленнее черепах.
pvvx у тебя есть этот бенчмарк скорости?А то мне надо будет скоро отзыв оставлять,но нужны пруфы бенчмарка ble CH592F.
 

selevo

Member
С завышенной ценой.

Кто вам сказал что это Bluetooth?
По виду адаптера это 2.4ГГц с проприетарным протоколом.

Вот - возьмите, полностью готовое - https://aliexpress.ru/item/1005005507061010.html
Там хотят
Посмотреть вложение 14749
С завышенной ценой.

Кто вам сказал что это Bluetooth?
По виду адаптера это 2.4ГГц с проприетарным протоколом.

Вот - возьмите, полностью готовое - https://aliexpress
Там ещё надо 570 руб заплатить за доставку в мой город.
С завышенной ценой.

Кто вам сказал что это Bluetooth?
По виду адаптера это 2.4ГГц с проприетарным протоколом.

Вот - возьмите, полностью готовое - https://aliexpress.ru/item/1005005507061010.html
Там хотят
Посмотреть вложение 14749
Ну если бы ты дружище не только посмотрел картинки А ещё бы почитал то не задавал бы таких глупых вопросов Ну раз ты уже не посмотрел то облажался,
я тебе сообщу что там написано о работе в двух режимах Bluetooth и через dongle

А клавиатура та отстойная, она только для Android так как кнопки F1-F12 нажимается только через FN, переключение профиля на Windows как заявлено FN +W не работает или не даёт нужный результат.
И на этой клавиатуре даже нельзя нажать Control alt delete
Так как во-первых чтобы нажать Delete надо нажать FN, а комбинация FN + Ctrl открывает виртуальную клавиатуру на Windows и на этом комбинация заканчивается.
И итоговая цена на неё с учётом доставки в мой город составляет 700 руб

Ты постарел и деградировал, стал часто лажать
 

pvvx

Активный участник сообщества
Бедному selevo первая попавшаяся на али клавиатура не понравилась :) :)
А это все надписи по "Коммер ческое изделие" , что имеются по ссылке переходника:
Описание
Первый пакет: набор «сделай сам»
Второй пакет: комплект «сделай сам» + аккумулятор
Пакет третий; Комплект «сделай сам» + беспроводной приемник
Четыре пакета: комплект «сделай сам» + беспроводной приемник + аккумулятор
Характеристики
Название бренда Нет
Происхождение Китай
Назначение DOOR
Тип крепления Вязание
Единица измерения штука/штуки
Количество 1

:p
 

pvvx

Активный участник сообщества
Что за пример использовался? Если \EVT\EXAM\BLE\SpeedTest_Peripheral то я там ничего не понял. Самое качественное что я видел, это библиотека h2zero/NimBLE-Arduino, но она для esp32.
pvvx у тебя есть этот бенчмарк скорости?А то мне надо будет скоро отзыв оставлять,но нужны пруфы бенчмарка ble CH592F.
Там всё не совсем просто.
Как и описывал - можно нагнать больше. Даже в том-же \EVT\EXAM\BLE\SpeedTest_Peripheral:
В зависимости от приемного адаптера имеем: если адаптер согласует работу c блоками BT5.0+, то передача, к примеру, идет по 247 байт. В итоге модифицированный SpeedTest_Peripheral в теории должен дать Max: 247*3/0.0075=98800 bytes/s, но выжимается до ~85000 bytes/s (247x3 блока в интервал 7.5..9 мс) при счете среднего за минуты передачи.
Если взять другой адаптер и он хочет кушать блоки только по 23 байта данных, тогда теор. мax: 23*12/0.0075=36800 bytes/s, а в реале ~30100 bytes/s (12x23)
Это без проверки что он там реально шлет, а чисто счетчик передачи байт.
И теория отличается от практики, т.к. в эфире при тесте есть помехи (у меня тут вблизи работает около ~50 BLE и ~30 Zigbee устройств (система с HA и 3-мя адаптерами BT + Zigbee координатор, плюс WiFi на рядом лежащем телефоне)...

Были подобраны такие настройки в "config.h":

// BLE_BUFF_MAX_LEN = 251
// BLE_BUFF_NUM=12
// BLE_TX_NUM_EVENT=12

При таких параметрах:

APP_MTU_SIZE (BLE_BUFF_MAX_LEN-4)

// Minimum connection interval (units of 1.25ms, 6=7.5ms)
#define DEFAULT_DESIRED_MIN_CONN_INTERVAL 6

// Maximum connection interval (units of 1.25ms, 100=125ms, 10 = 12.5 ms)
#define DEFAULT_DESIRED_MAX_CONN_INTERVAL 8

// Slave latency to use parameter update
#define DEFAULT_DESIRED_SLAVE_LATENCY 0

// Supervision timeout value (units of 10ms, 100=1s)
#define DEFAULT_DESIRED_CONN_TIMEOUT 100

Такие скорости меня устроили, т.к. это в максимуме более 850000 килобит, что есть максимальная норма для PHY 2M и соответствующих настроек.
И решил испытать вариант приема с I2C с CLK на 1.2МГц и посылки данных данных от туда через данный стек...
И тут начались беды... CPU загружен по прерываниям обработки I2C и для исполнения BLE стека остается меньше времени.
Пример осциллограммы опроса I2C указан тут (но до такого потока уже не довести - стек жрет немерено производительности чипа - не зря там набухали 150 килобайт, да ещё и во Flash с выборкой не за один такт :) )
Т.е. чем больше скорость опроса I2C, тем меньше времени остается CPU для обработки BLE стека и на скоростях потока около 10 килобайт в секунду в передаваемых данных наступает бардак - в поток вклиниваются куски от других блоков передач... А если дальше поднимать поток, то там уже сплошной набор из кусков от нормальных блоков которые были переданы в GATT_bm_alloc() с последующим вызовом GATT_Notification().
 

pvvx

Активный участник сообщества
После GATT_Notification() всегда исполняется GATT_bm_free(). Поток с битыми данными при этом можно разогнать более 30 килобайт... Но это уже сплошной бардак в переданных данных.
Никаких вылетов при этом нет, ошибок GATT_Notification() тоже не сообщает.
Повторное вхождение в GATT_bm_alloc()/GATT_Notification()/GATT_bm_free() исключал всеми возможными volatile флагами :)
 

pvvx

Активный участник сообщества
При одновременно работе только по прерываниям USB и BLE стека занятого только передачей маяка так-же наблюдаются странности - дикое падение производительности USB.
 

pvvx

Активный участник сообщества
И резюме пока такое – проблема сложная и для разбора необходимо потратить десятки часов.

Вызов процедур-событий пользователя типа по таймеру при работающем BLE возможно с минимальным дискретом TMOS, но менее 5 тиков (по 625 мкс) как-то уже стремно. В SDK есть и примеры с PeriodicTask(), но там задают периоды в секунды…

Другим методом вызвать свою процедуру получения и набора данных с любого интерфейса для последующей передачи в BLE не нашел… Везде засада с TMOS, к торой совсем куцая документация.

Необходимо копать все флаги CPU устанавливаемых типов и приоритетов прерываний и как-то обходить TMOS в блобе либы BLE… А это не пять минут и время не пришло – пока копаться опротивело…
 

pvvx

Активный участник сообщества
А пока к CH582/592 подключаем дисплеи… Скорость SPI тоже ограничена SPIn_CLKCfg(2); // =2 - max freq CLK 30 MHz (SYS_CLK/2)
st7789 c 240x240 по скорости приемлемая - при работе без буфера экрана (памяти у CH5xx маловато).
И экран почему-то взял мелкий:
1758538021914.png

Примерно в натуральную величину - картинки из теста :
1758538037857.png1758538042955.png1758538046257.png
Вставка в последней - картинка 128x128...
Видос кидать некуда - Ютуб забанили :)
 

selevo

Member
Бедному selevo первая попавшаяся на али клавиатура не понравилась :) :)
А это все надписи по "Коммер ческое изделие" , что имеются по ссылке переходника:
Описание
Первый пакет: набор «сделай сам»
Второй пакет: комплект «сделай сам» + аккумулятор
Пакет третий; Комплект «сделай сам» + беспроводной приемник
Четыре пакета: комплект «сделай сам» + беспроводной приемник + аккумулятор
Характеристики
Название бренда Нет
Происхождение Китай
Назначение DOOR
Тип крепления Вязание
Единица измерения штука/штуки
Количество 1

:p
Хе...
Там в названии написано Bluetooth, э
Но в но в целом это просто продавал поленился скопировать описание полностью с другого такого же продавала, например с этого
 

pvvx

Активный участник сообщества
Хе...
Там в названии написано Bluetooth, э
Но в но в целом это просто продавал поленился скопировать описание полностью с другого такого же продавала, например с этого
Значит у вас беда с невнимательностью - даете левые ссылки. Теперь ещё виноват продаван :)
 

pvvx

Активный участник сообщества
Но главное в этой фигне – она не имеет никакого смысла, так как есть беспроводные клавиатуры на любой цвет и вкус.
 

dzanis

Member
Вызов процедур-событий пользователя типа по таймеру при работающем BLE возможно с минимальным дискретом TMOS, но менее 5 тиков (по 625 мкс) как-то уже стремно.
Я уже чувствую что всё там плохо. Это ограничение тика в TMOS (по 625 мкс) нельзя менять пользователю, это какая-то подлянка от wch.
А если протестировать на скорость мима стека от wch? Взять пример от ch32fun https://github.com/cnlohr/ch32fun/blob/master/examples_ch5xx/iSLER/iSLER.c . И отправлять пакеты с ПК через python?

Интересно, у меня как раз имеется st7789. Как то это странно , что у CH5xx нету DMA.
 

pvvx

Активный участник сообщества
А если протестировать на скорость мима стека от wch? Взять пример от ch32fun https://github.com/cnlohr/ch32fun/blob/master/examples_ch5xx/iSLER/iSLER.c . И отправлять пакеты с ПК через python?
Прием ещё не пробовал. Куда девать входящий поток в CH582/592 ?
Для типового UART с 115200 там всё будет хорошо, т.к. это всего 11520 байт и никакой нагрузки на CPU.
Интересно, у меня как раз имеется st7789. Как то это странно , что у CH5xx нету DMA.
Для SPI, UART, ADC и т.д. DMA есть. Для I2C DMA нет. И I2C требует участия CPU на каждом шаге работы I2C (как у всех STM32, ESP, ....).
Единственное отличие CH582 от CH592 - ADC у CH592 может автоматически переключать каналы.
 

pvvx

Активный участник сообщества
Для чтения регистра с I2C в дурных SoC типично необходимо:
  • задать Start, дождаться передачи,
  • передать адрес, дождаться передачи,
  • посмотреть флаги ACK,
  • передать адрес регистра, дождаться передачи,
  • посмотреть флаги ACK,
  • передать start, дождаться передачи,
  • передать адрес, дождаться передачи,
  • посмотреть флаг ACK,
  • переключить на прием,
  • дождаться приема, (только тут, при длине много байт можно включить DMA)
  • передать stop.
И все эти действия производятся CPU, путем непрерывного копошения в регистрах контроллера I2C.
При стандарте частоты I2C у CLK до 3.6 МГц нужен уже сверх быстродействующий CPU и его шины, чтобы не тормозить I2C.

В нормальном контроллере I2С у приличных SoC производится только передача данных в FIFO или DMA слова, в котором старшие биты задают команду контроллеру, а младшие – данные. И прием идет тоже в FIFO/DMA. А при NACK многие контроллеры I2С сами делают повторы старта транзакции и останавливаются по повторной ошибке с генерацией всяких IRQ. Т.е. CPU только изредка принимает участие в I2C – подготавливает буфера и занимается своими делами до окончания транзакции I2C...
Это реализовано в Intel, RTL микроконтроллерах и т.д. И частично у Telink и Bouffalo.
 
Сверху Снизу