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

Виртуальный USB COM на LPC2366

Стоит задача написать код, позволяющий подключаться к PC через USB таким образом, чтобы мое устройство определялось в Windows как виртуальный COM (типа микросхем FTDI).

Желательно обойтись без написания специализированных драйверов во Windows.

Может кто-нибудь помочь с примером или ссылочкой на ресурс, разжевывающий данный вопрос!?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Что в Keil, что в IAR есть приметры для данного процессора USBCDC. Это и есть искомое.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Что в Keil, что в IAR есть приметры для данного процессора USBCDC. Это и есть искомое.

 

Перерыл всю папку своего Keil, ничего подобного не нашел. IAR не стоит.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Перерыл всю папку своего Keil, ничего подобного не нашел. IAR не стоит.

c:\keil\ARM\Boards\Keil\MCB2300\USBCDC\

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

c:\keil\ARM\Boards\Keil\MCB2300\USBCDC\

 

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

 

А даташита к нему не прилагается, чтобы разобраться что, как и в какой последовательности там делается?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я у себя тупо копипастнул код и запустил. И оно заработало с первого тыка. Сам удивляюсь.

И именно поэтому так толком и не понял как бы я сам написал такую уйму строк.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Переписал исходники из примеров Keil под свой BOARD, скомпилировался нормально, однако, при обращении к любому USB регистру (например EP_INDEX = 0;) происходит переход на DAbt_Handler.

В чем может быть проблема!?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

однако, при обращении к любому USB регистру (например EP_INDEX = 0;) происходит переход на DAbt_Handler.

Питание USB включено? PCUSB в PCONP. PLL настроен? И вообще инициализация.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Питание 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

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Проверьте установку бита DEV_CLK_EN в регистре USBClkCtrl (адрес регистра 0xFFE0 CFF4).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

igorsk, mme, спасибо проблема действительно была в CLOCK, забыл напрочь настроить USBClkCtrl. Виснуть перестало, но Windows не распознает устройство, буду бороться дальше!!!

 

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

 

Всем спасибо, остался один вопрос. Я хочу чтобы в Винде мое устройство распознавалось как мое, а не "MCB2300 USB VCom Port".

Я так думаю, что нужно подменить строки в дескрипторах USB моего класса и в INF файле-драйвере. Может есть у кого инструкция, как и что нужно поменять?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Именно ТУПО поменять. Везде. Включая даже то, что по вашему мнению не является текстовой строкой (это в инф файле).

Хотя это и просто понты. В идеале, порт должен вставать самостоятельно. Т.е. чтоб этот usbser.sys автоматом подключался. И для вас же удобнее. Имхо, разумеется.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

но он же все равно автоматом не становится. При первом включении все равно требует драйвер, а в драйвере прописано стандартное название VCOM. И еще мне кажется, что одних манипуляций с INF файлом недостаточно, так как у USB устройства есть некий ID (дескриптор), по которому Windows его сопоставляет с драйвером, так вот если его не поменять, то многие устройства будут подключаться под моим именем, а это неправильно

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

По результатам тестов с разными ОС выяснилось, что inf из примера написан через.. плохо.

 

Вот несколько лучший вариант.

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

 

[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. Их надо менять парой - в контроллере и в данном файле.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...