khach 44 24 ноября, 2013 Опубликовано 24 ноября, 2013 · Жалоба Добрый день! Возникла необходимость организовать общение STM32F4 с измерительным прибором по USB. Прибор при работе с копьютером использует NI VISA, т.е скорее всего соответсвует классу USBTMC (test and measurement). В связи с этим разыскиваются исходники ХОСТА для STM32F4 для класса USBTMC. Или выслушаю советы по допилке существующих хостов под данный класс. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Real_Bastard 0 11 декабря, 2013 Опубликовано 11 декабря, 2013 · Жалоба Прибор при работе с копьютером использует NI VISA, т.е скорее всего соответсвует классу USBTMC (test and measurement). "При решении задачи всегда полезно знать ответ." Я бы начал с установки USB сниффера на PC и разбора протокола. Так Вы узнаете как это должно работать. А дальше можно и СТМный стек пилить. Он конечно ужасный, но разобраться можно. Еще я бы создал на том же СТМ эмулятор устройства, благо USB девайс сильно проще, и получил бы отладочные сообщения с двух сторон. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
khach 44 11 декабря, 2013 Опубликовано 11 декабря, 2013 · Жалоба "При решении задачи всегда полезно знать ответ." Я бы начал с установки USB сниффера на PC и разбора протокола. Так Вы узнаете как это должно работать. А дальше можно и СТМный стек пилить. Он конечно ужасный, но разобраться можно. А что там разбираться? Обычный USBTMC- команды SCPI бегут туда, ответ-обратно. Длинные транзакции, асинхронные евенты и пулы неиспользуются, поэтому насколько полно реализован USBTMC в соответствии со стандартом- неизвестно, да и ненужно. Немного криво реализован поиск устройства- ищется что то типа МАК адреса, а потом юзверя спрашивают, хотите ли вы с этим устройством работать, но я попросту раскидываю *IDN на все найденные устройства и с нужным работаю. Проблема в том, что никогда хост не писал, и как его переделывать- пока имею смутное предположение. Для референции https://github.com/imrehg/usbtmc лежит стандарт и ажилентовский драйвер-хост для ллинуха. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Real_Bastard 0 11 декабря, 2013 Опубликовано 11 декабря, 2013 · Жалоба Проблема в том, что никогда хост не писал, и как его переделывать- пока имею смутное предположение. Берется демо библиотека Хоста от СТМ. В ее инициализации есть указатель на пользовательский класс _Device_cb. Необходимо реализовать 4 функции ● Init: this function is called at the startup of a class operation for assuring all required initializations. This includes: – Parsing interface and endpoint descriptors (please note that the current USB host library supports only one interface). – Opening and allocating host channels for non-control endpoints, – Calling a user callback, in case the device is not supported by the class. ● Denit: this function is called for freeing allocated host channels when re-initializing the host. It is called when a device is unplugged or in case of unrecovered error. ● Requests: this function implements the class request state machine. It is called during the HOST_CLASS_REQUEST state. It is used to process initial class requests. ● Machine: implements the class core state machine. It is called during the HOST_CLASS core state. В примерах есть реализация этих функций для ХИДа и массСторейджа. Ну и так же в инициализацию пихается указатель на класс USR_Callbacks, который плюется мессагами типа > USB host Library started. > Device attached > High speed detected. VID:0483h PID: 3251h Но с библиотеками от СТМ есть такая проблема, что в них периодически встречаются (или подразумеваются) комментарии в стиле "эта функция могла бы вернуть ошибку, но мы это не реализовали...". Иногда спасает версия посвежее. Как-то две недели пытался понять почему один ЮСБ джойстик работает идеально, а второй подвисает. Оказалось что PIDы DATA0 и DATA1, которые как бы должны чередоваться, этого делать не хотят... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 53 12 декабря, 2013 Опубликовано 12 декабря, 2013 · Жалоба Берется демо библиотека Хоста от СТМ. Выскажу свое скромное мнение - все-таки библиотеки и сам хост от СТМ не распологают к таким экспериментам. Может все-таки выбрать микроконтроллер со стандартным контроллером USB типа UHCI-совместимого? Или потренироваться на MS-DOS-совместимых моникомпах, где как раз такие контроллеры... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
khach 44 12 декабря, 2013 Опубликовано 12 декабря, 2013 · Жалоба Необходимо реализовать 4 функции Спасибо за подробное оъяснение, буду копать в этом направлении. Вопрос- у меня на демоплате кроеме хоста USB есть эзернет, который более-менее работоспособный. Хотелось бы иметь возможность протоколировать все, что происходит с самописным USB хостом на копме, используя эзернет как отладочный интерфейс. Можете посоветовать протокол эзернета и приложени для компа для такой отладки? Или под какой существующий снифер-отладчик протоклов можно "замаскироваться" ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Real_Bastard 0 12 декабря, 2013 Опубликовано 12 декабря, 2013 (изменено) · Жалоба Не очень понял задачу. Если хочется кидать отладочные сообщения не через UART, а через ETHERNET, то я бы вывел вывод printf в буфер. Буфер отсылал по UDP. А на компе UDP терминалку (Hercules SETUP utility и т.п.). Вот примерно так (за основу STSW-STM32070 LwIP TCP/IP stack demonstration for STM32F4x7 microcontrollers (AN3966) )... while (1) { /* Host Task handler */ USBH_Process(&USB_OTG_Core_dev , &USB_Host); /* check if any packet received */ if (ETH_CheckFrameReceived()) { /* process received ethernet packet */ LwIP_Pkt_Handle(); } /* handle periodic timers for LwIP */ LwIP_Periodic_Handle(LocalTime); //Проверяем есть ли отладочные сообщения textLen= get_new_text(textBuf); if (textLen>0) { /* allocate pbuf from pool*/ p = pbuf_alloc(PBUF_TRANSPORT, textLen, PBUF_POOL); if (p != NULL ) { /* copy data to pbuf */ pbuf_take(p, (char*) textBuf, textLen); /* send udp data */ udp_send(upcb, p); /* free pbuf */ pbuf_free(p); } } } Изменено 12 декабря, 2013 пользователем Real_Bastard Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 12 декабря, 2013 Опубликовано 12 декабря, 2013 · Жалоба на АРМе поднимите ТСР (без ТСР стэка все равно с компом не общатся, даже UDP все равно делать надо, так лучше сразу готовый стэк взять) потом берете консольную програмку netcat есть и для виндов и для юниксов она умеет конектиться на ТСР, все что на сокет ТСР внутри проца упало, в ней на экран выводиться, все что в нее записали на ТСР сокет приходиит. пихаете текст в езернет и трава не расти.... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
khach 44 12 декабря, 2013 Опубликовано 12 декабря, 2013 · Жалоба Не очень понял задачу. Если хочется кидать отладочные сообщения не через UART, а через ETHERNET, то я бы вывел вывод printf в буфер. Буфер отсылал по UDP. А на компе UDP терминалку (Hercules SETUP utility и т.п.). Такой вариант уже реализован. Но это не совсем то, что надо. Дело в том, что устройство, подключенное к USB хост время от времени падает. Хотелось бы поймать этот момент и подробнее разобраться, какова предистория падения. Т.е или нужен аппаратный USB снифер, или сэмулировать снифер программно, при этом хотелось бы оболочку для анализа результатов работы снифера использовать готовую. Типа vusb-analyzer , https://github.com/desowin/usbpcap или OpenVizsla подобную опенсоурсную. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Real_Bastard 0 12 декабря, 2013 Опубликовано 12 декабря, 2013 · Жалоба "Curiouser and curiouser!..." Значит хост у Вас уже есть. В чем тогда задача? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 12 декабря, 2013 Опубликовано 12 декабря, 2013 · Жалоба да что-то я тоже потерял уже нить чего хочет автор:) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
khach 44 12 декабря, 2013 Опубликовано 12 декабря, 2013 · Жалоба "Curiouser and curiouser!..." Значит хост у Вас уже есть. В чем тогда задача? Рабочего хоста нет, есть прототип. Который иногда падает непонятно почему. При работе девайса не на самописном хосте, а на компьютере с включенным usbtrace (нужна версия 2.7 или более новая тогда TMC класс декодируется) устройство тоже иногда зависает, поэтому непонятно, виноват ли самописный хост или фирмварь устройства. да что-то я тоже потерял уже нить чего хочет автор Автор хочет, чтобы устройство измерителя мощности лазерного излучения Thorlabs PS100 USB работало с автономным контролером и не вешалось по неизвестным причинам. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться