Нескучная пайка USB3300: USB HS на STM32F407

B22-00

Как-то для одного проекта были куплены внешние PHY USB High-Speed — USB3300. Планировалось подключать их к ПЛИС и с неё рулить всем, но потом была пересмотрена концепция устройства и USB HS заменили на Ethernet 1Gbit как более универсальный и гибкий интерфейс. PHY же остались, захотелось их запустить, заодно и оценить STM32CubeMX для STM32F4DISCOVERY.

Предварительно я поискал примеры, описания и вообще на какие грабли можно наступить, пытаясь завести этот чип. Из русскоязычного сообщества быстро гуглятся следующие темы на форумах:

  • hi-speed хост на STM32F407 (updated) — в целом ничего интересного, судя по всему вычищена зачем-то от полезного материала. Разве что упоминание, что на дискавери надо убрать микрофон и акселерометр, в конце же только сказано, что заработало, и не более;
  • STM32F4Discovery + USB3300 — тоже тема на EE, товарищ не убрал акселерометр и, судя по всему, не разобрался с исходниками, разве что привел верное подключение PHY к пинам STM;
  • STM32F4Discovery + USB HS USB3300, не работает — товарищ с топика на EE спрашивает уже на более серьезном форуме, но кроме стандартных советов тоже ничего полезного. Да, вот тут заметил, что ошибка в подключении PHY, приведённая товарищем, таки есть — RST пин. У этого PHY сброс 1-ей, а не 0, значит, напрямую соединять нельзя (да и надо ли?).

В итоге ничего полезного не находится, и впечатление такое, что оно должно работать или с пол-пинка, или тут что серьезно-секретное надо знать, чтобы запустить этот PHY, — попробуем проверить это на себе! :)

Для этого PHY можно купить готовые платы со всей нужной обвязкой, к примеру, уже знакомая мне по дисплею для Raspberry Pi китайская компания Waveshare производит USB3300 USB HS Board (купить её легко как напрямую у производителя на Ebay, Aliexpress), которая подходит для их же серии отладочных плат Open***. Всё бы хорошо, но ждать месяц не очень хочется, особенно, когда чип есть на руках, поэтому подсмотрим схему и спаяем свою плату с этим PHY. ;)B22-01

Идем на Wiki-страничку этой платы и качаем схему в PDF. Ниже приведу её же в качестве картинки (для увеличения кликните на картинку):

Схема крайне проста и если не особо нужен OTG\Host, а только Device вариант работы, то можно еще упростить… У меня, к примеру, нет в наличии специальной ключ-микросхемы MIC2025/75-1BM, в ней, кроме MOSFET-ключа, есть еще схема защиты от КЗ на выходе, а также пин, оповещающий об этом. Эта ключ-микросхема по факту нужна только для OTG или Host, чтобы включать питание на USB-разъем, если режим Device, то питание должно браться с разъема уже на наше устройство. Мне же нужно только Device HS, в самом простом и бюджетном варианте можно просто закоротить +5В питания устройства и внешнего USB разъема, я же таки поставлю простой ключ, хоть и без надобности он тут в моём случае. Ключ питания можно собрать всего лишь на 2х транзисторах — низковольтном MOSFET-P (Logic-серии по хорошему) и биполярном N-P-N (или низковольтном, маломощном MOSFET-N, к примеру, 2n7002) или, если есть, на сборке из подобных транзисторов — в моём случае я применил PMC85XP (думаю многие получали когда-то семплы MOSFET и микрух от NXP, TI и т.д. ;) ). PMC85XP внутри крайне прост и занимает на плате очень мало места (корпус ВПОЛНЕ паябельный и 2 пина на пузе у него не обязательно подключать):

B22-03

Ну и итоговая схема моего аналога ключ-микросхемы проста как 5 копеек (нумерация компонентов условная, встроенные резисторы у VT1.2 НЕ показаны на схеме):

B22-04

Резисторы R1, R2 по 10кОм защиты, понятное дело, в этом случае никакой, но для теста вполне подходит.

Далее идет сама микросхема PHY, у неё корпус QFN-32 с размерами 5х5мм и шагом 0,5мм, для которого ЗНАЧИТЕЛЬНО упрощает пайку наличие платы-переходника QFN-DIP, которые китайцы предлагают десятки видов. У меня в наличии были разные платы, но только не та, что необходима. (закон Мёрфи :\ ) Пришлось паять на универсальной макетной плате…пару часов неспешной пайки и вышло нечто подобное:

Это слайд-шоу требует JavaScript.

Пайка производилась обычной паяльной станцией, проволокой в лаке 0,1мм почти всё сигнальное и 0,2мм по питанию (на торговых площадках искать как «wire copper 0.1mm«, 0,2мм же вытащил с катушки не нужной). Конденсаторы, светодиоды (около USB разъема, по бокам) и резисторы типоразмера 0402, только с другой стороны стоят конденсаторы типоразмера 0805, большой емкости.

Теперь осталось сделать шильдик для дискавери и практически готово! Составляем таблицу подключений выводов PHY к МК, а также попутно смотрим, что может мешать на плате дискавери (питание +3.3В и +5В не показано):

USB3300

STM32F407

Примечание

D0 PA3
D1 PB0
D2 PB1
D3 PB10 микрофон – разрезана дорожка к нему
D4 PB11
D5 PB12
D6 PB13
D7 PB5
STP PC0 ключ питания USB FS – выпаян R46
NXT PC3 микрофон – разрезана дорожка к нему
DIR PC2
CLKOUT PA5 акселерометр – выпаян U5
RESET не подключается, подтянут резистором к земле на плате PHY

