Форум программистов, компьютерный форум, киберфорум
Наши страницы

КИП, датчики

Войти
Регистрация
Восстановить пароль
 
 
Quadro-pro
4 / 4 / 0
Регистрация: 10.01.2014
Сообщений: 44
#1

Отправка данных в STM32F407VG Discovery используя HID USB в C# - КИП, датчики

23.01.2014, 16:21. Просмотров 10733. Ответов 34
Метки нет (Все метки)

Здравствуйте киберфорумчане )
Недавно задался вопросом как управлять контроллером STM32F407VG Discovery через HID USB используя своё ПО написанное в С#.
Для простоты чтобы понять принцип в интернете нашёл прошивку hex для контроллера (чтобы точно быть уверенным, что со стороны МК прошивка рабочая) и проверил её для надёжности с помощью утилиты от ST под названием HID USB Demonstrator. Диоды весело зажигаются всё норм.
Затем нашёл библиотеку HID USB Library которая думаю многим хорошо известна и стал разбираться как же управляется МК через ПК.

Для простоты в С# сделал минимальный код, чтобы проверить работу подключения устройства и отправкой данных.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using USBHIDDRIVER;
 
namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            //Подключаем библиотеку USBHIDDRIVER
            USBHIDDRIVER.USBInterface usb = new USBInterface("vid_0483","pid_5710"); 
           
         String[] list = usb.getDeviceList(); //Запрашиваем список устройств
           
 
           bool connect = usb.Connect(); // Устанавливаем соединение с устройством 
 
           if (connect == true) // выводим сообщение о состоянии подключения
           {
               Console.WriteLine(list[0]); //выводим данные об устройстве из первого знаечния в массиве
               Console.WriteLine();
               Console.WriteLine("USB Devise..On"); //пишем что устройство подключено (для удобства)
           }
            else
            {
                Console.WriteLine("USB Devise..Off"); // выводим сообщение если устройство откл. (тоже для удобства)
            }
 
 
 
           // а вот теперь самое непонятное, создаю массив из 2-х байт которые хочу отправить на МК
          // по идее должен загореться диод после запуска приложения
              
             byte[] data = { 1, 1 }; //создаём простой массив из 2-х байт
 
               usb.write(data); // отправляем массив (согласно описанию об этой команде, которая должна отправлять массив данных 
               Console.ReadLine();
           
        }
    }
}
В итоге что у меня получилось, прга увидела нужное устройство, (отображаются данные об устройстве)
Но по каким то причинам, не могу отправить команду на включение диода (МК работает исправно и в HID USB Demonstrator всё зажигается)

Вполне вероятно я тупо не так что-то делаю.

Если есть кто уже работал над похожей задачей?
Буду очень благодарен за любую подсказку))
0
Миниатюры
Отправка данных в STM32F407VG Discovery используя HID USB  в C#  
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.01.2014, 16:21
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Отправка данных в STM32F407VG Discovery используя HID USB в C# (КИП, датчики):

Перехват данных USB сканнера Xenon 1900 в HID режиме - КИП, датчики
Как перехватить поток данных идущий со сканера в ПК через USB вход ?

Работа с USB HID из верхнего уровня - КИП, датчики
Всем привет, задумал сделать приложение для ПК которое будет общатся с PIC микроконтроллером по USB (HID). Прошивку для PIC писал в...

Raspberry Pi. Доступ к USB HID через libusb - КИП, датчики
Все привет. Есть устройство работающее как USB HID.Но не могу написать программу считывания данных с нее. Есть код, могу выложить сюда, он...

Отправка нажатий 5-ти кнопок по USB - КИП, датчики
Добрый день! Возможно напишу немного непонятно, потому что сам никогда не сталкивался ни с этим вопросом, ни с вопросами, связанными с...

