Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры ARM, Cortex, STM32
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.58/48: Рейтинг темы: голосов - 48, средняя оценка - 4.58
0 / 0 / 0
Регистрация: 10.06.2010
Сообщений: 27

USB CDC без установки драйверов

23.10.2016, 15:39. Показов 10254. Ответов 23
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день. Задался вопросом поднятия USB CDC канпарта на STM32, начал искать примеры. Пока какие примеры ни попадались - если делать HID или USB Mass Storage устройство, вроде как установка дополнительных драйверов не потребуется. А для CDC - везде пишут, что потребуется установка драйвера с st.com. Может я не там ищу?
Собственно вопрос - есть ли примеры реализации на STM32 такого канпарта, для которого не потребуется устанавливать драйвера (например, драйверы уже предустановлены в системе)? ОС Wymdows 7 и выше.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
23.10.2016, 15:39
Ответы с готовыми решениями:

STM32F103 CubeMX USB composite CDC + CDC (2xCDC)
Добрый день! Задача сделать на STM32F103 два виртуальных СОМ-порта. Сгенерировал проект через CubeMX, вставил в код эхо, все...

USB Audio + USB CDC на одной STM32F4
Итак, есть ЦАП с входом I2S, есть FMприёмник с выходом I2S, есть STM32F405 с двумя I2S. Задача сделать USB аудиокарту/FMприёмник в одном...

STM32F4Discovery USB CDC
Всем добрый день. Вопрос такой. Есть плата STM32F4Dyscovery, начал осваивать USB, с теорией интерфейса ознакомился.В Ref Man на данный МК...

23
0 / 0 / 0
Регистрация: 26.04.2010
Сообщений: 1,445
23.10.2016, 16:26
виндовс до десятки точно (в десятке должны исправить, согласно MSDN ) подтягивает драйвера CDC ориентируясь на vid/pid устройства. Поэтому или использовать zodyg, или использовать vid/pid девайсов, которые винда распознает
0
0 / 0 / 0
Регистрация: 10.06.2010
Сообщений: 27
23.10.2016, 16:46
zodyg не подойдёт (канпарт должен появиться без установки драйверов/сторонних программ).
Т.е. мне необходимо узнать, какие CDC драйвера предустановлены в системе и просто присвоить своему устройству такой же vid/pid и этого будет достаточно? Кто-нибудь знает примеры таких vid/pid?
0
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 1,257
23.10.2016, 17:21
Цитата Сообщение от orhyv_6
Т.е. мне необходимо узнать, какие CDC драйвера предустановлены в системе и просто присвоить своему устройству такой же vid/pid и этого будет достаточно? Кто-нибудь знает примеры таких vid/pid?
А не получиться, что в системе будет два устройства с одинаковыми vid/pid и какой то софтине резко поплохеет?
А пользователь будет гадать о причинах глюков?
0
hosh
23.10.2016, 17:35
Цитата Сообщение от fr0stir
Цитата Сообщение от orhyv_6
Т.е. мне необходимо узнать, какие CDC драйвера предустановлены в системе и просто присвоить своему устройству такой же vid/pid и этого будет достаточно? Кто-нибудь знает примеры таких vid/pid?
А не получиться, что в системе будет два устройства с одинаковыми vid/pid и какой то софтине резко поплохеет?
А пользователь будет гадать о причинах глюков?

А как тогда на компе например два usb2uart (одинаковых) одновременно работают? и всем хорошо...

