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

STM32 USBTMC host?

Добрый день!

Возникла необходимость организовать общение STM32F4 с измерительным прибором по USB. Прибор при работе с копьютером использует NI VISA, т.е скорее всего соответсвует классу USBTMC (test and measurement). В связи с этим разыскиваются исходники ХОСТА для STM32F4 для класса USBTMC. Или выслушаю советы по допилке существующих хостов под данный класс.

 

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


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

Прибор при работе с копьютером использует NI VISA, т.е скорее всего соответсвует классу USBTMC (test and measurement).

"При решении задачи всегда полезно знать ответ." Я бы начал с установки USB сниффера на PC и разбора протокола. Так Вы узнаете как это должно работать. А дальше можно и СТМный стек пилить. Он конечно ужасный, но разобраться можно.

Еще я бы создал на том же СТМ эмулятор устройства, благо USB девайс сильно проще, и получил бы отладочные сообщения с двух сторон.

 

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


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

"При решении задачи всегда полезно знать ответ." Я бы начал с установки USB сниффера на PC и разбора протокола. Так Вы узнаете как это должно работать. А дальше можно и СТМный стек пилить. Он конечно ужасный, но разобраться можно.

А что там разбираться? Обычный USBTMC- команды SCPI бегут туда, ответ-обратно. Длинные транзакции, асинхронные евенты и пулы неиспользуются, поэтому насколько полно реализован USBTMC в соответствии со стандартом- неизвестно, да и ненужно. Немного криво реализован поиск устройства- ищется что то типа МАК адреса, а потом юзверя спрашивают, хотите ли вы с этим устройством работать, но я попросту раскидываю *IDN на все найденные устройства и с нужным работаю.

Проблема в том, что никогда хост не писал, и как его переделывать- пока имею смутное предположение.

Для референции https://github.com/imrehg/usbtmc лежит стандарт и ажилентовский драйвер-хост для ллинуха.

 

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


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

Проблема в том, что никогда хост не писал, и как его переделывать- пока имею смутное предположение.

Берется демо библиотека Хоста от СТМ. В ее инициализации есть указатель на пользовательский класс _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, которые как бы должны чередоваться, этого делать не хотят...

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


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

Берется демо библиотека Хоста от СТМ.

 

Выскажу свое скромное мнение - все-таки библиотеки и сам хост от СТМ не распологают к таким экспериментам. Может все-таки выбрать микроконтроллер со стандартным контроллером USB типа UHCI-совместимого? Или потренироваться на MS-DOS-совместимых моникомпах, где как раз такие контроллеры...

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


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

Необходимо реализовать 4 функции

Спасибо за подробное оъяснение, буду копать в этом направлении.

Вопрос- у меня на демоплате кроеме хоста USB есть эзернет, который более-менее работоспособный. Хотелось бы иметь возможность протоколировать все, что происходит с самописным USB хостом на копме, используя эзернет как отладочный интерфейс. Можете посоветовать протокол эзернета и приложени для компа для такой отладки? Или под какой существующий снифер-отладчик протоклов можно "замаскироваться" ?

 

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


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

Не очень понял задачу. Если хочется кидать отладочные сообщения не через 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

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


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

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

потом берете консольную програмку netcat есть и для виндов и для юниксов

она умеет конектиться на ТСР, все что на сокет ТСР внутри проца упало, в ней на экран выводиться,

все что в нее записали на ТСР сокет приходиит.

 

пихаете текст в езернет и трава не расти....

 

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


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

Не очень понял задачу. Если хочется кидать отладочные сообщения не через UART, а через ETHERNET, то я бы вывел вывод printf в буфер. Буфер отсылал по UDP. А на компе UDP терминалку (Hercules SETUP utility и т.п.).

Такой вариант уже реализован. Но это не совсем то, что надо. Дело в том, что устройство, подключенное к USB хост время от времени падает. Хотелось бы поймать этот момент и подробнее разобраться, какова предистория падения. Т.е или нужен аппаратный USB снифер, или сэмулировать снифер программно, при этом хотелось бы оболочку для анализа результатов работы снифера использовать готовую. Типа vusb-analyzer , https://github.com/desowin/usbpcap или OpenVizsla подобную опенсоурсную.

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


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

"Curiouser and curiouser!..."

Значит хост у Вас уже есть. В чем тогда задача?

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


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

"Curiouser and curiouser!..."

Значит хост у Вас уже есть. В чем тогда задача?

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

да что-то я тоже потерял уже нить чего хочет автор

Автор хочет, чтобы устройство измерителя мощности лазерного излучения Thorlabs PS100 USB работало с автономным контролером и не вешалось по неизвестным причинам.

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


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

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

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

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

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

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

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

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

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

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