Таблица составлена на основе даташита МК (также это крайне просто и наглядно можно увидеть в STM32CubeMX после выбора используемой периферии, об этом чуть ниже) и схемы на плату дискавери. Подробнее о пинах с примечаниями:

PC3, PB10. Микрофон только выпаивать или резать дорожки, т.к. для его отключения 0-резисторов не предусмотрено:

B22-13

PC0. Ключ-питания для USB FS, здесь предусмотрен резистор, отключающий нужный нам пин от микросхемы — R46 (просто выпаиваем его):

B22-14

PA5. Акселерометр, у меня Дискавери первой ревизии, и тут установлен уже устаревший акселерометр, да и в целом штука забавная, но не особо нужная в большинстве проектов. Резисторов-нулёвок здесь тоже не предусмотрено, значит, просто феном выпаиваем акселерометр:

B22-15

На плате эти доработки выглядят вот так, выпаянные R46 и U5, а также на нижней стороне перерезанные 2 дорожки (по факту 3 — первый раз ошибся чуток, пришлось восстанавливать :D прозванивайте 2-3 раза перед тем как резать дорожки!):

Это слайд-шоу требует JavaScript.

Также дополнительно на плате дискавери я вместо диодов D1, D3 (стоят для защиты питания USB) впаял обычные ферритовые бусины, т.к. хоть эти диоды и Шотки, но вместо ожидаемых +5В на колодке штырьков P2 я получал +4,6-4,7В, а вместо +3.3В было +2.9-3В, что меня не очень устраивало и была произведена данная доработка.

B22-18

Осталось совсем немного…берем дешевейшую гетинаксовую макетную плату (которые можно из китая взять сразу десяток с ценой примерно в 7-10 рублей за штучку!), паяем на нее две колодки PBD. Вышло так:

Это слайд-шоу требует JavaScript.

По центру ставим плату с PHY и припаиваем проводками (МГТФ-ом конечно, классика жанра :) ) к нужным пинам:

B22-21

Так же стоит отметить, что тут линии данных прям очень точно выровнены по длине и соблюдены все правила разводки (распайки МГТФ) для высокоскоростных устройств… шутка конечно :D

B22-22

В итоге вышел такой вот несъедобный бутерброд:

Это слайд-шоу требует JavaScript.

Дальше дело уже непыльное. Осталось разобраться с прошивкой и опробовать на деле — всё ли работает или же «и так сойдет» таки не сойдет? ;)

Запускаем STM32CubeMX, выбираем наш МК — STM32F407VGT6, теперь расставляем галочки. :) У нас внешний кварц для тактирования, и заодно для проверки включим один MCO выход для контроля частоты:

B22-25

Также не забываем включить SWD для отладки (хотя и не обязательно):

B22-26

 

Теперь указываем, что у нас есть внешний PHY для USB HS и он только Device:

B22-27

И для теста выберем самый простой вариант — Virtual COM Port. Будет скоростной COM порт.

B22-28

Также смотрим по схеме дискавери куда подключена USER кнопка:

B22-29

В итоге должно получится как-то так по используемым пинам в МК:

B22-30

Осталось подредактировать систему тактирования, и можно генерировать проект (настройки USB я не трогал, для теста более чем устраивают параметры по умолчанию):

B22-31

Да, не забываем увеличить Stack и Heap размеры, иначе USB не заведется (я увеличил оба до 0x800, хватило с запасом). На выходе я получил проект для Keil uVision v5. В проекте я изменил только main функцию, добавил буквально пару строк для обработки нажатия на кнопку (все сгенерированные кубом комментарии я убрал для наглядности):

int main(void)
{
char testDataToSend[] = "Test!\r\n";

HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_USB_DEVICE_Init();

while (1)
{
if(HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0) == GPIO_PIN_SET)
{
CDC_Transmit_HS((uint8_t *)testDataToSend, 7);
}
}
}

Логика крайне проста — жмем на кнопку и устройство посылает строку в ПК. Проверяем! Подключаем к ПК нашу плату — определяется и драйвера автоматом ставятся, в диспетчере задач появляется новый COM порт (COM3 в моем случае):

B22-33

В свойствах порта видим стандартные PID\VID от STM — это точно наше устройство:

B22-34

Ну что, запускаем терминал, подключаемся к этому COM порту и жмакаем на кнопку! Быстрого и короткого нажатия на кнопку хватает, чтобы терминал начал захлебываться и потом еще секунд 5-8 продолжал выводить тестовую строку:

B22-32

В среднем каждое кратковременное нажатие добавляет от 10к до 18к символов. Тест вполне успешный я считаю. :) (проверял на 2х разных ПК, Windows 10 x64) Более корректное измерение скорости, стабильности работы произведем в следующий раз, для этого надо более интересную задачу, чем просто быстрый COM порт.

Да, из возможных проблем, почему может не работать: если устройство не определяется, то помимо банальной проверки на корректность соединений\замыкание чего-либо также следует проверить все 3 пина PHY внутреннего питания +1,8В (15, 26, 29) — на них должно быть +1,8В +\-10% после подачи питания +3,3В, также следует проверить выход CLKOUT (пин 14), там после подачи питания должна быть опорная частота 60 МГц — у меня её не было первый раз, потом догадался посмотреть генерацию на кварце, и каково было моё удивление, что и там нет 24 МГц (взял первый попавшийся БУ кварц и, как назло, он оказался не рабочим :) )!

Получившийся проект для Keil uVision можно взять ТУТ.

У меня всё. Не так уж и страшен этот PHY, как его описывали на форумах. Удачи в проектировании! ;)

 

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s