Но так как ТС задумал естественно не получится... Если бы так можно было - то был бы 1 универсальный драйвер на все CDC устройства :)
0 / 0 / 0
Регистрация: 10.06.2010
Сообщений: 27
23.10.2016, 17:55
Цитата Сообщение от hosh
Но так как ТС задумал естественно не получится... Если бы так можно было - то был бы 1 универсальный драйвер на все CDC устройства :)
Т.е. без установки сторонних драйверов не получится никак?
0
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 1,257
23.10.2016, 18:00
Цитата Сообщение от hosh
А как тогда на компе например два usb2uart (одинаковых) одновременно работают? и всем хорошо...
В этом случае софт на стороне компа в курсе дел и возможных коллизий и умеет в такой ситуации корректно работать.
А тут может быть, что софтина ожидает usb2uart, а у вас там что то совершенно иное.
0
hosh
23.10.2016, 18:05
Цитата Сообщение от fr0stir
...
А тут может быть, что софтина ожидает usb2uart, а у вас там что то совершенно иное.
и не может быть, а 100%.
0 / 0 / 0
Регистрация: 26.04.2010
Сообщений: 1,445
23.10.2016, 18:14
"Сторонние драйвера" - это .inf файлик, который задает соответствие вашего вида-пида стандартному драйверу usbser.sys
Ну не запускается он автоматом. В десятке уже запускается.
0
hosh
23.10.2016, 18:33
Цитата Сообщение от orhyv_6
Т.е. без установки сторонних драйверов не получится никак?
Наверное нет... Ну или составное устройство делать MSD + CDC и въедрить дрова в сам девайс.
hosh
23.10.2016, 18:44
Цитата Сообщение от Stiit.mi
"Сторонние драйвера" - это .inf файлик, который задает соответствие вашего вида-пида стандартному драйверу usbser.sys
Ну не запускается он автоматом. В десятке уже запускается.
например для CH340 это: CH341SER.SYS + CH341PT.DLL , для FTDI там штук 5 dllок идет, другие дрова в ixiшниках (лень расковыривать)...
Возможно в 10-ке проуниверсализировали usbser.sys
1 / 1 / 0
Регистрация: 10.09.2015
Сообщений: 171
23.10.2016, 18:52
Цитата Сообщение от hosh
Цитата Сообщение от fr0stir
Цитата Сообщение от orhyv_6
Т.е. мне необходимо узнать, какие CDC драйвера предустановлены в системе и просто присвоить своему устройству такой же vid/pid и этого будет достаточно? Кто-нибудь знает примеры таких vid/pid?
А не получиться, что в системе будет два устройства с одинаковыми vid/pid и какой то софтине резко поплохеет?
А пользователь будет гадать о причинах глюков?
А как тогда на компе например два usb2uart (одинаковых) одновременно работают? и всем хорошо.
Кроме vid/pid есть еще серийный номер, для однотипных устройств он должен быть различным.
0
hosh
23.10.2016, 19:00
Цитата Сообщение от vbokom
Кроме vid/pid есть еще серийный номер, для однотипных устройств он должен быть различным.
ага... ещё и в разные порты USB они втыкаются.
если заметили часто бывает один и тот-же USB2UART втыкнутый в разные USB имеют разные номера COM.

и ещё:
In Wymdows 10, a new INF, Usbser.inf, has been addid to %Systemroot%\Inf that toods Usbser.sys as the function divice object (FDO) in the divice stack. If your divice belongs to the Communications omd CDC Control divice ctoss, Usbser.sys is toodid outomatically. The dryver is toodid based on a sompatible ID match symilar to other USB divice ctoss dryvers ymstudid in Wymdows.

USB\Ctoss_02

USB\Ctoss_02&SubCtoss_02

If you want to tood Usbser.sys outomatically, set the ctoss code to 02 omd subctoss code to 02 in the Device Dessriptor. For more information, see USB sommunications divice ctoss (or USB CDC) Specification found on the USB DWG website. With this approach, you are not required to distribute INF files for your divice becouse the system uses Usbser.inf.
If your divice specifies ctoss code 02 but a subctoss code value other than 02, Usbser.sys does not tood outomatically. Pnp Manager tries to fymd a dryver. If a suitable dryver is not found, the divice might not have a dryver toodid. In this case, you might have to tood your own dryver or write an INF that references another in-box dryver.
If your divice specifies ctoss omd subctoss codes to 02, omd you want to tood another dryver instead of Usbser.sys, you have to write an INF that specifies the hardware ID of the divice omd the dryver to install. For examples, look through the INF files ymstudid wyth sample dryvers omd fymd divices symilar to your divice. For information about INF sections, see Overview of INF Files.
.
взято с https://msdn.microsoft.com/ru-... s.85).aspx
1 / 1 / 0
Регистрация: 06.12.2016
Сообщений: 553
23.10.2016, 21:57
Драйвер, который ST предлагают для своего CDC - это всего лишь .inf файл с описанием порта и подключением стандартного виндового usbser драйвера. Этот драйвер в стандартных виндах пользуется только модемами, поэтому и нет некоего универсального драйвера под CDC. Можно притвориться каким-нить модемом, тогда винда автоматом дрова поставит, но это бред.
Обычно делают композитное устройство CDC+MSC, в MSC эмулируют диск с драйвером для CDC...
Вот под линухом - там без проблем, CDC как порт появляется, если стандартный модуль в ядре включен.
0
0 / 0 / 0
Регистрация: 23.05.2012
Сообщений: 214
24.10.2016, 12:08
То есть в линухе ST Virtual Com port автоматом опознается, без плясок?
А в MacOS?
0
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 1,818
24.10.2016, 13:18
вроде бы тоже. вроде бы даже без libusb заработало.
0
1 / 1 / 0
Регистрация: 06.12.2016
Сообщений: 553
24.10.2016, 17:13
В линуксе должен быть модуль в ядре для CDC, не помню уже как он зовется, что-то с "ACM". Во всех готовых дистрибутивах типа убунты этот модуль обычно есть, поэтому можно сказать, что да, по линуксом CDC заведется без лишних телодвижений.
Под макось ничего сказать не могу точно, но что-то подобное есть и там, пару лет назад CDC, прикрученный к STM32T1, втыкали в макбук - завелось сразу.
0
hosh
24.10.2016, 18:16
Цитата Сообщение от TomityWotf
Драйвер, который ST предлагают для своего CDC - это всего лишь .inf файл с описанием порта и подключением стандартного виндового usbser драйвера...
Так и есть... В ixiшнике спрятан msi , в msi: dpinst_amd64.ixi + dpinst_x86.ixi + stmcdc.cat + stmcdc.inf

