Перейти к содержанию
    

i.MX6 USB_OTG при болтающемся кабеле Linux валится

известна ли такая проблема?

ошибку точно не воспроизведу, что-то типа "нуль поинтер внутри 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...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 часа назад, yes сказал:

не понимаю, как USB_OTG DEVICE определяет, что подключается HOST?

А 4я ножка в мини усб разъеме вам ни о чем не говорит?))

image.png.a4772a611cb8004a4e79129565231b1f.png

Если ID  в драйвере не отрабатывается, то возможно сначала запускается драйвер девайса, если нет реакции то переходит на хост, в процессе этого перехода, если что-то где-то кривовато прописано, то может и сглючить, ИМХО

2 часа назад, yes сказал:

но вопрос не про софт, вопрос про железо - как такое может быть?

Не может. Уже 7 лет работает своя система на i.MX6s и такого никогда не было, ищите ошибку в ПО.

2 часа назад, yes сказал:

на схеме каких-то хитростей нет - стандартное подключение, TVS + common mode filter - ничего больше между i.MX и разъемом нет

Если на втором конце кабеля ничего нет, то возможно проблема не в усб контроллере, а в ЭМС, тут уже что-то в вашей схемотехнике...

Изменено пользователем mantech

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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 дискретный

Изменено пользователем sasamy

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

10 hours ago, mantech said:

А 4я ножка в мини усб разъеме вам ни о чем не говорит?))

image.png.a4772a611cb8004a4e79129565231b1f.png

 

это подключено к ножке 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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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 смотреть

Изменено пользователем sasamy

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

3 hours ago, sasamy said:

зачем оно нужно если порт как девайс включен и подключается к хосту ?

 

ну а как софт узнает, что пора драйвер позвать или что-то такое? извиняюсь за такие обобщения - пока в детали не вник

сторонний хост запустил какую-то процедуру подключения (енумерации или как оно называется, хотя наверно есть еще до нее какой-то протокол определения, что что-то висит на USB) - как наш i.mx6 device узнает, что вот пришло время железке что-то хосту ответить и свой софт как-то проинформировать, что надо девайсом работать?

upd: это не совсем тот сценарий, что есть у меня - кернель валится при установке драйвера, точнее во время стартапа. буду разбираться, наверно, на следующей неделе. но все-равно интереснее готовый ответ получить, чем стандарты читать 🙂

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

Изменено пользователем sasamy

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...