реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> STM32 USBTMC host?, Кто нибудь делал?
khach
сообщение Nov 24 2013, 10:46
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 3 439
Регистрация: 29-12-04
Пользователь №: 1 741



Добрый день!
Возникла необходимость организовать общение STM32F4 с измерительным прибором по USB. Прибор при работе с копьютером использует NI VISA, т.е скорее всего соответсвует классу USBTMC (test and measurement). В связи с этим разыскиваются исходники ХОСТА для STM32F4 для класса USBTMC. Или выслушаю советы по допилке существующих хостов под данный класс.
Go to the top of the page
 
+Quote Post
Real_Bastard
сообщение Dec 11 2013, 12:39
Сообщение #2


Участник
*

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



Цитата(khach @ Nov 24 2013, 14:46) *
Прибор при работе с копьютером использует NI VISA, т.е скорее всего соответсвует классу USBTMC (test and measurement).

"При решении задачи всегда полезно знать ответ." Я бы начал с установки USB сниффера на PC и разбора протокола. Так Вы узнаете как это должно работать. А дальше можно и СТМный стек пилить. Он конечно ужасный, но разобраться можно.
Еще я бы создал на том же СТМ эмулятор устройства, благо USB девайс сильно проще, и получил бы отладочные сообщения с двух сторон.
Go to the top of the page
 
+Quote Post
khach
сообщение Dec 11 2013, 16:05
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 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 лежит стандарт и ажилентовский драйвер-хост для ллинуха.
Go to the top of the page
 
+Quote Post
Real_Bastard
сообщение Dec 11 2013, 20:53
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 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, которые как бы должны чередоваться, этого делать не хотят...
Go to the top of the page
 
+Quote Post
mantech
сообщение Dec 12 2013, 06:37
Сообщение #5


Гуру
******

Группа: Участник
Сообщений: 2 219
Регистрация: 16-08-12
Из: Киров
Пользователь №: 73 143



Цитата(Real_Bastard @ Dec 12 2013, 00:53) *
Берется демо библиотека Хоста от СТМ.


Выскажу свое скромное мнение - все-таки библиотеки и сам хост от СТМ не распологают к таким экспериментам. Может все-таки выбрать микроконтроллер со стандартным контроллером USB типа UHCI-совместимого? Или потренироваться на MS-DOS-совместимых моникомпах, где как раз такие контроллеры...
Go to the top of the page
 
+Quote Post
khach
сообщение Dec 12 2013, 08:01
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 3 439
Регистрация: 29-12-04
Пользователь №: 1 741



Цитата(Real_Bastard @ Dec 11 2013, 22:53) *
Необходимо реализовать 4 функции

Спасибо за подробное оъяснение, буду копать в этом направлении.
Вопрос- у меня на демоплате кроеме хоста USB есть эзернет, который более-менее работоспособный. Хотелось бы иметь возможность протоколировать все, что происходит с самописным USB хостом на копме, используя эзернет как отладочный интерфейс. Можете посоветовать протокол эзернета и приложени для компа для такой отладки? Или под какой существующий снифер-отладчик протоклов можно "замаскироваться" ?
Go to the top of the page
 
+Quote Post
Real_Bastard
сообщение Dec 12 2013, 10:13
Сообщение #7


Участник
*

Группа: Участник
Сообщений: 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
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Dec 12 2013, 10:14
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



на АРМе поднимите ТСР (без ТСР стэка все равно с компом не общатся, даже UDP все равно делать надо, так лучше сразу готовый стэк взять)
потом берете консольную програмку netcat есть и для виндов и для юниксов
она умеет конектиться на ТСР, все что на сокет ТСР внутри проца упало, в ней на экран выводиться,
все что в нее записали на ТСР сокет приходиит.

пихаете текст в езернет и трава не расти....
Go to the top of the page
 
+Quote Post
khach
сообщение Dec 12 2013, 12:11
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 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 подобную опенсоурсную.
Go to the top of the page
 
+Quote Post
Real_Bastard
сообщение Dec 12 2013, 12:57
Сообщение #10


Участник
*

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



"Curiouser and curiouser!..."
Значит хост у Вас уже есть. В чем тогда задача?
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Dec 12 2013, 13:12
Сообщение #11


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



да что-то я тоже потерял уже нить чего хочет авторsm.gif
Go to the top of the page
 
+Quote Post
khach
сообщение Dec 12 2013, 13:39
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 3 439
Регистрация: 29-12-04
Пользователь №: 1 741



Цитата(Real_Bastard @ Dec 12 2013, 14:57) *
"Curiouser and curiouser!..."
Значит хост у Вас уже есть. В чем тогда задача?

Рабочего хоста нет, есть прототип. Который иногда падает непонятно почему. При работе девайса не на самописном хосте, а на компьютере с включенным usbtrace (нужна версия 2.7 или более новая тогда TMC класс декодируется) устройство тоже иногда зависает, поэтому непонятно, виноват ли самописный хост или фирмварь устройства.
Цитата
да что-то я тоже потерял уже нить чего хочет автор

Автор хочет, чтобы устройство измерителя мощности лазерного излучения Thorlabs PS100 USB работало с автономным контролером и не вешалось по неизвестным причинам.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 06:00
Рейтинг@Mail.ru


Страница сгенерированна за 0.01434 секунд с 7
ELECTRONIX ©2004-2016