Как стать автором
Обновить

Комментарии 21

не знаю как остальным, но окончания *ла в глаголах прошедшего времени, очень радуют глаз 8)
Не могу не согласиться. Для меня это каждый раз как бальзам.
Подскажите, хочу на stm32 сделать usb midi устройство. Может ли эта библиотека помочь или идти прямым путем через stm32cube?
не знаю как миди, но пытался сделать через stm32cube CDC виртуальный комп порт, всё вродебы хорошо, и скорости добился и приёма и передачи… но вот когда приём идёт независимо от передачи (режим не запрос-ответ, а режим шлём данные одни, получаем данные другие и шлём и получаем независимо). То в таком случае усб зависало — не приходило прерывание что данные приняты устройством ИЗ хоста. Я всё попробовал сделать и обвесил логами в озу всю либу, и изучил её вдоль и поперёк, и проверил регистры состояний, и переписал функцию-бога которая разруливает прерываниями. всё тчетно — устройство просто застопаривается, перестаёт идти и приём и передача. Причём эта бага явно на низком уровне работы с аппаратным контроллером USB на СТМ32Ф4.
А если попробовать использовать для приема один USART, а для передачи другой? Как минимум IRQ_Handler на прием и передачу будет разный. Просто скоро потребуется подобное решение сделать, обдумывал как реализовать и наткнулся на ваш комментарий.
я могу выложить свои наработки на гитхаб. Там:
1. взяты кубовые либы месячной давности (в конце мая разбирался) для Эклипса (мейкфайл тоже пашет)
2. всё собрано под STM32F4 value line discovery, 168мгц
3. Сделан полноценный принтф в фифо очередь в память (64к), чтоб не тормозила усб либа и чтоб из таймаутов не вывалится.
4. Эта очередь выводит в уарт2 данные по 500кбод без чётности, использовал CP2103
5. на базе этого принтф сделаны очень приятные глазу и понятные логи по кубовой усб либе. Есть возможность отключения: чтоб наваливало от души.
6. настроен CDC порт на максимальную для усб скорость приёма (800-900кбайт в сек) и передачи, просто приём с контролем целостности тестовых данных и отправка обратно в режиме эха (вроде, непомню).

Интересует?
С Вас поделится опытом если решите баг ну и статья на хабр была бы очень большым плюсом в карму, ну и за мной тоже не заржавеет.
Я же возьмусь за него может через месяц, может через полгода — работы много пока.
Поищи на github'e midi over usb проекты на stm32f4. Там есть абсолютно точно.

вот я какой-то из них пробовал.
Я полагаю, что не только поможет, но и скорее всего позволит сделать это быстрее, чем с помощью stm32cube. Мне, например, нужно было сделать устройство, являющееся хостом и составным (HID и MSD) устройством одновременно и у меня ушло на это всего 7 рабочих дней из которых 2 дня я разбиралась с тем, почему у меня mass storage не работает.
Здесь https://github.com/libopencm3/libopencm3-examples можно ознакомиться с примерами реализации usb midi, понять как все устроено и адаптировать под свои нужды. Не переживайте, если пример будет не для того семейства контроллеров STM32, с которым работаете, реализация usb в библиотеке довольно сильно развязана от таких зависимостей.
В этом документе http://sdphca.ucsd.edu/lab_equip_manuals/usb_20.pdf в главе 9 подробно описан USB DEVICE FRAMEWORK. Он поможет правильно описать все необходимые дескрипторы, понять какие запросы могут приходить от хоста и что на них нужно отвечать.
Проект собираете под win или linux?
под win, но на linux тоже запускали.
Тогда прошу минигайд по настройке тулчейна :)
Я работаю в Eclipse. Вот сайт GNU ARM Eclipse, там все супер подробно описано в разделе Inslall: как установить GNU ARM Eclipse plug-in, как настроить toolchain и как подцепить дебаггер =)
Я делал через SPL, реализовывали класс обмена по спецификации usb audio.
Вот ссылка https://github.com/JekaKey/Studiologic-VMK188-Plus-Plus
Описание и суть проекта тут http://rmmedia.ru/threads/117290/
HID & MSD — рискну предположить — отладчик mbed?
а на HID & MSD & CDC не думали?
нет, не угадали) это пока корпоративная тайна, но через месяц-два я смогу написать о нашей разработке!
Если я не ошибаюсь то «Standard Peripheral Library» производитель признал устаревшей и настоятельно рекомендует использовать cube вместо нее.
А там всё ещё страшнее, чем в SPL. Один USART чего стоит.
А SPL ещё не снят с поддержки, поэтому можно и им пользоваться без проблем.
Да, это так. Однако всегда возникают задачи, когда тебе важно знать, что реально функция делает, какие регистры трогает и. т. д. А в cube наворотили довольно массивный HAL и чтобы спуститься в самый ад (low level driver), нужно открыть миллион файлов, запутаться и вообще забыть зачем ты туда полез) В целом, единственный HAL которому я доверяю — это HAL ChibiOS. Но это уже вообще другая история)
НЛО прилетело и опубликовало эту надпись здесь
Анастасия, спасибо за статью. Было бы очень интересно почитать про задачи, с которыми вы сталкиваетесь на работе, и их решение, какие инструменты, литературу или так далее вы при этом используете, читаете ли какие-то профессиональные интернет-ресурсы по теме, и так далее. Мне попадалось очень мало информации по теме в открытых источниках. Пишите еще!

Думал над тем, что бы реализовать интерфейс к устройству, вроде /proc или /sys в Linux при помощи MSC. Что бы можно было обновлять прошивку, управлять разными флагами. Пока это сделано через Vendor Device и libusb в своей утилите. Но на Cypress FX3 это делать ручками придётся полностью, хотя там абстракция над USB и так здравая. Боюсь, правда, что время на это не выделят да и памяти уже кот наплакал. Правда утилита бы значительно упростилась бы со стороны хоста.

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