Перейти к содержанию

Mazay

Участник
  • Публикаций

    17
  • Зарегистрирован

  • Посещение

Репутация

0 Обычный

Информация о Mazay

  • Звание
    Участник
  1. Цитата(nanorobot @ Nov 28 2016, 15:14) все порты находит, кроме виртуального, того который и нужен .. хотя CLASS GUID соответствует: 4D36E978-E325-11CE-BFC1-08002BE10318 При вызове функции SetupDiGetClassDevs(&GUID_DEVCLASS_PORTS, 0, 0, DIGCF_PRESENT | DIGCF_DEVICEINTERFACE); надо убрать флаг DIGCF_DEVICEINTERFACE. Тогда будут получены и виртуальные порты использующие драйвер usbser.sys.
  2. Цитата(DeNi @ Feb 10 2017, 16:45) lParam указывает на DEV_BROADCAST_HDR, для интерфейса он будет типа DBT_DEVTYP_DEVICEINTERFACE DBT_DEVTYP_DEVICEINTERFACE->dbcc_name это путь к устройству SetupDiOpenDeviceInterface даст интерфейс SetupDiGetDeviceInterfaceDetail даст инфу по интерфейсу SetupDiOpenDevRegKey откроет ключ в HKLM\SYSTEM\ControlSet\Enum\USB для этого интерфейса, откуда и можно узнать номер порта Все получилось. Еще раз спасибо!
  3. Цитата(DeNi @ Feb 12 2017, 13:32) Как раз драйвер CDC очень даже причем. ST драйвера никогда не писала, их драйвер для CDC это только цифровая подпись для stmcdc.inf, чтоб с их VID PID установить usbser.sys который уже имеется в Windows. Всем спасибо за помощь! Отдельное спасибо уважаемому DeNi за подробное объяснение проблем с usbser.sys и советы по использованию WinAPI. Не написал в первом посте - ОС действительно старая WinXP/Win7. При включении-выключении, перзагрузке, выдергивании и т.д. устройств использующих виндовый драйвер usbser.sys все-таки приходят сообщения с событиями DBT_DEVICEARRIVAL и DBT_DEVICEREMOVECOMPLETE и типом DBT_DEVTYP_DEVICEINTERFACE. Из них уже можно получить путь к устройству и реализовать автоматическое закрывание порта, а в будущем и автоматическое переподключение. А вот возник такой, непонятный для меня вопрос при перечислении портов имеющихся в системе: Примерная рыба кода: КодhDevInfo = SetupDiGetClassDevs(&ClassGuid, NULL, NULL, /*DIGCF_DEVICEINTERFACE |*/ DIGCF_PRESENT);  // Получаю хендл на список устройств имеющихся в системе for(int n = 0; SetupDiEnumDeviceInfo(hDevInfo, n, &DevInfoData); n++)  // Перечисляю устройства {    .......     for(int m = 0; SetupDiEnumDeviceInterfaces(hDevInfo, &DevInfoData, &ClassGuid, m, &DeviceInterfaceData); m++)  // Перечисляю интерфейсы для устройства     {           ........     } } И вот если в функции SetupDiGetClassDevs указан только флаг DIGCF_PRESENT то определяются все порты имеющиеся в системе (в том числе и использующие usbser.sys), но функция SetupDiEnumDeviceInterfaces возвращает ошибку ERROR_NO_MORE_ITEMS для любого порта. Если я добавляю флаг DIGCF_DEVICEINTERFACE, то интерфейсы находятся, но из списка устройств исчезают порты как раз использующие usbser.sys. Вот логи небольшой программки, набросанной для лучшего понимания работы с винайпишными функциями Практической пользы в получении интерфейсов при перечислении портов я пока не вижу, это скорее тренировка инженера-железячника. Флага DIGCF_DEVICEINTERFACE нет: Описание класса: Порты (COM и LPT) ==================================================== Порт Найден: Последовательный порт (COM1) Поиск Интерфейсов закончен! ==================================================== Порт Найден: PCI Serial Port (COM22) Поиск Интерфейсов закончен! ==================================================== Порт Найден: PCI Serial Port (COM21) Поиск Интерфейсов закончен! ==================================================== Порт Найден: PCI Parallel Port (LPT1) Поиск Интерфейсов закончен! ==================================================== Порт Найден: AT91 USB to Serial Converter (COM15) Поиск Интерфейсов закончен! ==================================================== Порт Найден: STMicroelectronics Virtual COM Port (COM4) Поиск Интерфейсов закончен! Поиск Устройств закончен! Флаг DIGCF_DEVICEINTERFACE добавлен: Описание класса: Порты (COM и LPT) ==================================================== Порт Найден: Последовательный порт (COM1) Интерфейс Найден: Порядковый номер: 0 \\?\acpi#pnp0501#1#{4d36e978-e325-11ce-bfc1-08002be10318} Имя порта из Реестра (SetupDiOpenDevRegKey/RegQueryValueEx): COM1 Поиск Интерфейсов закончен! ==================================================== Порт Найден: PCI Serial Port (COM22) Интерфейс Найден: Порядковый номер: 0 \\?\mf#pci#ven_9710&dev_9835&subsys_00121000&rev_01#6&8e99d9a&0&0000e6#child0000#{4d36e978-e325-11ce-bfc1-08002be10318} Имя порта из Реестра (SetupDiOpenDevRegKey/RegQueryValueEx): COM22 Поиск Интерфейсов закончен! ==================================================== Порт Найден: PCI Serial Port (COM21) Интерфейс Найден: Порядковый номер: 0 \\?\mf#pci#ven_9710&dev_9835&subsys_00121000&rev_01#6&8e99d9a&0&0000e6#child0001#{4d36e978-e325-11ce-bfc1-08002be10318} Имя порта из Реестра (SetupDiOpenDevRegKey/RegQueryValueEx): COM21 Поиск Интерфейсов закончен! Поиск Устройств закончен!
  4. Цитата(DeNi @ Feb 10 2017, 14:28) Проблема в драйвере usbser.sys, он не регистрирует отправку событий PnP. Да, видимо вы правы. Нашел в закромах плату с атмеловским AT91SAM7 и тоже включенным CDC - ситуация аналогична с STM32. Драйвер используется все тот-же usbser.sys и в событиях DBT_DEVICEARRIVAL и DBT_DEVICEREMOVECOMPLETE приходит только в виде "USB Raw Device" {a5dcbf10-6530-11d2-901f-00c04fb951ed}. По умолчанию, в отличии от портов, эти сообщения не приходят и нужно или подписываться на них, или "включать" все сообщения (DEVICE_NOTIFY_ALL_INTERFACE_CLASSES). Видимо придется при получении событий об добавлении/удалении устройств перезапрашивать у Винды список портов. Причем замечена одна особенность с китайским переходником USB<->COM CH340. Если порт открыт в терминалке и выдернуть переходник, то сообщение об удалении Порта приходит. Но в реестре он остается в списке имеющихся портов и можно писать в него не получая ошибки. Удаляется он из списка портов только после того, как его закрыли. Поэтому по приходу событий DBT_DEVICEARRIVAL и DBT_DEVICEREMOVECOMPLETE просто перечитать реестр не помогает. Порт еще будет присутствовать. Надо или разбирать тип DBT_DEVTYP_PORT для извлечения Имени, или получать список портов функцией SetupDiEnumDeviceInfo().
  5. На STM32F103 поднят виртуальный СОМ-порт (USB CDC). Используется стандартная библиотека от STM. Все работает. Байты летают туда-сюда. Однако, при отлаживании устройства, наверно многие обратили внимание, что после перезагрузки/перепрошивки контроллера, виртуальный порт «отваливается». Однако во всех доступных мне терминальных программах он так и остается открытым. Данные при этом естественно никакие не идут. Если в терминальной программе закрыть порт, то открыть его не получится. Нужно опять перезагрузить микроконтроллер и только тогда снова открыть порт. Т.е. правильная последовательность действий должна быть такая: 1. Закрыть порт в терминальной программе. 2. Перезагрузить/препрошить и т.д. 3. Открыть порт в терминальной программе. Обычно про эту последовательность вспоминаешь, когда уже успел загрузить новую прошивку, контроллер перезагрузился и виртуальный порт «отвалился». В самописной терминальной программе решил оптимизировать этот процесс. Реализовал получение от Windows системных сообщений WM_DEVICECHANGE указывающих на изменения в устройствах. Из этого сообщения нужны события DBT_DEVICEARRIVAL и DBT_DEVICEREMOVECOMPLETE – подключение и удаление устройства соответственно. Далее можно проанализировать Тип устройства которое подключилось или было удалено из системы. Наиболее интересен тип DBT_DEVTYP_PORT, который как раз и является указывающим на Последовательный или Параллельный порт. И вот тут с устройством на STM32 возникла неприятность. При подключении или отключении STM32 событие с типом устройства DBT_DEVTYP_PORT не присылается! Помимо типа DBT_DEVTYP_PORT есть общий тип DBT_DEVTYP_DEVICEINTERFACE указывающий вообще на любое устройство. Вот приходит только событие с этим типом и все. Я проверил имеющиеся у меня переходники USB<->COM на FT232, CPxxx, PL2303 и китайской CH340. При их подключении/отключении помимо событий с общим типом DBT_DEVTYP_DEVICEINTERFACE всегда приходит событие с типом DBT_DEVTYP_PORT по которому легко определить, что конфигурация портов изменилась, а получив из возвращаемой структуры поле Name, можно сразу определить какой порт подключился/удалился. Собственно вопросы к знатокам: В какую сторону стоит копнуть, чтоб и при подключение/удалении STM32 получать сообщение DBT_DEVTYP_PORT? Кто отвечает за рассылку этих сообщений? Я подозреваю, что драйвер, а он используется стандартный виндовый usbser.sys. В файле stmcdc.inf используемом при установке драйвера виртуального COM-порта прописан GUID класса портов. Так, что эта часть кажется правильной. В системе, в диспетчере устройств STM32 USB CDC присутствует в классе портов. WinAPI’шная функция SetupDiEnumDeviceInfo() возвращает среди прочих портов и STM32. Т.е. Винда знает, что это последовательный порт, но сообщения об этом не приходят.
  6. Цитата(strr @ Sep 4 2012, 19:37) Кто нибудь пробовал собирать JLINK на AT91SAM7S64 ревизии С ? Пробовал, только MT-Link 5. Контроллер по JTAG определялся, но все это работало на самой маленькой скорости - 32 кГц если правильно помню. Дышало все еле-еле. IAR так просто вис. Купил еще одну м/с AT91SAM7S64 ревизии С - результат одинаков. Других ревизий под рукой небыло. Поставил AT91SAM7S256. Прошил через САМБУ и все завертелось. Только появилась проблема с тем, что теперь софт на каждый чих предлагает обновить прошивку, а это физически невозможно т.к. камень не тот. В итоге убрал все на полку и купил клон у китайцев.
  7. ATtiny13 и частота 128 кГц

    Еще вопрос: Рtшили пока "поиграть" с ATtiny13. Пусть пока на более высокой частоте. Программатор - "AVR910". Запустили AVR Studio 4 (последнюю, с сайта) - в ней не выбрать для прошивки 13-ю, и более новые - 45-ю, 85-ю. В CodeVision - можно... В чем прикол? Родной софт не поддерживает такое сочетание?
  8. ATtiny13 и частота 128 кГц

    Уважаемые господа! Подскажите пожалуйста. Ставим ATtiny13 в опытный макет. Хотми запустить его на частоте 128 кГц от внутреннего генератора. Для его прошивки частота сигнала SCK должна быть как минимум в 4 раза меньше. Как это обеспечить? Из программаторов пока только "STK200" да "AVR910" (самоделки). Компилятор CodeVision. В нем, для других программаторов можно выбрать частоту, а для этих нет... Что делать, паять AVRISP?
  9. Где берем ПИКи в Питере?

    Цитата(Viktor110668 @ Apr 1 2008, 14:25) www.avc.ru Странно... Знаю я этот магазинчик. Правда очень давно не был, потому как нечего там делать было. Да и сейчас - судя по ассортименту выставленному в интернет, ПИКов там нет. Или я не нашел?
  10. Где берем ПИКи в Питере?

    Цитата(rx3apf @ Mar 31 2008, 04:14) Странно. В Москве покупаем и единичными экземплярами, в "Тритоне". А "Тритон" - филиал "Гаммы", и оттуда же и возят... Чудеса, однако... Видимо у "Тритона" своя политика и они торгуют в розницу. А "Гамма" - единственный, официальный... и работает только на оптовых покупателей. Я не хочу хаять "Гамму", если бы не она, то в городе совсем было бы пусто, но мне кажеться у них странноватая политика. Если вы им итересны - продадут, нет - не будут. Года три назад, проводили они семинар в Москве. Прислали приглашение. Я решил поинтересовться - что по чем. Позвонил им, сказали - а вы сначала заполните анкету, а потом мы посмотрим, и решим - если вы нам интересны, мы ответим "что по чем", а если нет - то ничего не ответим. Вот и думай... зачем приглашения рассылать??? Цитата(Alex B._ @ Mar 30 2008, 22:14) Да ну что вы =) Любой вменяемый поставщик под проект выпишет вам счет и на 2 копейки. Осмелюсь не согласится с вами. Или мне больше попадались мало вменяемые, или они не поставщики Даже с фирмами, с которыми работаешь не один год, и имеешь дружеские отношения с менеджерами, не всегда удается получить счет даже на 100р., а уж на 2 коп... И дело все в том, что менеджер выпишет, но есть еще люди участвующие в твоем заказе - склад, бухглтерия, выдача и т.д. Им все - это лишняя работа. Вот они и капают начальству - "надоела эта мелочевка!!!!". А начальство менеджерам - по голове, по голове, или вовсе приказ - менее чем на х000 руб. счетов не выставлять! Не верите? "Симметрон" - работаю с ними лет 10. И маленькие счета, только за счет дружбы с менеджером.
  11. Где берем ПИКи в Питере?

    Цитата(Alex B._ @ Mar 30 2008, 01:10) Вы все таки определитесь - для себя, или для работы. Если второе - то стройте бухгалтерию. Если не получается - я вообще не понимаю, как вы работаете... В иных проектах, задачи "для себя" или "для работы (макетирование и тестирование)" не сильно отличаются. Приходится искать кристалл по всем известным критериям - доступность/функциональность/цена. Причем в России, как мне кажеться, именно в такой последовательности (про серийность и вагонные поставки разговор не идет). Славное пожелание - "строить бухгалтерию" - особенно сильно помогает, когда большинство торгующих радиодеталями контор выписывает счета начиная от 1 т.р. А то и больше. А как мы работаем - нормально. Часть проектов идет на ATmege. Беруться "вагонами" по цене менее 1$. Часть на ПИКах. Сотнями - берем в "Гамме" или "Симметроне". Вопрос то стоял - про единичные и не особо распространенные экземпляры. И была надежда, что кто нить подскажет секретный "подвальчик"...
  12. Фьюзы в PIC18F452

    PICKit2 отличный программатор. Ни кто не спорит. Только, как я писал выше, один раз столкнулись с такой ситуацией, что после прошивки тем же Пиккитом2, кристал им же больше не определялся. И соответсвенно ни он, ни "Шайба" ничего не хотели выполнять - даже стирание. Вот тут и помог валявшийся на полке, наколенный JDM, вернее даже не он, а он в связке с ICProg - они не считывали код кристала, а просто выполняли, например, стирание. После этого фирменные средства начили их видеть. Да, и я не призываю всем переходить на JDM. Но иной раз возможно и спасет стирание кристалла именно таким "топорным" способом.
  13. С гарантией все понятно. А вот за результаты конкретных использований - спасибо! Возросла уверенность, что все будет Ок!
  14. В старом проекте стоит PIC18F252. Срочно возникла необходимость перевести его на питание 3,3В. PIC18LF252 в малом количестве и срочно не найти. Взяли, и в качестве эксперимента понизили ему питание до 3,3В. Все работает, даже завелся на кварце 20 мГц. Кварц, от греха, сменили на 4 мГц. Но все равно интересно - чем грозит такой режим работы - от 3,3В? (По даташиту минимум питания - 4,2В)
  15. Где берем ПИКи в Питере?

    Цитата(xemul @ Mar 29 2008, 12:46) Мегаэлектроника Ездить только к ним неудобно. "Мега" - да, знаю, спасибо. Переехали с Петроградки на Васю. Не пробовал у них брать именно ПИКи, а тем более заказывать. Хотя под заказ, от упаковки, много кто привезет. Но это не то.