yes 8 21 марта, 2023 Опубликовано 21 марта, 2023 · Жалоба известна ли такая проблема? ошибку точно не воспроизведу, что-то типа "нуль поинтер внутри otg драйвера" -------------- но вопрос не про софт, вопрос про железо - как такое может быть? при включении девайса - работает как хост, при включении хоста - работает как девайс. ошибок нет. но если линуксбутится при подключеном кабеле (~1.5М - короткий). то kernel panic если в разъем кабель не воткнут - то проходит. на схеме каких-то хитростей нет - стандартное подключение, TVS + common mode filter - ничего больше между i.MX и разъемом нет ------------- кабель подключен как девайс, то есть UDB_ID=1. ============ upd: не понимаю, как USB_OTG DEVICE определяет, что подключается HOST? наверно VBUS все-таки должно присутствовать? в i.MX два USB_OTG и питание USB_IP работает как бы по "ИЛИ". но детектор наличия питания наверно свой на каждый USB1 / USB2. ну и непонятно, чем ситуация кабель/нет кабеля отличаются - в обоих случаях внешнего питания нет и USB_ID=1... кабелей вроде проверили несколько, ну и как бы утечки с кабеля на VBUS не должно быть - он все-таки работает как кабель, когда воткнут в HOST/DEVICE... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 53 21 марта, 2023 Опубликовано 21 марта, 2023 (изменено) · Жалоба 2 часа назад, yes сказал: не понимаю, как USB_OTG DEVICE определяет, что подключается HOST? А 4я ножка в мини усб разъеме вам ни о чем не говорит?)) Если ID в драйвере не отрабатывается, то возможно сначала запускается драйвер девайса, если нет реакции то переходит на хост, в процессе этого перехода, если что-то где-то кривовато прописано, то может и сглючить, ИМХО 2 часа назад, yes сказал: но вопрос не про софт, вопрос про железо - как такое может быть? Не может. Уже 7 лет работает своя система на i.MX6s и такого никогда не было, ищите ошибку в ПО. 2 часа назад, yes сказал: на схеме каких-то хитростей нет - стандартное подключение, TVS + common mode filter - ничего больше между i.MX и разъемом нет Если на втором конце кабеля ничего нет, то возможно проблема не в усб контроллере, а в ЭМС, тут уже что-то в вашей схемотехнике... Изменено 21 марта, 2023 пользователем mantech Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sasamy 0 21 марта, 2023 Опубликовано 21 марта, 2023 (изменено) · Жалоба On 3/21/2023 at 3:09 PM, yes said: как USB_OTG DEVICE определяет, что подключается HOST? в кабеле на разъёмах со стороны хоста ID подключен к земле, со стороны девайса никуда не подключен 3.3 USB OTG Plug Connection https://ww1.microchip.com/downloads/en/Appnotes/Atmel_11201_USB-OTG-Like-Connector-Implementation_SAM9G-SAM9X-SAMA5D3_Application-Note.pdf ЗЫ на imx6q/d/s ID это дискратные входы, а в imx6ull штатный ID которого boot rom опрашивает аналоговый, там схема с измерением сопротивления относительно земли, но есть и альтернативный ID дискретный Изменено 21 марта, 2023 пользователем sasamy Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
yes 8 22 марта, 2023 Опубликовано 22 марта, 2023 · Жалоба 10 hours ago, mantech said: А 4я ножка в мини усб разъеме вам ни о чем не говорит?)) это подключено к ножке USB_ID микроконтролера. если я пишу 1 или 0, то это значит 3.3В или 0В (мне казалось, должно быть понятно из контекста. или замечание не об этом?) ---------------------------- там весьма "кудрявая схема" всяких соединительных плат и т.п. и кабель не type-ab без привязки ID к земле в кабеле. мне кажется, что натекает ток в VBUS1 через все эти соединители. как раз когда включен кабель. так как питается USB от VBUS2 другого подключения (5В), то тока по VBUS1 нет и даже через 100К может натечь до 3.3В, чтобы сработал детектор VBUS и как-то криво запустил драйвер пока доберусь до платы померить... описано где-нибудь как запускается i.mx6 в режиме device и если существует какой-то порог обнаружения VBUS, то чему он равен ??? 10 hours ago, sasamy said: в кабеле на разъёмах со стороны хоста ID подключен к земле, со стороны девайса никуда не подключен про подключение - мне было непонятно, в стандартном OTG не различается со стороны девайса включен кабель или нет - на ID ножке стоит подтягивающий резистор и 3.3 В всегда то есть должно быть какое-то еще условие, что сторонний хост подключился - кажется, что наличие VBUS (которое подает хост) годный признак. как на самом деле? я не разбирался с USB и всегда рисовал стандартные схемы, в которых все работало "ис коропки". а тут попалось креативное решение... i.mx6sx Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sasamy 0 22 марта, 2023 Опубликовано 22 марта, 2023 (изменено) · Жалоба On 3/22/2023 at 4:03 AM, yes said: на ID ножке стоит подтягивающий резистор и 3.3 В всегда то есть должно быть какое-то еще условие, что сторонний хост подключился зачем оно нужно если порт как девайс включен и подключается к хосту ? Я при прошивке emmc подключаю платы с imx6dqs к РС только 3 проводами gnd, d+, d- (снимаю перемычку с питания порта USB на плате), у PC своё питание у платы своё. В переходниках ID к земле подключается и порт переключается на хост, например флешку подключить - флешки OTG не поддерживает и порты не могут по протоколу налету договориться кто их них кто. PS может я не понял, а вопрос был "как правильно подключать VBUS чтобы соотвествовать протоколу OTG" то это я не знаю - лучше на референсы nxp смотреть Изменено 22 марта, 2023 пользователем sasamy Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
yes 8 22 марта, 2023 Опубликовано 22 марта, 2023 · Жалоба 3 hours ago, sasamy said: зачем оно нужно если порт как девайс включен и подключается к хосту ? ну а как софт узнает, что пора драйвер позвать или что-то такое? извиняюсь за такие обобщения - пока в детали не вник сторонний хост запустил какую-то процедуру подключения (енумерации или как оно называется, хотя наверно есть еще до нее какой-то протокол определения, что что-то висит на USB) - как наш i.mx6 device узнает, что вот пришло время железке что-то хосту ответить и свой софт как-то проинформировать, что надо девайсом работать? upd: это не совсем тот сценарий, что есть у меня - кернель валится при установке драйвера, точнее во время стартапа. буду разбираться, наверно, на следующей неделе. но все-равно интереснее готовый ответ получить, чем стандарты читать 🙂 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sasamy 0 22 марта, 2023 Опубликовано 22 марта, 2023 (изменено) · Жалоба On 3/22/2023 at 3:34 PM, yes said: как наш i.mx6 device узнает, что вот пришло время железке что-то хосту ответить и свой софт как-то проинформировать, что надо девайсом работать? вы на второй круг пошли - по состоянию ID он определяет хостом ему быть или девайсом, срабатывает прерывание при изменении состояния ID, драйвер проверяет надо ли менять роль в обработчике прерывания https://elixir.bootlin.com/linux/latest/source/drivers/usb/chipidea/otg.c#L217 https://elixir.bootlin.com/linux/latest/source/drivers/usb/chipidea/otg.c#L168 если надо - останавливает текущую роль и включает другую. Можно просто указать через DT роль - хостом порт должен работать или девайсом и забить на OTG Изменено 22 марта, 2023 пользователем sasamy Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться