Я, как инженер и техноэнтузиаст, постоянно ищу возможности улучшить своё оборудование. Недавно, просматривая маркетплейсы, обнаружил универсальный инструмент для embedded-разработки — контроллер I2C/SPI/UART/JTAG всего за 1 000 ₽. Не удержался и протестировал его во всех режимах, о чём и рассказываю ниже.
Описание устройства
Раньше я редко делал обзоры «железа», но этот гаджет уникален и востребован не только у embedded-разработчиков, но и у мастеров по ремонту мобильной и компьютерной техники.
В официальной вики производителя указаны следующие параметры:
- Интерфейсы: SPI с двумя CS, I2C, полноценный JTAG с линиейRESET, два UART с CTS/RTS;
- Контроллер: WCH CH347 (родственник CH341A);
- Питание: 5 В и 3.3 В, ток ≈ 65 мА от USB VBus, есть самовосстанавливающийся предохранитель.

Устройство пришло в компактной коробке вместе с USB Type-B кабелем, проводами Dupont в IDC-разъёме и коротким руководством.
Металлический корпус снабжён монтажными ушками, на крышке — схема распиновки и светодиоды индикаторов UART.
Внутри — предохранитель, линейный стабилизатор AMS1117, сам CH347 и переключатели режимов.
Тестирование UART
Переключив тумблер в режим M0, получаем два независимых UART: до 9 Мбод на UART0 и до 7.5 Мбод на UART1.
Я подключил к своей консоли RX/TX и землю, выбрал COM-порт в PuTTY на скорости 115200 бод — и получил лог загрузки.

Гаджет годится и для прошивки телефонов с UART-режимом, а также для диагностики ретро-устройств без спец-JIG.
Работа с SPI и I2C
CH347 использует проприетарный USB-протокол. Для Windows (начиная с 2000) есть официальная библиотека, а для Linux — драйверы spidev и i2c-dev.

Через тестовую утилиту из SDK отправил данные в SPI-флеш 25-й серии и EEPROM 24-й.

Проект с дисплеем
Для примера подключил 1.8″ дисплей: MOSI → SDO, SCK → CLK, VCC → питание, BL → подсветка. Линии D/C и RESET вывел на GPIO6 (CTS UART1) и GPIO7 (RTS UART1).

В коде на C++ получаем дескриптор через CH347OpenDevice, проверяем режим, настраиваем SPI (режим, скорость, CS) и GPIO:
deviceHandle = CH347OpenDevice(deviceIndex);
if (!deviceHandle) throw runtime_error("Невозможно открыть устройство");
CH347GetDeviceInfor(deviceIndex, &info);
if (info.ChipMode != 1) throw runtime_error("Неправильный режим чипа");
CH347SetTimeout(deviceIndex, to, to);
mSpiCfgS cfg = {0};
cfg.iMode = 0; cfg.iClock = 0; cfg.iChipSelect = 0;
CH347SPI_Init(deviceIndex, &cfg);
Аппаратный сброс и последовательная отправка команд EMIPI:
CH347GPIO_Set(deviceIndex, 1<
Для вывода изображения преобразуем рисунок в массив RGB565 и копируем буфер:
uint8_t cmd = (uint8_t)cmdRAMWR;
GPIOSet(deviceIndex, config.IODataCommand, 0);
CH347SPI_Write(deviceIndex, 0,1,1,&cmd);
GPIOSet(deviceIndex, config.IODataCommand,1);
CH347SPI_Write(deviceIndex,0,frameSize,2,pixels);
На дисплее появляется картинка — можно создавать умные часы, панели мониторинга или дублировать окно ПК.
Итоги
Waveshare предложила действительно универсальный и недорогой инструмент. Такая цена и удобство переключателей с проводами Dupont делают его отличным выбором. Дешевле встречаются только голые платы без «фич».
JTAG-тест пока отложу, но возможности модуля впечатляют.
Если вам интересны ремонт, моддинг и программирование устаревших гаджетов — подписывайтесь на мой Telegram «Клуб фанатов балдежа» и YouTube. Поддержать проект можно на Boosty.
Ищем девайсы для будущих обзоров


Рекомендую хостинг Timeweb Cloud — надёжный провайдер для размещения всех проектов.



