Почему моя пользовательская плата на основе Arduino-Micro не подключается через USB?

Я спроектировал и напечатал печатную плату для моего проекта MIDI-контроллера с модифицированным микроконтроллером Arduino Micro, по существу встроенным в конструкцию. Я заменил USB Micro на порт типа USB-C (используя только протокол 2.0). Хотя я могу запрограммировать плату через ICSP, в том числе заставить ее запускать мои скетчи Arduino (которые я тестировал, зажигая светодиоды по определенной схеме, которая работает, как и ожидалось), и тот факт, что она получает питание через USB, проблема в том, что я не могу подключить устройство к моему ПК через USB - оно не распознается как USB-устройство и не может отправлять или получать данные через USB. Я не уверен, сделал ли я что-то не так в дизайне или просто что-то упустил, но мог бы воспользоваться некоторыми советами, так как для того, чтобы функционировать должным образом, плата должна иметь возможность обмениваться данными через USB.

Я протестировал различные кабели USB-A – USB-C и USB-A – Micro (проверено с другими Arduino) и адаптер Micro – USB-C.

В соответствии с различными инструкциями, которые я нашел в Интернете, я подключил подтягивающие резисторы 5,1 кОм к CC1 и CC2, оставив SBU1 и SBU2 неподключенными, так как я планировал использовать протоколы 2.0 для простоты (как связанный вопрос, может ли они на самом деле используются для использования протоколов 3.0+ в конструкции, подобной этой, с ATMEGA32U4?Будет ли это считаться лучшей практикой в этом случае и потенциально обходить ошибку?), и подключил D- и D+, как показано на схеме ниже ; с варистором EZJZ0V500AA между каждым и GND и проходящим через сеть резисторов 4D03WGJ0220T5E (о которой я мало что знаю, в том числе о том, имеет ли этот тип компонента какую-либо полярность? Я просто пытался проследить, как такой же тип компонента использовался в официальная схема Arduino Micro) и, наконец, на контакты 3 и 4 ATMEGA32U4.

Это исходная схема платы в том виде, в каком она была собрана, но в результате некоторых проблем с питанием этой же платы, которые я с тех пор разобрался с помощью в отдельном посте Почему моя пользовательская плата на основе Arduino-Micro не получает питание через USB?, мне пришлось обойти регулятор 5V и просто использовать VUSB в качестве +5V, поэтому я помещу обновленную схему, отражающую эти изменения, ниже оригинальный (я не думаю, что это повлияет на эту проблему, но я не настолько опытен и хочу ошибиться, предоставив как можно больше деталей)

Исходная схема: Исходная схема

Пересмотренная схема: Пересмотренная схема

Компоненты:

| Обозначение | Значение | Компонент |
|:------------------------------------------------ --------|:---------------------------------------|:-------------- -------------|
| C_ARD_1, C_ARD_2, C_ARD_6, C_ARD_9, C_ARD_10, C_ARD_11 | 100н | CL05B104KO5NNNC |
| C_ARD_3, C_ARD_14 | 22у | РВТ22УФ16В67РВ0017 |
| C_ARD_4, C_ARD_5, C_ARD_7 | 1 мкФ | CL05A105KA5NQNC |
| C_ARD_12, C_ARD_13 | 22 пФ | 0402CG220J500NT |
| D_ARD_2 | CD1206-S01575 | CDSU4148-HF |
| F1 | MF-MSMF050-2 500 мА | MF-MSMF050-2 |
| J3 | USB_C_Receptacle_USB2.0 | Х-ТИП-С-16П |
| Л1 | зеленый | 19-217/GHC-YR1S2/3T |
| L2 | MH2029-300Y | БЛМ21ПГ300СН1Д |
| ON1 | синий | 19-217/BHC-ZL1M2RY/3T |
| Р_АРД_1, Р_АРД_2, Р_АРД_4, Р_АРД_9 | 10К | 0402WGF1002TCE |
| Р_АРД_5, Р_АРД_6, Р_АРД_7, Р_АРД_8 | 1К | 0402WGF1001TCE |
| Р_АРД_10, Р_АРД_11 | 5,1к | 0402WGF5101TCE |
| РП3 | 22Р | 4D03WGJ0220T5E |
| RX1, TX1 | желтый | 19-213/Y2C-CQ2R2L/3T(CY) |
| Т1 | FDN340P/PMV48XP | PMV48XP |
| Т2 | PMV48XP | PMV48XP |
| У1 | ATMEGA32U4-XUMU | АТМЕГА32У4-МУ |
| У2 | NCP1117-5 | NCP1117ST50T3G |
| U4 | LP2985-33DBVR | LP2985-33DBVR |
| Y3 | 16МГц КХ-7 | 3225-16.00-10-10-10/А |
| Z1, Z2 | CG0603MLC-05E | EZJZ0V500AA |

