usbhub + usbasp + ch341 + j-link = one PCB

Все началось с того, что мне в большом количестве понадобилось собрать/отладить устройства на базе AVR. Я взял USBASP, открыл документацию и с радостью обнаружил, что у него есть встроенная поддержка uart.

Как оказалось, потратив пару-тройку дней на поиск разнообразных драйверов, запустить такой мост под windows — задача маловероятная (с пингвинами все дружится практически «из коробки»). Если это не так — пишите в комментариях, но я не нашел ни одного работоспособного подтверждения в сети. В качестве временного решения собрал костыль: USBHUB + USBASP + USB-UART (ch340). Все работает, но как минимум — не эстетично, как максимум — устройства иногда отваливаются (с USB портами у моего старичка lenovo x230 все ок). Если подключать без USBHUBа, то заняты 2 из 3 usb портов + короткие провода (USBASP и USB-UART обычно имеют USB-разъемы сразу на плате).

Решено: изобретаю велосипед с подключением всего окружения на одной плате одним проводом с разъемом type-C.

Вспомнил про ch341 (у него есть конфигурационный вход, позволяющий работать как USB-SPI/I2C мост, а также как USB-UART, в т.ч. с наличием #DTR, но об этом позже).

Начал разработку платы с USBHUBа. Выбор пал на дешевый FE1.1.

9961738c6d693c9124d56763d0896092.jpg

На 4pda нашел тему про сh341 и «доработки», в т.ч. про дополнительную плату с согласователями уровней (для прошивки SPI флешек с 1.8в). Зачем городить бутерброд, если можно поставить согласователи на саму плату.

Добавил согласователи на UART (один переключатель на плате позволяет выбрать питание usbasp и одновременно уровень сигналов uart 5в/3.3в).

Пока неспешно собирал схему, параллельно столкнулся с проблемой китайских j-link адаптеров со слетающими прошивками. Решил добавить еще и программатор для ARM (В первой версии платы поставил обычный st-link на stm32f103, в последней версии j-link на stm32f205).

edbfe8e3cc19e4c6ee1d13a8b88016cc.jpg

Три USB порта хаба заняты, четвертый usb вывел на USB-A (питание платы через предохранитель на 1А).

Терпеть не могу суперпозицию USB, с подключением с третьей попытки, потому поставил USB-typeC.

Как раз обзавелся самодельным микроскопом (eken h9 + гелиос 44–2).

a36e2b5e3f1755f20516502cfe20653e.jpg

Вывел разъем для прошивки adruno-плат без встроенного usb-uart (как раз нога #DTR через конденсатор), просто потому что смог.

Добавил аналоговый мультиплексор 4052, чтобы переключать UART между usbasp/внешним разъемом/stm32f205(для прошивки).

image-loader.svg

Бонусом — получилась «вещь в себе» — самопрошивающийся программатор. ch341 в режиме SPI может прошить usbasp, а в режиме UART может прошить stm32f205 (для старого бутлоадера 2.0), либо прям по USB (DFU для версии бутлоадера 3.0)

36f90aea463c2d17446a4c177f4ae04f.jpg

В итоге плата стала 4-слойной с размерами 70 мм х 35 мм.

Надеюсь, кому-нибудь мой опыт пригодится.

Гербера, инструкции по сборке, список элементов, схему, прошивки выложил на https://4pda.to/forum/index.php? showtopic=884713&st=6720#entry106407720

Моя первая статья на Хабре, кидайте тряпками.

© Habrahabr.ru