USB HID на STM32F3 Discovery - ARM
Доброго времени суток! Народ, помогите поладить с USB-HID. Что-то совсем ничего не получается... Уже вторые сутки бьюсь(( Выкидывает...

Работа с USB HID используя библиотеку от Florian Leitner-Fischer - C#
Добрый день. У меня возник вопрос по поводу работы с USB HID устройством используя библиотеку из данной статьи ...

34
raxp
10180 / 6563 / 481
Регистрация: 28.12.2010
Сообщений: 21,166
Записей в блоге: 1
23.01.2014, 16:45 #2
C#
1
byte[] data = { 0х01, 0х01 };
или дело в том, что:
согласно описанию об этой команде, которая должна отправлять массив данных
вы неправильно поняли описание данной команды из HID USB Demonstrator. Кстати, где оно, описание?

P.S.: и еще, метод write() класса USBInterface сам определяет размер массива? Лезть в кишки не очень хочется, чтобы это узнать ...почитал, сам определяет и делит.
0
Quadro-pro
4 / 4 / 0
Регистрация: 10.01.2014
Сообщений: 44
23.01.2014, 16:52  [ТС] #3
Я брал описание работы с этой библиотекой вот отсюда http://microsin.net/programming/PC/h...et-csharp.html
Но там просто говорится про массив и отправку без примера.
В C# я пробовал по разному писать, но эксперименты не дали результата ))
Сейчас попробовал как вы предложили...но результат нулевой ))
0
raxp
10180 / 6563 / 481
Регистрация: 28.12.2010
Сообщений: 21,166
Записей в блоге: 1
23.01.2014, 16:56 #4
...мне не нужно описание библиотеки, уже и так посмотрел.

Что насчет:
согласно описанию об этой команде, которая должна отправлять массив данных
где оно?
0
Quadro-pro
4 / 4 / 0
Регистрация: 10.01.2014
Сообщений: 44
23.01.2014, 16:59  [ТС] #5
Цитата Сообщение от raxp Посмотреть сообщение
...мне не нужно описание библиотеки, уже и так посмотрел.

Что насчет:
где оно?
К сожалению это всё что мне известно, ну может ещё что-то можно выудить из файла в самом C#
Но там тоже скудная сточка на англ про массив, мол если массив большем 64 то делиться на след массив

Сводка:
Writes the specified bytes to the USB device. If the array length exceeds 64, the array while be divided into several arrays with each containing 64 bytes. The 0-63 byte of the array is sent first, then the 64-127 byte and so on.

Параметры:
bytes: The bytes to send.

Возвращает:
Returns true if all bytes have been written successfully
0
raxp
10180 / 6563 / 481
Регистрация: 28.12.2010
Сообщений: 21,166
Записей в блоге: 1
23.01.2014, 17:39 #6
К сожалению это всё что мне известно
откуда это известно? Почему вывод о том, что два байта, а не один или пять? Все таки есть документация?

USB снифферами пробовали отследить обмен по шине?

Writes the specified bytes to the USB device. If the array length exceeds 64, the array while be divided into several arrays with each containing 64 bytes. The 0-63 byte of the array is sent first, then the 64-127 byte and so on.

Параметры:
bytes: The bytes to send.
отношения к делу не имеет, этот вопрос уже закрыт.
0
Quadro-pro
4 / 4 / 0
Регистрация: 10.01.2014
Сообщений: 44
23.01.2014, 17:57  [ТС] #7
Цитата Сообщение от raxp Посмотреть сообщение
откуда это известно? Почему вывод о том, что два байта, а не один или пять? Все таки есть документация?

USB снифферами пробовали отследить обмен по шине?

отношения к делу не имеет, этот вопрос уже закрыт.
Я решил что 2 байта потому что HID USB Demonstrator пишет в сводке об устройстве, что приём\отправка данных 2 байта..
Снифер принимает сообщение (при нажатии кнопки на МК) в виде 005 001 и 005 000 (нажата\отжата)
Но при отправки подобного сообщения в виде 001 001 тоже ничего не происходит ..
0
raxp
10180 / 6563 / 481
Регистрация: 28.12.2010
Сообщений: 21,166
Записей в блоге: 1
23.01.2014, 20:22 #8
Я решил что 2 байта потому что HID USB Demonstrator пишет в сводке об устройстве, что приём\отправка данных 2 байта..
так и пишет? А может 1 байт отправил, 1 принял? Т.е. просто гадание.

Снифер принимает сообщение (при нажатии кнопки на МК) в виде 005 001 и 005 000 (нажата\отжата)
приведите отображение в сниффере в HEX/
0
Quadro-pro
4 / 4 / 0
Регистрация: 10.01.2014
Сообщений: 44
23.01.2014, 21:03  [ТС] #9
Это отображение 2-х программ, в одной видно приём и отправка байтов и расшифровывется что и откуда, но она просто считывает всё что происходит с USB, это данные сичтаные при использовании HID USB Demonstrator т.е. рабочий вариант. Другая прога, где надписи 005 001, это программа из библиотеки к USB С# (я нашёл ещё одну библиотеку для C#) в ней данные не принимаются МК.
Думаю это скорее как-то связано параметрами самой библиотеки.
0
Миниатюры
Отправка данных в STM32F407VG Discovery используя HID USB  в C#   Отправка данных в STM32F407VG Discovery используя HID USB  в C#  
Quadro-pro
4 / 4 / 0
Регистрация: 10.01.2014
Сообщений: 44
23.01.2014, 21:11  [ТС] #10
Это отображение 2-х программ, в одной видно приём и отправка байтов и расшифровывается, что и откуда, но она просто считывает всё что происходит с USB, это данные считанные при использовании HID USB Demonstrator т.е. рабочий вариант. Там видно Transfer Bufer 0000: 05 01 (это тоже едйствие что и в другой проге 005 001, те. нажатие кнопки), а вот 01 01 это посылка команды в МК.