, 👍2

Обсуждение

Вы пытались записать загрузчик через ICSP?, @chrisl

*"в качестве побочного вопроса"* это, вероятно, лучше, чем не задавать его в том же вопросе. Я так понимаю, вы решили проблему с питанием, и теперь речь идет о данных. Или, по крайней мере, я надеюсь, что это то, что происходит. Если это так, вы можете сделать это действительно ясным, прежде чем люди начнут пытаться закрыть его как дубликат. Как и раньше, если вы упомянули, что тестируете кабель USB-A на USB-C, это устраняет любые проблемы, связанные с дизайном, реализацией или дизайном, связанным с CC1/CC2. Они перестают быть проблемой, потому что в этом случае они обрабатываются кабелем., @timemage

@chrisl Да, я успешно записал загрузчик через ICSP, прежде чем тестировать его через USB., @Stuart

@timemage Благодарю за совет, я новичок в этой платформе, поэтому не был полностью уверен, как лучше всего задать несколько связанных вопросов и т. д. Я действительно решил проблемы с питанием и подумал, что это может сбить с толку, если снова упомянуть об этом здесь. так как это, кажется, в основном не связанная проблема, но я отмечу это в редактировании., @Stuart

Вы сделали что-то вроде выбора Arduino Micro и записи загрузчика через ISP? Или вы устанавливали через загрузчик DFU?, @timemage

@timemage Да, в IDE Arduino 1.8.19 я выбрал Arduino Micro в качестве платы и записал загрузчик, используя Arduino Uno в качестве интернет-провайдера, а затем я также успешно загрузил скетч через Upload Using Programmer через ICSP. Я не знаком с загрузчиком DFU, но могу разобраться., @Stuart

Ваша плата работает с мигающим светодиодом (это доказательство того, что плата в целом работает) или не работает только порт USB?, @hcheung

Это не было рекомендацией для DFU. Некоторые вещи, которые нужно сделать / измерить, которые вы, возможно, можете интегрировать в вопрос: Запустите DRC на макете печатной платы, если вы еще этого не сделали. Измерьте контакт UCAP, чтобы убедиться в наличии напряжения 3,3 В. Подайте на плату 5 В, как если бы она была подключена к USB (на самом деле не подключайте ее к USB), и измерьте D+ и D- с высоким значением (15K-50k) pulldown после внешнего сброса. Посмотрите, подтягивается ли D+ в загрузчике, а D- нет. Если вы не возражаете против горя, проведите тест с удаленными Z1/Z2., @timemage

@hcheung Да, мне удалось успешно загрузить и запустить на плату скетч с мигающим светодиодом (через программирование ICSP), поэтому я считаю, что плата работает помимо передачи данных через USB., @Stuart

