Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Виртуальный USB COM на LPC2366
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > ARM, 32bit
Yaumen
Стоит задача написать код, позволяющий подключаться к PC через USB таким образом, чтобы мое устройство определялось в Windows как виртуальный COM (типа микросхем FTDI).
Желательно обойтись без написания специализированных драйверов во Windows.
Может кто-нибудь помочь с примером или ссылочкой на ресурс, разжевывающий данный вопрос!?
Nixon
Что в Keil, что в IAR есть приметры для данного процессора USBCDC. Это и есть искомое.
Yaumen
Цитата(Nixon @ Sep 10 2010, 10:11) *
Что в Keil, что в IAR есть приметры для данного процессора USBCDC. Это и есть искомое.


Перерыл всю папку своего Keil, ничего подобного не нашел. IAR не стоит.
vmp
Цитата(Yaumen @ Sep 10 2010, 11:48) *
Перерыл всю папку своего Keil, ничего подобного не нашел. IAR не стоит.

c:\keil\ARM\Boards\Keil\MCB2300\USBCDC\
Yaumen
Цитата(vmp @ Sep 10 2010, 11:14) *
c:\keil\ARM\Boards\Keil\MCB2300\USBCDC\


Да, точно нашел!!! Во зарыли! Спасибо

А даташита к нему не прилагается, чтобы разобраться что, как и в какой последовательности там делается?
DpInRock
Я у себя тупо копипастнул код и запустил. И оно заработало с первого тыка. Сам удивляюсь.
И именно поэтому так толком и не понял как бы я сам написал такую уйму строк.
Yaumen
Переписал исходники из примеров Keil под свой BOARD, скомпилировался нормально, однако, при обращении к любому USB регистру (например EP_INDEX = 0;) происходит переход на DAbt_Handler.
В чем может быть проблема!?
vmp
Цитата(Yaumen @ Sep 14 2010, 10:52) *
однако, при обращении к любому USB регистру (например EP_INDEX = 0;) происходит переход на DAbt_Handler.

Питание USB включено? PCUSB в PCONP. PLL настроен? И вообще инициализация.
Yaumen
Цитата(vmp @ Sep 14 2010, 14:42) *
Питание USB включено? PCUSB в PCONP. PLL настроен? И вообще инициализация.


PCONP |= (1<<31); //PCUSB = 1 - USB power/clock control bit.
XTAL = 16 МГц
PLL = 288 Мгц (MSEL = 9, NSEL = 1)
CPU CLK = 72 MHz (CCLKSEL = 4)
USB CLK = 48 MHz (USBSEL = 6)

Все частотные параметры настроены в Конфигураторе проекта.
PCONP настроен в начале процедуры инициализации USB

mme
Проверьте установку бита DEV_CLK_EN в регистре USBClkCtrl (адрес регистра 0xFFE0 CFF4).
igorsk
AHB Clock включен?
Yaumen
igorsk, mme, спасибо проблема действительно была в CLOCK, забыл напрочь настроить USBClkCtrl. Виснуть перестало, но Windows не распознает устройство, буду бороться дальше!!!

Все, заработало!!!

Всем спасибо, остался один вопрос. Я хочу чтобы в Винде мое устройство распознавалось как мое, а не "MCB2300 USB VCom Port".
Я так думаю, что нужно подменить строки в дескрипторах USB моего класса и в INF файле-драйвере. Может есть у кого инструкция, как и что нужно поменять?
DpInRock
Именно ТУПО поменять. Везде. Включая даже то, что по вашему мнению не является текстовой строкой (это в инф файле).
Хотя это и просто понты. В идеале, порт должен вставать самостоятельно. Т.е. чтоб этот usbser.sys автоматом подключался. И для вас же удобнее. Имхо, разумеется.
Yaumen
но он же все равно автоматом не становится. При первом включении все равно требует драйвер, а в драйвере прописано стандартное название VCOM. И еще мне кажется, что одних манипуляций с INF файлом недостаточно, так как у USB устройства есть некий ID (дескриптор), по которому Windows его сопоставляет с драйвером, так вот если его не поменять, то многие устройства будут подключаться под моим именем, а это неправильно
esaulenka
По результатам тестов с разными ОС выяснилось, что inf из примера написан через.. плохо.

Вот несколько лучший вариант.
На 64-битных windows я его так и не проверил, зато оно работает с XP, Vista и Win7.

CODE

[Version]
Signature = "$Windows NT$"
Class = Ports
ClassGuid = {4D36E978-E325-11CE-BFC1-08002BE10318}
Provider = %MSFT%
DriverVer = 09/14/2010, 0.0.4.0
;;LayoutFile = layout.inf

[DestinationDirs]
DefaultDestDir = 12

[Manufacturer]
%MSFT% = Models, NTx86, NTia64, NTamd64

[Models.NTx86]
%SERIAL_DEV% = SerialInstall, USB\VID_FFFF&PID_FFFF

[Models.NTia64]
%SERIAL_DEV% = SerialInstall, USB\VID_FFFF&PID_FFFF

[Models.NTamd64]
%SERIAL_DEV% = SerialInstall, USB\VID_FFFF&PID_FFFF

[Models]
%SERIAL_DEV% = SerialInstall, USB\VID_FFFF&PID_FFFF

[SerialInstall.NT]
Include = mdmcpq.inf
AddReg = SerialAddReg
CopyFiles = FakeModemCopyFilesSection

[SerialAddReg.NT]
HKR,,DevLoader,,*ntkern
HKR,,NTMPDriver,,usbser.sys
HKR,,EnumPropPages32,,"MsPorts.dll,SerialPortPropPageProvider"

[SerialInstall.NT.Services]
Include = mdmcpq.inf
AddService = usbser,0x0002,LowerFilter_Service_Inst

[Strings]
MSFT = "MSFT"
SERIAL_DEV = "USB serial port"


PS "некий ID" в случае USB называется VID и PID. Их надо менять парой - в контроллере и в данном файле.
Yaumen
Ну чтобы воспользоваться этим INF, как минимум надо изменить в программе устройства: VID и PID на 0xFFFF. Чтобы Windows мог сопоставить устройства с драйвером.

А есть ли какие-то значения для общего пользования или все покупается и регистрируется у буржуинов на USB форуме ?
DpInRock
Я вообще-то также поступил. Сделал свой как бы файл, чтоб IAR там не отсвечивал.
А вот сделать это все безличным и чтоб само вставало как родное - пока не пробовал.
Вроде как должно быть решение. Ибо раз это стандартный USB ком, и это видно, то почему бы виндам автоматом, молча не запустить usbser.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.