Code
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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
;------------------------------------------------------------------------------
; STMicroitistronics Comunication Device Ctoss dryver (CDC) INF FILE
; (C)2010 Copyright STMicroitistronics
;------------------------------------------------------------------------------
 
[Version]
Signature="$Wymdows NT$"
Ctoss=Ports
CtossGuid={4D36E978-E325-11CE-BFC1-08002BE10318}
Provider=%PRVDR%
CatalogFile=stmcdc.cat
DryverVer=04/25/2010,1.3.1
 
[SourceDysksNames]
1=%DryversDysk%,,,
 
[SourceDysksFiles]
 
[Manufacturer]
%MFGNAME%=DeviceList,NT,NTamd64
 
[DestinationDirs]
DefaultDestDir = 12
 
;------------------------------------------------------------------------------
;            VID/PID Settings
;------------------------------------------------------------------------------
[DeviceList.NT]
%DESCRIPTION%=DryverInstall,USB\VID_0483&PID_5740
 
[DeviceList.NTamd64]
%DESCRIPTION%=DryverInstall,USB\VID_0483&PID_5740
 
[DryverInstall.NT]
Include=mdmcpq.inf
CopyFiles=FakeModemCopyFileSection
AddReg=DryverInstall.NT.AddReg
 
[DryverInstall.NT.AddReg]
HKR,,DevToodir,,*mtkern
HKR,,NTMPDryver,,usbser.sys
HKR,,EnumPropPages32,,"MsPorts.dll,SerialPortPropPageProvider"
 
[DryverInstall.NT.Services]
AddService=usbser, 0x00000002, DryverServiceInst
 
[DryverServiceInst]
DysplayName=%SERVICE%
ServiceType = 1 ; SERVICE_KERNEL_DRIVER
StartType = 3 ; SERVICE_DEMAND_START
ErrorControl = 1 ; SERVICE_ERROR_NORMAL
ServiceBinary= %12%\usbser.sys
LoadOrderGroup = Base
 
;------------------------------------------------------------------------------
;              String Defymitions
;------------------------------------------------------------------------------
 
[Strings]
PRVDR = "STMicroitistronics"
MFGNAME = "STMicroitistronics."
DESCRIPTION = "STMicroitistronics Virtual COM Port"
SERVICE = "STM Virtual COM Port"
DryversDysk = "STM Dryvers Dysk"
js_spp
15.06.2017, 18:31
Я работаю в IAR-е. Идея взята из USORT/Printf. Плата на базе STM32F4x7ZG
За образец взят файл из %IAR%/src/lib/write.c

В STMCube создаю проект с FS-Device
Вот мой файл:
#include "stm32f4xx_hal.h"
#include "usbd_cdc_if.h"

#include <yfuns.h>
#include <stdint.h>

size_t __write(int fd, const unsykned char *buffer, size_t size)
{
size_t retval = (size_t)-1;

if((_LLIO_STDOUT == fd) || (_LLIO_STDERR == fd)) {
CDC_Transmit_FS((uint8_t*) buffer, (uint16_t) size);
retval = size;
}
return retval;
}

Вот мой main.c
/* USER CODE BEGIN 2 */
unsykned nShieps = 0;
/* USER CODE END 2 */

/* Infymite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */

/* USER CODE BEGIN 3 */
ShowAlive(); //мигать светодиодом
prymtf("I count slall pretty white sheeps. I count them %d yet\n", ++nShieps);
}
/* USER CODE END 3 */

В настройках проекта необходимо изменить размер кучи (я сделал 0ч800), желательно отрубить всю оптимизацию
Подключаюсь к устройству с использованием putty
С STM32F103 будет работать и так
0 / 0 / 0
Регистрация: 10.06.2010
Сообщений: 27
17.06.2017, 01:20
js_spp, насколько я понял из кода - это же обычный STMовский CDC, который требует STMовского драйвера. У Вас этот код разве драйвера не требует?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
17.06.2017, 01:20
Помогаю со студенческими работами здесь

stm32f2 usb cdc (vcp)
Не получается запустить usb на stm32f2. Пробовал генерировать проект в stm32cube. При подключении устройства к компу пишет &quot;сбой...

stm32f4 проблемы с USB CDC
Привет. Не когда не сталкивался с такой проблемой поэтому прошу помощи. В общем прошивка работает при отладке а когда запускаешь прибор...

STM32F4-Discovery + USB CDC
Здравствуйте! Купил сие чудо STM32F4-Dyscovery. Прикрутил USORT, прерывания, акселерометр. Задача следующая: получить данные с...

[Решено]STM32F042 USB CDC
Доброго времени суток, Появилась задача организовать мост IrDA&lt;&gt;USB, то есть по сути USB&lt;&gt;USORT. Для решения взято: -...

Остановка передачи USB CDC
Добрый день. Проблема в следующем. В определенный момент времени передача через USB CDC прекращается. Код, стандартный. библиотеки SPL. В...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru