Повысить надежность определения USB устройства (МИДИ клавиатуры) хостом

dim3740
dim3740 аватар
Offline
Зарегистрирован: 25.03.2015

Хост https://www.pjrc.com/teensy/td_libs_USBHostShield.html

в связке с Arduino Nano.

Скетч стандартный (см. скрин)

 

Пробовал следующие различные условия:

1. Сразу после прошивки, т.е. кабель ЮСБ от компа не выдернут.

2. После ресета кнопкой на арудиино.

3. При работающем скетче - разомкнуть и снова воткнуть кабель соединяющий МИДИ клавиатуру с хостом. (наибольший процент определения, но все равно не всегда)

4. Повышать немного/понижать напряжение питания.

5. разные кабели по длине.

6. Менять параметр delay (....) в скетче.

7. Выжидать 5 секунд на определение устройства.

 

Результаты - не предсказуемые, и никакой закономерности не вижу. То определяется, то нет....

dim3740
dim3740 аватар
Offline
Зарегистрирован: 25.03.2015

Бюджет 2-3 тыс. ИМХО, нужно как-то получить лог обмена и решение как обойти проблему. 

skif
skif аватар
Offline
Зарегистрирован: 24.03.2015

Если без лога, то 500 р

dim3740
dim3740 аватар
Offline
Зарегистрирован: 25.03.2015

Готов перечислить аванс исполнителю при условии или портфолио или обсуждения подходов к решению.

Я рассматриваю след подходы (см. рис)

1) По питанию. Имеем "условные" выключатели В1, В2, В3.  Могу описать, что происходит при различном порядке работы "выключателей". Видно, что Арудиино Нано могу запитывать от БП, от ЮСБ РС, от обоих одновременно и т.п. ЮСБ устройство (справа) требует 5 в, а с хоста идет 3,3 В, поэтому в ЮСБ разъеме А разрыв и заведено 5 в. При разрыве В3 на 2 сек, скетч перезагружается. при меньшем -нет. Надо понимать - почему...  Далее. При работе хоста светодиод  Д13 тускло горит. Почему?  Библиотека использует Д13? Вряд ли...

2) На рис. три базовых функции ЮСБ библы. Как поставить  флаги (т.е. лог, или светодиод, или в КОМ порт на терминал) , что прошли некий код, что устройство в таком то режиме, что не определено и т.п. ....

3) Подход - идеальный. Есть в библе п/п чтения дискрипторов. Читаем, понимаем как работать с новым устройством, соответствеено меняем программу.  У меня многие устройства работают нормально (скажем мышь), некоторые неуверенно, некоторые вообще никак. Речь про "вторые" пока, а там будет видно:)))...

Нужна инфа о роли портов INT и RESET на хосте (ссылку давал выше). STM не предлагать.

Извините за рис. Думаю, важнее тут время и инфа....

И еще... Я делаю для "себя", поэтому возможны упрощения, типа "правда, надо будет нажать такую -то кнопочку, но зато 100 % гарантии"

 

sadman41
Offline
Зарегистрирован: 19.10.2016

Слабо понимаю, что вы тут наворотили с прокидыванием питания и прямым соединением БП с USB (наверное в этом и проблема), однако D13 - это CLK шины SPI и он не тускло горит, а мигает с высокой частотой.

RES - Device Reset. Drive RES low to clear all of the internal registers except for PINCTL (R17), USBCTL (R15), and SPI logic

INT - An interrupt output pin, INT, notifies the SPI master when USB service is required; for example, when a packet arrives, a packet is sent, or the host suspends or resumes bus activity

 

dim3740
dim3740 аватар
Offline
Зарегистрирован: 25.03.2015

Спасибо за отклик. Прокидывание питания - не моя идея, а по ссылке выше... Но это логично, чтобы на ЮСБ было около 5 вольт, а не 3,3 в. Да, идет от БП... Но земля же есть тоже.

13 - это SPI .. Не знал. конечно мигает, я понимаю, про заполнение и скважность))) для простоты написал. Непонятно зачемтэта шина работает в библе. Проблема в том, что она конечно "универсальная", поэтому мне и не прочитать ее...

По RES и INT ясно... только как это применить для сабжа/надежности...:)))