Ваша схема USB выглядит нормально, и вы используете порт USB-2, что является правильным выбором. Вы установили [драйвер USB](https://learn.sparkfun.com/tutorials/qwiic-pro-micro-usb-c-atmega32u4-hookup-guide/all#windows_driver)?, @hcheung

@timemage «Не рекомендуется для DFU» Понятно. Спасибо за все предложения по тесту. Я получаю чистое чтение от DRC (хотя я знаю из моих предыдущих проблем с питанием, что это не исключает неправильного выбора посадочного места, поэтому я дважды проверю все с полярностью). Измерение 3,3 В на UCAP. Что касается окончательного теста, правильно ли я понимаю: удалите Z1 и Z2 и эффективно замените каждый резистором с высоким сопротивлением, запишите загрузчик на плату, затем проверьте (пока плата включена, но не работает скетч), если D + подтягивается к более высокому напряжению, а D- нет?, @Stuart

Вроде того, но на самом деле предложение для Z1/Z2 действительно отдельно от раскрывающегося списка. Идея состоит в том, что Z1/Z2 предназначены для защиты, которая не является строго необходимой для ее работы. Так что в лучшем случае они не мешают. Смысл измерения D+/D- состоит в том, чтобы увидеть, что чип действительно пытается выполнить нумерацию на полной скорости в загрузчике. Смысл подтягивания *во время измерения* в том, что хост, который обычно подключен (сейчас не подключен), обычно слабо подтягивает их к GND. Если вы этого не сделаете сами, они могут всплыть и дать ложные показания., @timemage

загрузка скетча программатором удаляет загрузчик, @Juraj

@hcheung Я пытался переустановить драйверы, но это не помогло. Спасибо за предложение и за просмотр вещей, @Stuart

@timemage Что ж, сегодня я смог провести тест; Я добавил к D+ и D- пулдауны 22кОм и измерил их в загрузчике. D+ показывал от 3,1 В до 3,3 В, а D- показывал 0 В по сравнению с GND. Я получил такие же результаты со снятыми Z1 и Z2 и при тестировании, пока они были на месте., @Stuart

Ну, тогда ваш чип включает USB для полной скорости, что и делает загрузчик caterina (загрузчик Arduino Micro). **Если эти напряжения подаются на хост-порт**, вы должны, как минимум, получить диагностику сбоя в dmesg или диспетчере устройств или что-то еще, что указывает либо на сбой выдачи USB Set Address, либо на сбой Get Descriptor, обычно дескриптор устройства. Отсутствие обоих будет означать что-то вроде того, что это порт только для зарядки, или у вас есть разрыв в D + между тем, где вы измеряете, и D +, когда он входит в компьютер / концентратор., @timemage

Одна мысль, которая пришла мне в голову, возможно, вы захотите изучить [драйвер Atmel DFU](http://flysight.ca/wiki/index.php/Installing_DFU_driver)., @hcheung

@hcheung Я понял, что _ «не распознано как USB-устройство» _ означает, что оно вообще не перечислялось на USB, а не перечислялось как «неопознанное устройство». Если это правильно, то не имеет значения, какие драйверы установлены, поскольку потребуется перечислить, чтобы даже узнать, какие драйверы следует учитывать., @timemage


1 ответ


Лучший ответ:

3

Ну, наконец-то я нашел источник проблемы, большое спасибо всем, кто помог мне сузить круг вопросов и продолжал указывать мне правильное направление. Выяснив, что D+ и D- подтягиваются чипом должным образом, я решил отпаять USB-порт на плате, отрезать кабель USB-A 2.0 и припаять выводы непосредственно к плате, и вдруг это сработало. После этого я понял, что проблема, должно быть, была связана с USB-портом на плате, и, сравнив техническое описание с моим файлом печатной платы, я понял, что в посадочном месте, которое я использовал, и в техпаспорте контакты расположены в другом порядке.

Мне немного неловко отнимать у людей время из-за такой глупой ошибки, которую я совершил (и, по общему признанию, даже не предоставил достаточно информации, чтобы кто-то мог понять это для меня, несмотря на все ваше терпение и полезные советы) , но в то же время я с облегчением понял проблему и благодарен за всю помощь, которую я получил в этом посте, я не уверен, сколько времени мне потребовалось бы, чтобы разобраться без ваших предложений. Я многое узнал о компоновке плат Arduino, назначении различных компонентов на этих платах, важности двойной проверки посадочных мест и о лучших методах обращения за помощью.

В качестве примечания к "почтовому этикету" или как бы вы это ни называли, поскольку все помогали в комментариях, я не видел способа закрыть пост, не ответив на свой вопрос (я новичок в публикации здесь), поэтому я надеюсь, что это приемлемый способ сделать это .

,

Совершенно нормально ответить на свой вопрос и отметить его как принятый. Возможно, вы захотите прочитать некоторые страницы [справки], чтобы узнать больше., @the busybee