|
|
  |
STM32 USBTMC host?, Кто нибудь делал? |
|
|
|
Dec 11 2013, 12:39
|
Участник

Группа: Участник
Сообщений: 39
Регистрация: 7-11-06
Из: Санкт-Петербург
Пользователь №: 22 041

|
Цитата(khach @ Nov 24 2013, 14:46)  Прибор при работе с копьютером использует NI VISA, т.е скорее всего соответсвует классу USBTMC (test and measurement). "При решении задачи всегда полезно знать ответ." Я бы начал с установки USB сниффера на PC и разбора протокола. Так Вы узнаете как это должно работать. А дальше можно и СТМный стек пилить. Он конечно ужасный, но разобраться можно. Еще я бы создал на том же СТМ эмулятор устройства, благо USB девайс сильно проще, и получил бы отладочные сообщения с двух сторон.
|
|
|
|
|
Dec 11 2013, 16:05
|
Гуру
     
Группа: Свой
Сообщений: 3 439
Регистрация: 29-12-04
Пользователь №: 1 741

|
Цитата(Real_Bastard @ Dec 11 2013, 15:39)  "При решении задачи всегда полезно знать ответ." Я бы начал с установки USB сниффера на PC и разбора протокола. Так Вы узнаете как это должно работать. А дальше можно и СТМный стек пилить. Он конечно ужасный, но разобраться можно. А что там разбираться? Обычный USBTMC- команды SCPI бегут туда, ответ-обратно. Длинные транзакции, асинхронные евенты и пулы неиспользуются, поэтому насколько полно реализован USBTMC в соответствии со стандартом- неизвестно, да и ненужно. Немного криво реализован поиск устройства- ищется что то типа МАК адреса, а потом юзверя спрашивают, хотите ли вы с этим устройством работать, но я попросту раскидываю *IDN на все найденные устройства и с нужным работаю. Проблема в том, что никогда хост не писал, и как его переделывать- пока имею смутное предположение. Для референции https://github.com/imrehg/usbtmc лежит стандарт и ажилентовский драйвер-хост для ллинуха.
|
|
|
|
|
Dec 11 2013, 20:53
|
Участник

Группа: Участник
Сообщений: 39
Регистрация: 7-11-06
Из: Санкт-Петербург
Пользователь №: 22 041

|
Цитата(khach @ Dec 11 2013, 20:05)  Проблема в том, что никогда хост не писал, и как его переделывать- пока имею смутное предположение. Берется демо библиотека Хоста от СТМ. В ее инициализации есть указатель на пользовательский класс _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, которые как бы должны чередоваться, этого делать не хотят...
|
|
|
|
|
Dec 12 2013, 10:13
|
Участник

Группа: Участник
Сообщений: 39
Регистрация: 7-11-06
Из: Санкт-Петербург
Пользователь №: 22 041

|
Не очень понял задачу. Если хочется кидать отладочные сообщения не через 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); } } }
Сообщение отредактировал Real_Bastard - Dec 12 2013, 10:14
|
|
|
|
|
Dec 12 2013, 12:11
|
Гуру
     
Группа: Свой
Сообщений: 3 439
Регистрация: 29-12-04
Пользователь №: 1 741

|
Цитата(Real_Bastard @ Dec 12 2013, 13:13)  Не очень понял задачу. Если хочется кидать отладочные сообщения не через UART, а через ETHERNET, то я бы вывел вывод printf в буфер. Буфер отсылал по UDP. А на компе UDP терминалку (Hercules SETUP utility и т.п.). Такой вариант уже реализован. Но это не совсем то, что надо. Дело в том, что устройство, подключенное к USB хост время от времени падает. Хотелось бы поймать этот момент и подробнее разобраться, какова предистория падения. Т.е или нужен аппаратный USB снифер, или сэмулировать снифер программно, при этом хотелось бы оболочку для анализа результатов работы снифера использовать готовую. Типа vusb-analyzer , https://github.com/desowin/usbpcap или OpenVizsla подобную опенсоурсную.
|
|
|
|
|
Dec 12 2013, 12:57
|
Участник

Группа: Участник
Сообщений: 39
Регистрация: 7-11-06
Из: Санкт-Петербург
Пользователь №: 22 041

|
"Curiouser and curiouser!..." Значит хост у Вас уже есть. В чем тогда задача?
|
|
|
|
|
Dec 12 2013, 13:39
|
Гуру
     
Группа: Свой
Сообщений: 3 439
Регистрация: 29-12-04
Пользователь №: 1 741

|
Цитата(Real_Bastard @ Dec 12 2013, 14:57)  "Curiouser and curiouser!..." Значит хост у Вас уже есть. В чем тогда задача? Рабочего хоста нет, есть прототип. Который иногда падает непонятно почему. При работе девайса не на самописном хосте, а на компьютере с включенным usbtrace (нужна версия 2.7 или более новая тогда TMC класс декодируется) устройство тоже иногда зависает, поэтому непонятно, виноват ли самописный хост или фирмварь устройства. Цитата да что-то я тоже потерял уже нить чего хочет автор Автор хочет, чтобы устройство измерителя мощности лазерного излучения Thorlabs PS100 USB работало с автономным контролером и не вешалось по неизвестным причинам.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|