Кстати сегодня INT посадил на землю. А оказывается  - это выход. Но, надежность повысилась... Или глаза уже замылились...

sadman41
Offline
Зарегистрирован: 19.10.2016

Как зачем работает? Данные по ней передаются с ардуины и на ардуину. 

Каким образом применить INT/RES - я понятия не имею, вы спросили - я ответил.

Про 5V понял. Сначала почему-то подумал, что с этой USB-платы в USB компа хреначится +5V. Вобщем, надо схему этого модуля понюхать. Что там за 3,3V подозрительных идет. Какая у вас Nano - синяя?

dim3740
dim3740 аватар
Offline
Зарегистрирован: 25.03.2015

А! Понял, CLK SPI же, а не Ай-ту-си... Сорри. Да. Тогда наблюдаю, что порой СД вообще не горит. Т.е. полный затык.... Про ИНТ конечно спасибо, это мои мысли вслух.

Нано - синяя. 3,3 вольта выходит с нее и входит в хост. 

sadman41
Offline
Зарегистрирован: 19.10.2016

Ну так я вас разочарую - на синих нанах нет 3,3V считай. 50мА максимум что ли... Берите 1117-3.3 или еще что-то типа того и запитывайте через него. Или смотрите на роботдиновскую Нану - там уже стоит нормальный LDO на 3,3V

sadman41
Offline
Зарегистрирован: 19.10.2016

По ссылке не вижу пузо шилда и распиновку. Если на пузе стоит какой-нить трех- четырех-ногий таракан и есть пин VCC, то скорее всего этот шилд можно прямо от 5V запитать. Вобщем, нужно сам модуль обследовать получше, а то всякое бывает - по ссылке одни картинки, в реальности другие.

dim3740
dim3740 аватар
Offline
Зарегистрирован: 25.03.2015

Я учту, хотя думаю и 50 мА хватит на один чип хоста. А на ЮСБ, идет от БП. И все же:

1. Если от БП только - то 90 % определения, а 10 % лечится коротким разрывом В3.

2. Если от ЮСБ РС - то грузится загрузчик, и все виснет в 90 %. Добавка БП не дает ничего.

Вывод: Рабочий режим конечно от БП+ кнопка В3. Но на отладку - геморой.... Порт терминала даже не посмотришь. Есть еще мысли? Есть лог анализатор китайский на комп. 

Кстати, у меня Дуня запитана от БП через 27 конт - это +5, а не VIN. Землю тоже вразброд использую - их там две..

На пузе нет ничего.

 

sadman41
Offline
Зарегистрирован: 19.10.2016

Мысли тут могут быть одни - разобраться с питанием для начала. Потому что 3,3V снимается как мне помнится с CH340, которые ей самой позарез нужны.

dim3740
dim3740 аватар
Offline
Зарегистрирован: 25.03.2015

У меня есть видео 1,5 мин, где я сделал аналогичное на Адруино Микро PRO. Там стоит 1117-3.3.  На видео определение от БП просходит только после размыкания кабеля на ЮСБ устройство.  (Может достаточно размыкать только типа В3 - т.е. только питание... не знаю). И это надо делать также после каждого горячего ресета дуни.  К сожалению, показать есть ли НЕопределение при запитке от ЮСБ РС сложно - там нужен конвертер платка для программирования FTD типа.... Можно ее конечно найти.  ИМХО дело в несовершенстве алгоритма библы, т.е. код не хочет проверять подключение повторно, если сразу не определилось.... А разрыв инициирует как-то это снова. Даже перезагружается скетч, что вообще непонятно((((( 

sadman41
Offline
Зарегистрирован: 19.10.2016

Сумбурно как-то воспринимается. Наверное потому что у меня этого шилда нет и я с ним не работал.

Теоретически, думаю, проблема в скетче может быть. Так как в первом сообщении картинки/кода нет, то обсуждать пока что нечего. Я, конечно, могу почитать ваш скетч, но... см.абзац №1

Решитесь - пишите на wrk.sadman@gmail.com

 

dim3740
dim3740 аватар
Offline
Зарегистрирован: 25.03.2015

Вот я и удивлен, что никто не работал с ЮСБ девайсами. Потому что Ардуино под него негоже?? сТМ надо? :))))