Другая прога, где надписи 005 001, это программа из библиотеки к USB С# (я нашёл ещё одну библиотеку для C#) в ней данные не принимаются МК. Ответ 005 001 и 005 000 это ответ на нажетие кнопки на МК, а вот отправить данные не получается
Думаю это скорее как-то связано параметрами самой библиотеки.. т.е. мне надо как-то разобраться как она работает.
0
Quadro-pro
4 / 4 / 0
Регистрация: 10.01.2014
Сообщений: 44
24.01.2014, 01:44  [ТС] #11
После долго разбора кода другой библиотеки HID USBLibraty в программе которая прилагалась к библиотеки в виде файлов C# наконец-то нашёл ошибку почему не отправлялись данные в виде 001 001.
В SpecifiedOutputReport.cs была допущена ошибка в которой массив начинался с единицы в то время как должна с нуля. После правки, байты стали отправлять команды.

Здесь я прикреплю эту библиотеку HID USB c рабочим кодом. Она может быть несколько поудобней чем ту которую я использовал в топике темы, но если я найду способ как отправлять данные на STM32F407VG с помощью той библиотеки, то отпишусь.

Так же в архиве приложил рабочую прошивку для МК STM32F407VG hex формата.

Но всё же, теперь надо это как-то прикрутить к своей программе C# )))
1
Вложения
Тип файла: zip UsbLibraryC#.zip (396.2 Кб, 129 просмотров)
raxp
10180 / 6563 / 481
Регистрация: 28.12.2010
Сообщений: 21,166
Записей в блоге: 1
24.01.2014, 02:23 #12
...из интересу, будет срабатывать репорт?
0
Вложения
Тип файла: zip test_hidout.zip (431.8 Кб, 77 просмотров)
Quadro-pro
4 / 4 / 0
Регистрация: 10.01.2014
Сообщений: 44
24.01.2014, 02:37  [ТС] #13
Цитата Сообщение от raxp Посмотреть сообщение
...из интересу, будет срабатывать репорт?
Да, срабатывает ))) ..только там работает первая кнопка потому что первый байт определяет порт, а второй управляющий, ну т.е. 0 выкл/ 1 вкл )) ..типа (0х01, 0x01) (0x02, 0x01) или (0х01, 0x00) и т.д. .. а так всё отлично работает )))
0
raxp
10180 / 6563 / 481
Регистрация: 28.12.2010
Сообщений: 21,166
Записей в блоге: 1
24.01.2014, 10:07 #14
...а, ну так я ж приложил исходник и пример использования самой DLL с описанием. Вы можете ее использовать, через маршаллинг в C#.

работает первая кнопка потому что первый байт определяет порт, а второй управляющий
это уже так реализовано в прошивке дискавери. Первый байт в HID-обмене определяет - репорт устройства, второй - данные.
1
Quadro-pro
4 / 4 / 0
Регистрация: 10.01.2014
Сообщений: 44
24.01.2014, 14:57  [ТС] #15
А кстати, меня удивило, что в вашем примере, у тестовой програмки совпал vid и pid устройства.
Вы что-то меняли или это просто случайное совпадение?
0
24.01.2014, 14:57
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.01.2014, 14:57
Привет! Вот еще темы с ответами:

Реализация обмена данных по USB Custom class на STM32F4-Discovery - ARM
Доброго времени суток! С недавнего времени у меня оказалась на руках платка STM32F4 Discovery и была поставлена некоторая задача. Требуется...

Прием данных по USB от HID устройства - Delphi
Добрый день. Столкнулся с нетривиальной для себя задачей получения данных по usb с hid-устройства. Вся документация по данному устройству...

Stm32f407vg usb otg - ARM
Камень stm32f407vg Шины ~3.3v , ~5.0v Дайте вминяемую схему подключения... Гугл не помог.

Перехват данных с USB устройств класса HID - Delphi WinAPI
Доброго всем времени суток! Как перехватить поток данных с USB устройства, которое относится к классу HID ( UBS HID -...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru