us_uart1Да, да я добрался и до этой темы. На самом деле, USB в планах стоял уже давно, ознакомиться с основной идеей было не сложно, но много времени ушло на обдумывание того, что требуется и в каком виде. Тем не менее первые шаги сделаны, скромный результат имеется.

То что задача далеко не тривиальная, думаю многие наслышаны, представьте себе вы должны:
1. найти железо, которое можно подключить к USB ПК (микроконтроллер с обвязкой)
2. написать софт для этой железяки (прошивка микроконтроллера)
3. выбрать драйвер (возможно написать самому)
4. написать управляющую программу со стороны ПК

Видно, что работы не на один день. Поэтому задачу нужно было по максимуму разделить на мелкие решаемые части. Первая мысль разделить hardware и software части, причем железяка нужна была в первую очередь, ибо это тот самый вариант, когда отлаживаться лучше на железе. Для любителей извращений, в протеусе есть пример использования AT90USB… которая при запуске симуляции определяется в системе как COM порт, к которому можно цепляться терминалкой и кидать байты. В протеусе результат будет выводиться на Virtual Terminal. Только очень высокий шанс словить экран смерти, я гарантирую 🙂

Изначально я планировал сделать платку на меге8 и заюзать V-USB, но хотелось быть уверенным в железе на 100%, покупать готовое жаба задушила. В планах было и использование DiscoveryF4, но шанс того, что будут годные примеры был достаточно небольшой, поэтому эту мысль отодвигал. Короч, решиться было сложно, в итоге STM победили. На самом деле, все оказалось не так плохо, потому что существует множество библиотек, а вот примеров как и предполагал маловато. Для кокоса, нашелся всего один. Но этого хватило.

Проект загружен, подключаем к компьютеру, шуршит, ищет драйвер. Нашелся. Тут нужно немного пояснить, для каждого класса устройств есть свой драйвер, который определяется по PID и VID, это магические числа, которые посылает наше устройство. Условно говоря это номер производителя и номер устройства. Эти номера присваиваются индивидуально. Но суть в том, что достаточно вам изменить их в прошивке микроконтроллера и операционная система подсунет другой драйвер.

Сами драйвера подразделяются на множество типов, это тема для отдельной статьи, пока не лезем внутрь, наша задача обосноваться. Если вкратце, то нас интересует HID, ибо он позволит нам передавать произвольные данные. Итак, после того как компьютер пошуршит, он подсовывает два драйвера — устройство ввода и Hid устройство. Третье устройство ввода это мышка.
hid_stm32
Далее встал вопрос как быть с управляющей программой, по идее автор утверждал, что должно работать с софтиной от ST называемой HID Demo, этот момент пока мне не понятен, но устройство не появляется в списке, я уж думал что прошивка не рабочая, помогла программа Snoopy Pro — это сниффер для USB, с помощью нее я понял что все работает, так как по нажатию на кнопку приходили пакеты. В итоге решил писать свою прогу, естественно на C#. Встроенный средств по работе с USB у Visual C# не нашел, поэтому нагуглил LibUsbDotNet, это библиотека, которую нужно подключить к проекту.

Подключил, написал программку, которая по нажатию кнопки определяет подключено ли устройство с определенным PID и VID, или нет.

      private void button1_Click(object sender, EventArgs e)
        {
 
            UsbDeviceFinder devFind = new UsbDeviceFinder(0x0477, 0x5620);
            UsbDevice myDev = UsbDevice.OpenUsbDevice(devFind);
 
            if (myDev != null) 
            {
                button1.Text = "yes";
                myDev.Close();
            }
            else
                button1.Text = "no";
 
        }

Как ни крутил ничего не работало, хотя должно, и как бы не хотелось, пришлось читать даташит 🙂 Оказалось в папке библиотеки есть программа install-filter-win, нужно выбрать свой девайс и нажать install filter
hid_stm32_2

Этот момент тоже не понятен, но все заработало, в самописной программке все определяется. Заодно, если покопаться, в папке то находим программку называемую Test_Bulk. Которая позволяет отправлять и принимать байты. Если отправить 1 — загорится светодиод на PD12, 2 — второй светодиод, 4 — третий, 8 — четвертый. Все как задумано в прошивке. При нажатии на кнопку пакеты приходят.
usb_bulk

На этот раз, я специально не стал рассматривать тему глубже, всему свое время, проект есть, работает, будем разбираться и осваивать, модифицировать. Кого интересует исходный проект, вся инфа от автора внутри. Взято с форума кокоса.

7 комментариев: Ковыряем USB на STM32F4. Шаг первый

  • мож поподробней???

  • Можно, будет

  • В папке нет программы testbulk.exe.
    Где её взять?
    Этот момент тоже не понятен, но все заработало,…………
    Хорош язык описания.
    Взялся за гуж не говори что не дюж.
    Из всего текста я ничего не понял.

  • testbulk относится к libusbdotnet там его и ищите. Когда ничего не понятно, обычно идут читать даташит

  • Значит достаточно вставить несколько картинок в текст и назвать это уроком.
    Если бы вас так учили в школе, то вы я думаю не осилили и букварь.
    Сказав А надо говорить и Б.
    А так статьи пустые.
    Надо детально описывать процессы.

  • Пишите свои детальные статьи, я буду только рад.

  • Писать ругательные коменты всякий может.Сами попробуйте написать чего нибудь интересное-больше пользы будет.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Последние комментарии
  • Загрузка...
Счетчик
Яндекс.Метрика