|
Своя программная обёртка USB stm32, Создание своего драйвера USB для STM32 |
|
|
|
Aug 4 2017, 06:59
|
Группа: Участник
Сообщений: 12
Регистрация: 15-05-17
Пользователь №: 97 085

|
Работаю над собственным драйвером для USB в STM32 , что-то мало материала. 99 % как скомпилировать готовый пример. Кто занимался аналогичной задачей? В принципе значительная часть уже сделана.
|
|
|
|
|
 |
Ответов
|
Aug 5 2017, 13:01
|

Ally
     
Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050

|
Цитата(Шаманъ @ Aug 5 2017, 14:05)  Если под драйвером понимать то, что в МК обеспечивает работу USB интерфейса, то у меня написано свое под STM32 (назовем USB стек+некая HAL прослойка, хотя с платформонезависимостью я особо не заморачивался). А в чем собственно вопрос? Ну так автор наверно хочет узнать что же входит или должно входить в состав "своего" Расскажите что у вас там "своё". Хост или дивайс вы сделали, или может OTG? Покажите список вызовов вашего API между аппаратурой и фреймворком. Это ж не секретно? А также между фреймворком и классами. Или если нет у вас такого деления на уровни, то расскажите почему. Покажите список классов которые вы реализовали. Покажите как сделан адаптер к RTOS, как реентерабельность обеспечена и т.д. и т.п.
|
|
|
|
|
Aug 6 2017, 09:21
|
Знающий
   
Группа: Участник
Сообщений: 758
Регистрация: 27-08-08
Пользователь №: 39 839

|
Цитата(AlexandrY @ Aug 5 2017, 16:01)  Ну так автор наверно хочет узнать что же входит или должно входить в состав "своего" Расскажите что у вас там "своё". Хост или дивайс вы сделали, или может OTG? У меня свое все  , включая RTOS, графику, математику и т.д. Касательно USB реализован USB device, host/OTG мне не интересен, потому не реализовывался. Цитата Покажите список вызовов вашего API между аппаратурой и фреймворком. Это ж не секретно? А также между фреймворком и классами. Или если нет у вас такого деления на уровни, то расскажите почему. Покажите список классов которые вы реализовали. Реализованы CDC и аудио устройство, может быть сделаю еще Mass Storage. Деление на уровни есть - нижний уровень общается непосредственно с аппаратурой, ядро реализует обработку базовых запросов и обеспечивает обработку запросов классами, классы взаимодействуют с первыми двумя уровнями, полная изоляция не делалась. Ставилась задача сделать не универсального монстра (таких хватает), а маленький модуль под конкретные задачи. В итоге три VCP и аудио устройство (стерео in/out) у меня занимают: - базовый модуль (HAL+ядро) 5.2кбайт флеша - CDC класс (виртуальный ком порт) - 1119байт - Аудио класс - 456байт флеша API между классами и стеком несколько нетрадиционен по части стандартных запросов, они реализованы через "карты" обработчиков (по типу того, как сделана обработка событий в MFC/ATL/WTL). Поэтому у меня нет аццких switchей  Также все дескрипторы сделаны через макросы, так что нет необходимости подсчитывать их длины, порядок байт и прочую ерунду. Например строковые дескрипторы: Код STRINGS_TABLE(Strings) { LANGUAGES(0x409), STRING(u"Oleg xxxxxxxxx"), /* 1 = MANUFACTURER */ STRING(u"xxxxt"), /* 2 = PRODUCT */ STRING(u"0001"), /* 3 = SERIAL */ STRING(u"xxxx RX A CAT Port"), /* 4 = INTERFACE_0*/ STRING(u"xxxx RX B CAT Port"), /* 5 = INTERFACE_2*/ STRING(u"xxxx OTRSP Port"), /* 6 = INTERFACE_4*/ STRING(u"xxxx Audio"), /* 7 = */ STRING(u"xxxx RX Audio"), /* 8 = RX Audio Terminal */ STRING(u"xxxx TX Audio") /* 9 = TX Audio Terminal */ }; И их обработка: Код //Standard Request Map BEGIN_REQUEST_MAP(StandardRequestMap) ................. ON_GET_STRING_DESCRIPTOR(Strings) ................. END_REQUEST_MAP() Разные языки поддерживаются в таком же стиле  Также и с другими запросами (типа выбора интерфейса, параметров CDC, параметров аудиодевайса и т.д., а также стандартные запросы дискрипторов устройства, конфига и т.п.). Цитата Покажите как сделан адаптер к RTOS, как реентерабельность обеспечена и т.д. и т.п. Стек изначально рассчитан работу с моей RTOS, потому никаких никаких адаптеров не делалось. Реентабельность обеспечена обычными средствами RTOS - критическими секциями, семафорами и т.д. Без RTOS он не работает, почему так я уже объяснил выше. P.S. Странный у Вас стиль общения - хотя бы слово волшебное добавили  , а то "покажите"... а Вы заплатите, а я покажу  . Если есть конкретный вопрос, ну что-то там не едет или что-то конкретное интересует, то спрашивайте - чем смогу - помогу, а просто так время тратить желания нет.
Сообщение отредактировал Шаманъ - Aug 6 2017, 09:57
|
|
|
|
|
Aug 7 2017, 08:03
|
Гуру
     
Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713

|
Цитата(Шаманъ @ Aug 6 2017, 12:21)  У меня свое все  , включая RTOS, графику, математику и т.д. Касательно USB реализован USB device, host/OTG мне не интересен, потому не реализовывался. У меня тоже - почти всё своё  Кроме RTOS разве что. Хотя и к ней тоже порт - свой, ну ещё кой-какие её корректировки. А так и USB-device (когда нужен) - свой, и TCP-стек - свой, и графические библиотеки - тоже свои, о математике и прочих фильтрах и не говорю... Цитата(Шаманъ @ Aug 6 2017, 12:21)  API между классами и стеком несколько нетрадиционен по части стандартных запросов, они реализованы через "карты" обработчиков (по типу того, как сделана обработка событий в MFC/ATL/WTL). Это как я понимаю - массивы указателей на обработчики? Они у Вас во флешь или интерактивно в runtime-е в ОЗУ создаются? Цитата(Шаманъ @ Aug 6 2017, 12:21)  Поэтому у меня нет аццких switchей  "Аццкие" switch-и если они действительно аццкие, компилятор как правило превращает в эти же самые массивы указателей. Если возможно. Цитата(Шаманъ @ Aug 6 2017, 12:21)  Также все дескрипторы сделаны через макросы, так что нет необходимости подсчитывать их длины, порядок байт и прочую ерунду. Например строковые дескрипторы: У меня тоже так же сделано. Только имена макросов другие Цитата(Шаманъ @ Aug 6 2017, 12:21)  Реентабельность обеспечена обычными средствами RTOS - критическими секциями, семафорами и т.д. Без RTOS он не работает, почему так я уже объяснил выше. Я иногда делаю на callback-ах такое взаимодействие. Например: в TCP-стеке так сделан вызов обработчиков протоколов, обработчиков событий для сокетов и т.п. Поэтому оно никак не привязано к ОС (или к её отсутствию вовсе).
|
|
|
|
Сообщений в этой теме
linuxbergi Своя программная обёртка USB stm32 Aug 4 2017, 06:59 jcxz Цитата(linuxbergi @ Aug 4 2017, 09:59) Ра... Aug 4 2017, 07:02 AlexandrY Цитата(jcxz @ Aug 4 2017, 10:02) Что имее... Aug 4 2017, 08:59 ViKo Мне понятно, что имеется в виду драйвер в микрокон... Aug 4 2017, 09:48 jcxz Цитата(ViKo @ Aug 4 2017, 12:48) Мне поня... Aug 4 2017, 10:41  ViKo Цитата(jcxz @ Aug 4 2017, 13:41) То, что ... Aug 4 2017, 11:24  prottoss Цитата(jcxz @ Aug 4 2017, 16:41) То, что ... Aug 4 2017, 12:00   AlexandrY Цитата(prottoss @ Aug 4 2017, 15:00) Под ... Aug 4 2017, 12:12    prottoss Цитата(AlexandrY @ Aug 4 2017, 18:12) Не.... Aug 4 2017, 12:30     AlexandrY Цитата(prottoss @ Aug 4 2017, 15:30) lwIP... Aug 4 2017, 18:35  alexunder Цитата(jcxz @ Aug 4 2017, 12:41) То, что ... Aug 4 2017, 17:57 Kabdim Тема пообщаться или о чем? Aug 4 2017, 10:00 Эдди А в чем проблема? Через libudev + libusb все решае... Aug 4 2017, 10:10 LightElf QUOTE (linuxbergi @ Aug 4 2017, 09:59) Ра... Aug 4 2017, 10:17 prottoss Цитата(linuxbergi @ Aug 4 2017, 12:59) Ра... Aug 4 2017, 10:41 Эдди Вообще дурацкое это слово — "драйвер". Я... Aug 4 2017, 21:39 Сергей Борщ QUOTE (Эдди @ Aug 5 2017, 00:39) Где драй... Aug 5 2017, 06:34 ViKo Эдди, вы когда-нибудь ставили Виндовс на голый ком... Aug 5 2017, 06:01 Эдди Цитата(ViKo @ Aug 5 2017, 09:01) Эдди, вы... Aug 5 2017, 06:41  Сергей Борщ QUOTE (Эдди @ Aug 5 2017, 09:41) Я, конеч... Aug 5 2017, 12:40 mantech Цитата(ViKo @ Aug 5 2017, 09:01) Эдди, вы... Aug 5 2017, 06:46  ViKo Цитата(mantech @ Aug 5 2017, 09:46) Драйв... Aug 5 2017, 07:12  prottoss Цитата(AlexandrY @ Aug 5 2017, 19:01) Пок... Aug 5 2017, 13:18   linuxbergi Цитата(prottoss @ Aug 5 2017, 14:18) Нате... Aug 7 2017, 17:51   AlexandrY Цитата(Шаманъ @ Aug 6 2017, 12:21) У меня... Aug 7 2017, 10:11    jcxz Цитата(AlexandrY @ Aug 7 2017, 13:11) Я б... Aug 7 2017, 10:56    Kabdim Цитата(AlexandrY @ Aug 7 2017, 13:11) Вот... Aug 7 2017, 12:34     AlexandrY Цитата(Kabdim @ Aug 7 2017, 15:34) есть л... Aug 7 2017, 13:41 Kabdim The license agreement from NXP only permits distri... Aug 7 2017, 15:01 AlexandrY Цитата(Kabdim @ Aug 7 2017, 18:01) The li... Aug 7 2017, 15:45  Kabdim Цитата(AlexandrY @ Aug 7 2017, 18:45) У н... Aug 7 2017, 16:26   AlexandrY Цитата(Kabdim @ Aug 7 2017, 19:26) Это ка... Aug 7 2017, 16:48    Шаманъ Цитата(AlexandrY @ Aug 7 2017, 19:48) Ува... Aug 7 2017, 18:34    Kabdim Цитата(AlexandrY @ Aug 7 2017, 19:48) Абс... Aug 8 2017, 09:22    prottoss Цитата(AlexandrY @ Aug 7 2017, 22:48) При... Aug 8 2017, 14:02    prottoss Цитата(AlexandrY @ Aug 7 2017, 22:48) При... Aug 8 2017, 16:31 Шаманъ Цитата(jcxz @ Aug 7 2017, 11:03) У меня т... Aug 7 2017, 15:50 linuxbergi И ещё вопрос для специалистов. Могут ли быть вложе... Aug 8 2017, 04:00 AlexRayne покурите библиотеки libopencm3, unicore-mx (клон) ... Aug 8 2017, 12:36 ViKo Есть книга:
Михаил Гук. Шины PCI, USB и FireWare
В... Aug 8 2017, 14:12 prottoss В конечном счете примерная схема взаимодействия (у... Aug 8 2017, 14:24 Шаманъ Лучше всего все описано в документе usb_20.pdf кот... Aug 9 2017, 06:37 linuxbergi В своё время интересовался USB , даже опубликовал ... Aug 9 2017, 10:05 AlexandrY Цитата(linuxbergi @ Aug 9 2017, 13:05) В ... Aug 9 2017, 13:29 linuxbergi За информацию и отклики благодарен всем, рискну вы... Aug 10 2017, 06:36
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|