Практическо използване на USB интерфейса в PIC контролери. Програмиране на най-простите USB устройства в Delphi Променете името на устройството на вашето собствено

Както споменахме, операционните системи Windows предоставят софтуерна поддръжка за USB устройства. Обработката на потоци данни от USB устройства на ниво операционна система се извършва от стек от стандартни драйвери, които изпълняват основните функции за управление на всички USB устройства и обмен на данни между тях и системата.

Ако трябва да напишете софтуер за USB устройство, което да разшири възможностите му за обработка на данни, тогава можете да изберете един от трите възможни пътя:

напишете свой собствен драйвер за устройство, който ще осигури всички необходими функции за контрол и обмен на данни, както и програма, която ще взаимодейства с този драйвер в потребителски режим. В този случай можете напълно да се справите без стандартните системни драйвери;

напишете драйвер за филтър, който осигурява необходимата функционалност, но се намира в стека от драйвери над системните драйвери. По този начин всички стандартни функции за обработка ще се изпълняват от USB драйверите, инсталирани от системата, а допълнителни функции ще бъдат предоставени от вашия филтърен драйвер, с който потребителската програма ще взаимодейства;

използвайте безплатни библиотеки с функции и драйвери

за достъп до USB устройството.

В повечето случаи може да се изисква софтуерен достъп до USB устройство, ако устройството изпълнява много специфична функция. Например на базата на USB са разработени "електронни осцилоскопи" или системи за събиране на данни, за да работят с които е необходимо да има достъп до самото устройство. В повечето от тези случаи можете да използвате безплатни библиотеки с функции, които ще работят в почти всички популярни среди за програмиране. Например, под егидата на GNU е разработен софтуер, известен като LibUsb, който включва необходимите драйвери и функционални библиотеки за работа на Windows и Linux операционни системи. Тези функционални библиотеки са много популярни и ви позволяват бързо да разработвате програми, които взаимодействат с вашето устройство чрез набор от стандартни функции. Това елиминира необходимостта да пишете свой собствен драйвер за устройство, което значително спестява време.

Освен това повечето потребители не са запознати с методологията за разработване на драйвери,

и това е много сложна област на програмиране, така че наличието на такъв свободно разпространяван софтуер ще бъде от неоценима помощ за широк кръг потребители. На базата на проекта LibUsb са разработени обвивки за работа с Visual Basic .NET и C# .NET, най-популярният от които е LibUsbDotNet, също разработен под егидата на свободен софтуер. Въпреки привидната сложност на програмирането на USB устройства, изброеният софтуер прави тази задача толкова лесна, че дори начинаещи могат да се справят с нея. Нека да разгледаме практически примери как да работите с вашите USB устройства и да започнем със софтуерния пакет LibUsb. Между другото, горепосоченият софтуер може да бъде изтеглен безплатно от www.sourceforge.net или от множество дублиращи се сайтове.

Как да работя с библиотеки с функции на LibUsb USB? Библиотеката е изградена по този начин

zom, за да можете да извършвате основни операции, свързани с USB устройството:

идентификация или, с други думи, изброяване. При извършване на тази операция се откриват устройствата, свързани към USB шината, което се извършва с помощта на съответните функции на библиотеката libusb;

получаване на параметри на устройството (идентификатори на устройства, данни на производителя и характеристики на устройството), за които има редица функции в библиотеката;

отваряне, затваряне, четене и запис на данни, изпращане на команди. USB устройството, подобно на други обекти във файловата система, може да бъде достъпно чрез запис чрез четене, което се извършва с помощта на съответните библиотечни функции.

Всички горепосочени функции могат да бъдат реализирани чрез извикване на съответните libusb функции, но те няма да бъдат изброени тук, тъй като това би отнело твърде много място; ще видим как да използваме някои от тези функции.

Ориз. 6.10

Местоположение на драйвера libusb0.sys в стека на драйверите на устройството

ции върху практически примери. Читателите могат да намерят описание на всички функции в съответната документация. Нека ви напомня, че разглеждаме използването на libusb функции в операционни системи Windows.

Когато инсталирате дистрибутивния комплект с libusb в операционната система Windows, филтърният драйвер libusb0.sys се инсталира в системата. Този драйвер ще седи в горната част на стека на системните драйвери, което е лесно да се види, например, като се разгледа информацията за драйвера за всяко USB устройство (Фигура 6.10).

Освен това, за достъп до драйвера от потребителски програми, библиотеката libusb0.dll е инсталирана в системата, с помощта на която можете да разработвате потребителски програми.

Ориз. 6.17

Изглед на прозореца на приложението по време на деинсталиране

USB устройства от системата

Въведение
За кого е тази книга?
Какво ще намерите в книгата
Софтуерни изисквания
Хардуерни изисквания
Относно програмния код
Резюме на главите
Обозначения
Признания
Обратна връзка
Част I. Въведение в USB
Глава 1. USB спецификация
1.1. Какво е USB и защо е необходим
1.1.1. Обща USB архитектура
1.1.2. USB физическа и логическа архитектура
1.1.3. USB компоненти
1.1.4. Свойства на USB устройство
1.1.5. Принципи на пренос на данни
1.1.6. Механизъм за прекъсване
1.1.7. Режими на пренос на данни
1.1.8. Логически нива на обмен на данни
1.1.8.1. Ниво на клиентски софтуер
1.1.8.2. Ниво на драйвер на USB системата
1.1.8.3. Интерфейс на слоя на хост контролера
1.1.8.4. Ниво на USB периферна шина
1.1.8.5. Ниво на USB логическо устройство
1.1.8.6. Функционално ниво на USB устройство
1.1.9. Прехвърляне на данни по слой
1.1.10. Видове трансфери на данни
1.1.11. Персонал
1.1.12. Крайни точки
1.1.13. канали
1.1.14. Пакети
1.1.14.1. Формат на токен пакети IN, OUT, SETUP и PING
1.1.14.2. Формат на пакет SOF
1.1.14.3. Формат на пакет данни
1.1.14.4. Формат на пакета за потвърждение
1.1.14.5. Формат на пакета SPLIT
1.1.15. Чекова сума
1.1.15.1. Алгоритъм за изчисляване на CRC
1.1.15.2. Софтуер за изчисляване на CRC
1.1.16. Транзакции
1.1.16.1. Видове транзакции
1.1.16.2. Потвърждение на транзакцията и контрол на потока
1.1.16.3. Протоколи за транзакции
1.2. Заявки към USB устройства
1.2.1. Конфигурационен пакет
1.2.2. Стандартни заявки към USB устройства
1.2.2.1. Получаване на състоянието GET_STATUS
1.2.2.2. Нулиране на свойството CLEAR_FEATURE
1.2.2.3. SET_FEATURE Разделителна способност на свойството
1.2.2.4. Задаване на адреса на шината SET_ADDRESS
1.2.2.5. Получаване на дескриптора GET_DESCRIPTOR
1.2.2.6. Подаване на дескриптор SET_DESCRIPTOR
1.2.2.7. Получаване на конфигурационния код GET_CONFIGURATION
1.2.2.8. Задаване на конфигурационния код SET_CONFIGURATION
1.2.2.9. Получаване на кода за конфигуриране на интерфейса GET_INTERFACE
1.2.2.10. Задаване на кода за настройка на интерфейса SET_INTERFACE
1.2.2.11. Задаване на номера на синхронизиращия кадър SYNC_FRAME
1.2.2.12. Обработка на стандартни заявки
1.2.3. Дескриптор на устройството
1.2.3.1. Дескриптор на устройството
1.2.3.2. Квалифициращ дескриптор на устройство
1.2.3.3. Дескриптор на конфигурация
1.2.3.4. Дескриптор на интерфейса
1.2.3.5. Дескриптор на крайна точка
1.2.3.6. Дескриптор на низ
1.2.3.7. Специфични дескриптори
1.2.3.8. Ред за получаване на дескриптори
1.3. Plug and Play (PnP) система
1.3.1. Конфигуриране на USB устройства
1.3.2. Номериране на USB устройства
1.3.3. PnP идентификатори за USB устройства
1.3.4. Символични имена на устройства
1.4. WDM модел
Глава 2. C Програмиране за микроконтролер
2.1. Обща информация за езика C за микроконтролери
2.2. Използване на стандартни библиотеки
2.3. Програмиране за AT89C5131
2.3.1. Файл за инициализация
2.3.2. Дескрипторни структури
2.3.3. Структура на проекта
Глава 3. Инструменти
3.1. Програмисти
3.1.1. Флип програмист
3.1.2. Програматор ER-Tronik
3.2. Инструменти за създаване на драйвери
3.2.1. NuMega Driver Studio
3.2.2. Jungo windriver
3.2.3. Jungo KernelDriver
3.3. Инструменти на Microsoft Visual Studio
3.3.1. Зависи (Dependency Walker)
3.3.2. Търсене на грешка
3.3.3. GuidGen
3.4. Microsoft DDK Tools
3.4.1. DeviceTree
3.4.2. DevCon
3.4.2.1. Ключ за класове
3.4.2.2. Ключ за файлове с драйвери
3.4.2.3. Hwids ключ
3.4.2.4. Ключ за повторно сканиране
3.4.2.5. Ключ за стека
3.4.2.6. Ключ за състояние
3.4.3. Chklnf и Genlnf
3.5. Инструменти на корпорацията CompuWare
3.5.1. Монитор
3.5.2. SymLink
3.5.3. EzDriverlninstaller
3.5.4. WdmSniff
3.6. Инструменти на Syslnternals
3.6.1. WinObj
3.7. USB форумни инструменти
3.7.1. HID Descriptor Tool
3.8. USB Command Verifier
3.9. Софтуерни инструменти за HDD
3.10. Инструменти на Sourceforge
3.11. Програма за наблюдение на автобусни хрътки
Глава 4. Принципи на използване на Win32 функции в .NET
4.1. Главна информация
4.2. Импортиране на Win32 функции
4.3. Структури
4.3.1. Атрибут StructLayout
4.3.2. Маршал като атрибут
4.4. Директен достъп до данни
4.5. Обработка на съобщения в Windows
4.6. Разбиране на WMI
4.7. Онлайн ресурси за тази глава
Част II. USB класове
Глава 5. CDC клас
5.1. Методи за конвертиране на USB/RS-232 интерфейси
5.2. Обща информация за интерфейса RS-232
5.2.1. Обменни линии
5.2.1.1. Предадени данни (BA / TxD / TD)
5.2.1.2. Получени данни (BB / RxD / RD)
5.2.1.3. Заявка за изпращане (CA / RTS)
5.2.1.4. Готов за изпращане (CB / CTS)
5.2.1.5. DCE готовност (CC / DSR)
5.2.1.6. DTE Ready (CD / DTR)
5.2.1.7. Индикатор за повикване (CE / RI)
5.2.1.8. Откриване на носител (CF / DCD)
5.2.1.9. Готовност за получаване (CJ)
5.3. Спецификация на CDC
5.3.1. Стандартни дескриптори
5.3.2. Функционални дескриптори
5.3.2.1. Дескриптор на функция за заглавие
5.3.2.2. Дескриптор на командния режим
5.3.2.3. Абстрактен дескриптор на устройство
5.3.2.4. Дескриптор на групиране
5.3.3. Специални искания
5.3.3.1. SET_LINE_CODING заявка
5.3.3.2. Заявка GET_LINE_CODING
5.3.3.3. SET_CONTROL_LINE_STATE заявка
5.3.3.4. SEND_BREAK заявка
5.3.4. Известия
5.3.4.1. ЗВЪН ^ ОТКРИВАНЕ на известие
5.3.4.2. SERIAL_STATE Известие
5.4. Поддръжка на Windows CDC
5.4.1. Преглед на функциите на серийния порт на Windows
5.4.1.1. Основни пристанищни операции
5.4.1.2. Функции за настройка на портове
5.4.1.3. Персонализирана настройка на порта
5.4.1.4. Получаване на състоянието на модемните линии
5.4.1.5. Работа с CDC на платформата. NET
5.4.2. Съответствие между функциите на Windows и USB заявките
Глава 6. HID клас
6.1. Спецификация на HID устройство
6.2. Процедурата за обмен на данни с HID устройство
6.3. Инсталиране на драйвера на HID устройство
6.4. Идентификация на HID устройство
6.4.1. Идентификация на устройството за стартиране
6.4.2. Дескриптор за конфигурация на HID устройство
6.4.3. HID дескриптор
6.4.4. Дескриптор на отчета
6.5. Структура на дескриптора на отчета
6.5.1. Елементи на отчета
6.5.1.1. Елементи от къс тип
6.5.1.2. Дълъг тип елементи
6.5.2. Докладвайте типове елементи
6.5.2.1. Съществени елементи
6.5.2.2. Глобални елементи
6.5.2.3. Местни елементи
6.5.3. Примери за дескриптори
6.6. Заявки към HID устройство
6.6.1. Заявка GET_REPORT
6.6.2. SET_REPORT Заявка
6.6.3. GET_IDLE заявка
6.6.4. SET_IDLE заявка
6.6.5. Заявка GET_PROTOCOL
6.6.6. SET_PROTOCOL заявка
6.7. Инструменти
6.8. Драйвери за HID устройства в Windows
Глава 7. Други USB класове
Част III. Практика за програмиране на USB
Глава 8. Създаване на USB устройство на базата на AT89C5131
8.1. Обща информация за AT89C5131
8.2. Структурна схема на AT89S5131
8.3. USB регистри AT89C5131
8.3.1. USBCON регистър
8.3.2. USBADDR регистър
8.3.3. USBINT регистър
8.3.4. USBIEN регистър
8.3.5. Регистър UEPNUM
8.3.6. UEPCONX регистър
8.3.7. регистър UEPSTAX
8.3.8. регистър UEPRST
8.3.9. UEPINT регистър
8.3.10. регистър UEPIEN
8.3.11. UEPDATX регистър
8.3.12. UBYCTLX регистър
8.3.13. UFNUML регистър
8.3.14. регистър на UFNUMH
8.4. Схема AT89S5131
8.5. Основен дизайн за AT89C5131
8.5.1. Първата версия на програмата за AT89C5131
8.5.2. Добавяне на низови дескриптори
8.5.3. Добавяне на крайни точки
8.6. Изтеглете програмата
Глава 9. Внедряване на CDC клас
9.1. Изпълнение на CDC
9.2. Дескриптори на устройства
9.2.1. Инициализация на крайна точка
9.2.2. Обработка на заявки за CDC
9.2.3. Конфигуриране на RS-порт и CDC-линия
9.2.4. Приемане и предаване на данни
9.3. Инсталиране на драйвери
9.4. Програмиране на обмен на данни с CDC устройство в Delphi
9.5. Програмиране на обмен с CDC устройство в C #
9.5.1. Използване на компонента MSCOMM
9.5.2. Използване на Win32 функции
9.6. CDC проблеми
Глава 10. Внедряване на HID клас
10.1. Внедряване на HID на AT89C5131
10.2. Прехвърляне на няколко байта
10.3. Доклади за функции
10.4. Прехвърляне на данни от хоста (SET_REPORT)
10.5. Инсталиране на HID устройство
10.6. Комуникация със HID устройство
10.6.1. Получаване на името на HID устройството
10.6.2. Получаване на атрибути на устройството и четене на отчети
10.6.3. Прехвърляне на данни от хост към HID
10.7. Примери за HID устройства
10.7.1. Реализация на устройство за мишка
10.7.2. Внедряване на клавиатурното устройство
10.8. Използване на протокола HID
10.8.1. Интерпретиране на данни
10.8.2. Колекции
10.8.3. Масиви и бутони
10.9. HID устройство с множество отчети
Глава 11. Специални функции на Windows
11.1. Настройка на функции на API
11.1.1. Изброяване на USB устройства
11.1.2. Получаване на състоянието на USB устройство
11.2. Изброяване на USB устройства с помощта на WMI
11.3. Специални функции на Windows XP
11.3.1. HidD_GetInputReport - четене на HID отчети
11.3.2. Получаване на необработени входни данни
11.4. DirectX функции
11.5. Диалог за добавяне на ново оборудване
11.6. Работа със символични имена на устройства
11.7. Безопасно премахване на флаш памети
11.8. Откриване на добавяне и премахване на устройства
11.9. Интернет ресурси
Глава 12. Разработване на драйвери
12.1. Основни процедури за WDM драйвер
12.1.1. Процедура DriverEntry
12.1.2. Процедура AddDevice
12.1.3. Процедура за разтоварване
12.1.4. Оперативни процедури на драйвера
12.1.4.1. Заглавка на пакета
12.1.4.2. I/O стек клетки
12.4.1.3. Оперативни процедури на драйвера
12.1.5. Обслужване на IOCTL заявки
12.2. Зареждане на драйвера и достъп до процедури за драйвер
12.2.1. Процедура за водача
12.2.2. Регистриране на драйвер
12.2.2.1. Регистрация в SCM-мениджър
12.2.2.2. Параметри на драйвера в системния регистър
12.2.3. Позовавайки се на оперативните процедури
12.2.4. Съхранение на драйвера в изпълнимия файл
12.3. Създаване на драйвер с Driver Studio
12.3.1. Няколко думи за библиотеката Driver Studio
12.3.1.1. Клас KDriver
12.3.1.2. Клас KDevice
12.3.1.3. Клас Klrp
12.3.1.4. Клас KRegistryKey
12.3.1.5. Клас KLowerDevice
12.3.1.6. USB класове
12.3.2. Други класове Driver Studio
12.3.3. Създаване на шаблон на драйвер с Driver Studio
12.3.3.1. Стъпка 1. Задаване на името и пътя на проекта
12.3.3.2. Стъпка 2. Избор на архитектура на драйвера
12.3.3.3. Стъпка 3. Избор на гума
12.3.3.4. Стъпка 4. Задаване на набор от крайни точки
12.3.3.5. Стъпка 5. Задаване на класа и името на файла
12.3.3.6. Стъпка 6. Изберете функции на драйвера
12.3.3.7. Стъпка 7. Избор на начин за обработка на заявки
12.3.3.8. Стъпка 8. Създайте запазени настройки на драйвера
12.3.3.9. Стъпка 9. Свойства на драйвера
12.3.3.10. Стъпка 10. Задаване на IOCTL кодове
12.3.3.11. Стъпка 11. Допълнителни настройки
12.3.4. Промяна на шаблона на драйвера
12.3.5. Методи за основни класове на устройства
12.3.6. Реализация на четене на данни
12.3.7. Инсталиране на драйвери
12.3.8. Четец на данни
12.3.9. Четене на данни от други типове крайни точки
12.3.10. Почистване на драйвер за USB устройство
Част IV. Указател
Глава 13. INF файлов формат
13.1. INF файлова структура
13.1.1. Раздел за версиите
13.1.2. Секция производител
13.1.3. Секция DestinationDirs
13.1.3.1. Ключ DefaultDescDir
13.1.3.2. Ключове за раздели на списък с файлове
13.1.3.3. Дирид ключ
13.1.3.4. Ключ поддир
13.1.4. Раздел за описание на модела
13.1.5. Раздел xxx. AddRegw xxx. DelReg
13.1.6. Раздел xxx. LogConfig
13.1.7. Раздел xxx. CopyFiles
13.1.8. Секция за струни
13.1.9. Връзки към разделите
13.2. Създаване и тестване на INF файлове
13.3. Инсталиране на устройства с помощта на INF файла
13.4. USB клонове на регистъра
Глава 14. Основни функции на Windows
14.1. Функции CreateFile и CloseHandle: Отваряне и затваряне на обект
14.1.1. Допълнителна информация
14.1.2. Връщана стойност
14.1.3. Обадете се пример
14.2. Функция ReadFile: четене на данни
14.2.1. Допълнителна информация
14.2.2. Връщана стойност
14.2.3. Обадете се пример
14.3. Функция за запис на файл: прехвърляне на данни
14.3.1. Допълнителна информация
14.3.2. Връщана стойност
14.3.3. Обадете се пример
14.4. Функция ReadFileEx. APC прочете данни
14.4.1. Връщана стойност
14.4.2. Допълнителна информация
14.4.3. Обадете се пример
14.5. Функция WriteFiieEx: APC трансфер на данни
14.5.1. Връщана стойност
14.5.2. Обадете се пример
14.6. Функция WaitForSingieObject изчаква състоянието на сигнала на обекта
14.6.1. Връщана стойност
14.7. WaitForMultipleObjects Функция: Изчакване на състоянието на сигнала на обектите
14.7.1. Връщана стойност
14.8. Функция GetOverlapped Result: резултат от асинхронна операция
14.8.1. Връщана стойност
14.9. Функция DeviceloControl: директно управление на водача
14.9.1. Връщана стойност
14.10. Функция Cancel / o: прекратяване на операцията
14.10.1. Връщана стойност
14.11. Запитване на Dos Device функция, получаване на името на устройството по неговото DOS име
14.11.1. Връщана стойност
14.11.2. Обадете се пример
14.12. Дефиниране на функция Dos Device: операции с името на DOS устройство
14.12.1. Връщана стойност
14.12.2. Обадете се пример
Глава 15. Структури и функции на Windows за серийни портове
15.1. Структура на настройките на порта COMMCONFIG
15.2. Структура на свойствата на порта COMMPROP
15.3. COMMTIMEOUTS структура на изчакване
15.4. Структура на състоянието на порта COMSTAT
15.5. DCB структура
15.6. Функция BuildCommDCB: Изградете DCB структура от низ
15.6.1. Допълнителна информация
15.6.2. Връщана стойност
15.6.3. Обадете се пример
15.7. Функция BuildCommDCBAndTimeouts: Изграждане на DCB структура и изчакване от низ
15.8. Функции SetCommBreak и ClearCommBreak: Контрол на изхода на данни
15.8.1. Връщана стойност
15.9. Функция ClearCommError: Получаване и нулиране на грешки в порта
15.9.1. Връщана стойност
15.10. EscapeCommFunction: контрол на порта
15.10.1. Връщана стойност
15.11. Функции GetCommMask и SetCommMask: маска за извикване на събитие
15.11.1. Връщана стойност
15.12. Функция WaitCommEvent чака събитие за COM порт
15.12.1. Връщана стойност
15.12.2. Допълнителна информация
15.12.3. Обадете се пример
15.13. Функции GetCommConfig и SetCommConfig: Конфигуриране на параметри на порта
15.13.1. Връщана стойност
15.13.2. Обадете се пример
15.14. CommConfigDialog Функция: Диалогов прозорец за конфигуриране на порт
15.14.1. Връщана стойност
15.14.2. Допълнителна информация
15.14.3. Обадете се пример
15.15. Функция GetCommProperties: чете свойствата на порта
15.15.1. Връщана стойност
15.15.2. Обадете се пример
15.16. Функции GetCommState и SetCommState: Състояние на порта
15.16.1. Връщана стойност
15.16.2. Обадете се пример
15.17. Функции GetCommTimeouts и SetComniTimeouts: Изчакване на портове
15.17.1. Връщана стойност
15.17.2. Обадете се пример
15.18. Функция PurgeComm: Промиване на портовите буфери
15.18.1. Връщана стойност
15.18.2. Обадете се пример
15.19. SetupComm: Конфигуриране на размери на буфера
15.19.1. Връщана стойност
15.20. Функции GetDefaultCommConfig и SetDefaitltCommConfig: Настройки на порта по подразбиране
15.20.1. Връщана стойност
15.21. Функция TransmitCommChar. прехвърляне на специални символи
15.21.1. Връщана стойност
15.22. Функция GetCommModemStatus: състояние на модема
15.22.1. Връщана стойност
15.22.2. Обадете се пример
15.23. Функция EnumPorts: изброяване на портове
15.23.1. Допълнителна информация
15.23.2. Връщана стойност
15.23.3. Обадете се пример
Глава 16. Структури и функции на API за настройка на Windows
16.1. Настройка на DiGetCiassDevs: Изброяване на устройства
16.1.1. Връщана стойност
16.2. Функция SetupDiDestroyDevicelnfoList, освобождаваща блок за описание на устройството
16.2.1. Връщана стойност
16.3. Функция SetupDiEnumDevicelinterfaces: информация за устройството
16.3.1. Връщана стойност
16.4. Функция SetupDiGetDevicelnterfaceDetaii: подробности за устройството
16.5. Функция SetupDiEnumDevicelnfo: информация за устройството
16.6. Функция SetupDiGetDeviceRegistryProperty: Вземете свойствата на устройството Plug and Play
16.7. Функция CM_Get_DevNode_Status: състояние на устройството
16.8. Функция CM_Request_Device_Eject за безопасно премахване на устройство
Глава 17. Структури и функции на Windows HID API
17.1. Функция HidD_Hello: проверка на библиотеката
17.2. Функция HidD_JetHidGuid: получаване на GUID
17.3. Функция HidD_GetPreparsedData: създаване на дескриптор на устройство
17.4. Функция HidD_EreePreparsedData: освобождава манипулатора на устройството
17.5. Функция HidD_Get Feature: получаване на отчет за функция
17.6. Функция HidD_SetFeature: прехвърляне на Feature-report
17.7. Функция HidD_GetNumlnputBuffers: получаване на броя на буферите
17.8. Функция HidD_SetNumlnputBuffers: задаване на броя на буферите
17.9. Функция HidD_GetAttributes: получаване на атрибути на устройството
17.10. Функция HidD_GetManufacturerString. вземете низ от производителя
17.11. Функцията HidD_GetProductString получава продуктов низ
17.12. Функция HidD_GetSerialNumberString. получаване на низ от сериен номер
17.13. Функция HidD_GetIndexedString. получаване на низ по индекс
17.14. Функцията HidD_Jetlnput Report получава Input-report
17.15. Функция HidD_SetOutputReport. предаване на изходен отчет
17.16. Функция HidP_GetCaps: получаване на свойства на устройството
17.17. Функция HidP_MaxDataListLength: получаване на размери на отчета
17.18. Функция HidD_FIushQueue: промиване на буфери
17.19. Функция HidP_GetLinkColiectionNodes: дърво за събиране
17.20 ч. Функции HidP_GetScaledUsageValue u HidP_SetScaledUsage Value: Вземете и задайте трансформирани стойности
17.21. Функция HidF_MaxUsageListLength: размер на буфера за ключови кодове
17.22. Функция HidP_UsageListDifference: разлика между масивите
Приложения
Приложение 1. Допълнителни функции
Приложение 2. Компилация на примери в други версии на Delphi
Приложение 3. Таблица с езикови идентификатори (LangID)
Приложение 4. Таблица с кодовете на производителя (Идентификатор на доставчик, ИД на устройство)
Приложение 5. Как да създадете пряк път на диспечера на устройства
Приложение 6. Често задавани въпроси
Приложение 7. Описание на компактдиска
литература
Предметен индекс

USB програмиране

Програмирането на устройството за настройка на сателитни антени SF-50 през USB порта се различава от програмирането през порт RS-232 само по начина на прехвърляне на данни от устройството към компютъра и от компютъра към устройството. При програмиране чрез USB се използва преносимо USB устройство за съхранение (флашка). Това е удобно, когато например вашият компютър или по-често лаптоп (нетбук) няма сериен RS-232 порт на шасито си.
За да програмирате устройството с помощта на USB флаш, ще ви трябва:
- USB устройство за съхранение (флашка), форматирано във файловата система FAT-32;
- Редакторна програма AliEditor, намираща се в папката Database_editor_new на софтуерния раздел OPENBOX SF-50.

Преди да започнете програмирането, е необходимо да прехвърлите базата данни от устройството към компютъра. За да направите това, включете устройството, свържете USB флаш устройство към USB порта. Изпълнете MENU - System - Save to USB,

Излезте от менюто, като натискате бутона MENU, докато се появи текущият канал или докато се появи снимката на главното меню, ако все още няма канали, и извадете USB флаш устройството. Поставете USB флаш устройството в компютъра.
Стартирайте програмата Editor.exe от папката Database_editor_new и отворете изображението на USB флаш устройството в нея.

Когато бъдете подканени да изберете база данни, изберете Потребителска база данни.

Щракнете върху OK. Изберете Всички услуги, ще се отвори списък с всички сканирани и запазени телевизионни, радио и сервизни канали, налични в базата данни.

Редактирайте каналите, както желаете, например, оставете само отворени канали.
На клавиатурата на компютъра задръжте натиснат бутона Shift, натиснете "стрелката надолу" и изберете каналите, които искате да изтриете. Натиснете Delete, за да изтриете селекцията.

За да редактирате настройките за сателита, изберете Всички услуги - Информация за сателита - EUTELSAT W4, W7, натиснете бутона ENTER.

Редактирайте стойностите в Антена 1, ако е необходимо.
За да изтриете транспондер, отидете на ненужния и натиснете бутона Delete на клавиатурата на компютъра, потвърдете избраното действие.

За да добавите транспондер, застанете на името на сателита, натиснете десния бутон на мишката и изберете Добавяне на информация (или като маркирате сателита, натиснете бутона Вмъкване на клавиатурата).

Въведете данните за новия транспондер, като ги вземете например на уебсайта lyngsat.com.

Щракнете върху OK, уверете се, че транспондерът е регистриран.

За да добавите сателит, отидете на реда Информация за сателита, натиснете клавиша Insert на клавиатурата и въведете параметрите на новия сателит.

затворете програмата за редактор, извадете устройството.
Поставете устройството в устройството OPENBOX SF-50, следвайте последователността МЕНЮ - Система - Актуализиране от USB, изберете режим "SAT & TP List".

Изберете Старт. Потвърдете намеренията си.

Устройството ще актуализира базата и ще се рестартира. След рестартиране ще трябва да настроите руския език на менюто по нов начин в настройките. Нулирайте устройството до фабричните настройки.
Излезте от менюто с настройки, като натиснете два пъти бутона MENU. Натиснете бутона OK на текущия канал и се уверете, че списъкът с канали е редактиран.

Можете също така да се уверите, че списъкът с транспондери и сателити също е редактиран.
Програмирането е завършено.

USB (Universal Serial Bus) шината се появява на 15 януари 1996 г., когато първата версия на стандарта е одобрена от Intel, DEC, IBM, NEC, Northen Telecom и Compaq.

Основната цел на стандартния набор за неговите разработчици е да създаде възможност за потребителите да работят в режим Plug & Play с периферни устройства. Това означава, че трябва да има разпоредба за свързване на устройството към работещ компютър, автоматично разпознаване веднага след свързването и след това инсталиране на съответните драйвери. Освен това е желателно да захранвате устройства с ниска мощност от самата шина. Скоростта на шината трябва да е достатъчна за по-голямата част от периферните устройства. USB контролерът трябва да заема само едно прекъсване, независимо от броя на устройствата, свързани към шината, тоест да реши проблема с липсата на ресурси във вътрешните шини на IBM PC на съвместим компютър.

Почти всички задачи бяха решени в USB стандарта, а през пролетта на 1997 г. започнаха да се появяват компютри, оборудвани с конектори за свързване на USB устройства. Сега USB се прилага толкова активно от производителите на компютърни периферни устройства, че например в Apple Computers iMAC има само USB като външна шина.

Характеристиките на USB 1.0 са както следва:

1.висока скорост на обмен на данни (пълна скорост) - 12 Mb то/С;

2. максималната дължина на кабела за висок обменен курс е 5 метра;

3.ниска скорост на обмен на данни (ниска скорост) - 1,5 Mb то/С;

4. максималната дължина на кабела за нисък обменен курс е 3 метра;

5. максимален брой свързани устройства - 127;

6. Възможно едновременно свързване на устройства с различни обменни курсове;

8. Максималната консумация на ток на устройство е 500 mA.

Ето защо е препоръчително да свържете почти всяко периферно устройство към USB 1.0, с изключение на цифрови видеокамери и високоскоростни твърди дискове. Този интерфейс е особено удобен за свързване на често свързани/изключени устройства като цифрови фотоапарати.
Възможността за използване само на две скорости на предаване ограничава използването на шината, но значително намалява броя на интерфейсните линии и опростява хардуерната реализация.
Захранването директно от USB е възможно само за устройства с ниска мощност като клавиатури, мишки, джойстици и др.

USB сигналите се предават по 4-жилен кабел, схематично показан на фигурата по-долу:

Фигура 2.6.1 - USB сигнални проводници

Тук GND е обща проводна верига за захранване на периферни устройства, Vbus - +5 V също за захранващи вериги. D + шината е за предаване на данни по шината, а D- шината за получаване на данни.
Кабелът за поддръжка на шина с пълна скорост е усукана двойка, екраниран и може да се използва и за работа с ниска скорост. Кабелът за работа само с минимална скорост (например за свързване на мишка) може да бъде всеки кабел и може да бъде неекраниран.
Конекторите, използвани за свързване на периферни устройства, са разделени на серия: конекторите от серия “A” (щепсел и контакт) са предназначени само за свързване към източник като компютър, конекторите от серия “B” (щепсел и контакт) са само за свързване към периферно устройство.

USB конекторите имат следната номерация на щифтовете, показана в таблица 2.6.1.

Таблица 2.6.1 - Предназначение и маркировка на USB контактите

През 1999 г. същият консорциум от компютърни компании, който инициира разработването на първата версия на стандарта за USB шината, започва активно да разработва версия 2.0 на USB, която се отличава с въвеждането на допълнителна високоскоростна (Hi-speed) режим. Пропускателната способност на шината е увеличена 40 пъти, до 480 Mbps, което направи възможно прехвърлянето на видео данни през USB.
Всички по-рано пуснати периферни устройства и високоскоростни кабели са напълно съвместими. Контролерът на стандарта 2.0 вече е интегриран в набора от системна логика на програмируеми устройства (например дънната платка на персонален компютър).

През 2008 г. Intel, Microsoft, Hewlett-Packard, Texas Instruments, NEC и NXP Semiconductors създадоха стандартната спецификация на USB 3.0. В спецификацията USB 3.0 конекторите и кабелите на актуализирания стандарт са физически и функционално съвместими с USB 2.0, но в допълнение към четирите комуникационни линии са добавени още четири. Новите контакти в USB 3.0 конектори обаче са разположени отделно от старите на различен ред контакти. Спецификацията USB 3.0 повишава максималната скорост на трансфер на данни до 5 Gbps - порядък повече от 480 Mbps, които USB 2.0 може да осигури. В допълнение, максималната сила на тока е увеличена от 500 mA на 900 mA на устройство, което прави възможно захранването на някои устройства, които преди това изискваха отделно захранване.

Да предположим, че сте разработили USB устройство, което искате да работите с компютър. Това може да се постигне поне по два начина:

1. Разработване на пълнофункционален драйвер за операционна система;

2. използване на специален клас USB интерфейс - устройства, наречени HID (Human Interface Device) устройства.

Първият метод е универсален: като имате достатъчно познания в областта на писането на драйвери, можете да програмирате да работите с всяко устройство при всяка скорост, поддържана от USB. Но това е доста трудна задача.

Вторият начин е както следва. Има интерфейс, поддържан от съвременни операционни системи за устройства за взаимодействие човек-компютър или HID устройства, като:

1. клавиатури, мишки, джойстици;

2. различни сензори и четци;

3. управление на играта и педали;

4. бутони, ключове, регулатори.

Всяко такова устройство, ако отговаря на изискванията за HID устройства, ще бъде автоматично разпознато от системата и не изисква писане на специални драйвери. Освен това програмирането им обикновено е много по-лесно от писането на специализиран драйвер за устройство. За съжаление методът има значителен недостатък: скоростта на обмен на информация с HID устройството е много ограничена и възлиза на максимум 64 kB / s.

По принцип, на базата на HID технологията е възможно да се организира взаимодействие с всяко устройство, дори ако то не е, в тесния смисъл, устройство за интерфейс човек-компютър. Това елиминира отнемащата време разработка на уникален драйвер за устройство и спестява време за разработване на ново USB устройство. От страната на хоста комуникацията с устройството ще се контролира от стандартния HID драйвер, включен в операционната система. Просто трябва да изпълните минималните изисквания на USB-HID протокола от страната на устройството.

Струва си да се отбележи, че много USB устройства, които на пръв поглед не попадат в дефиницията за устройства за взаимодействие с хора, е по-логично да ги приложим като HID устройства. Това явление е често срещано в областта на производственото оборудване, което наскоро претърпя масово възприемане на USB технологията. Например, помислете за лабораторно захранване с възможност за настройка на параметрите на изходните му сигнали от компютър с помощта на USB интерфейс. Самият източник на енергия несъмнено не е средство за взаимодействие с хората. В този случай обаче функциите, реализирани чрез USB връзката, дублират клавиатурата, контролите и индикаторите, инсталирани на самото устройство. И тези контроли просто попадат под определението за HID. Съответно, захранването с тези USB функции е най-логично да се организира като HID устройство.

В разглеждания пример ниска скорост на трансфер на данни ще бъде достатъчна за нормална работа, докато в други случаи устройствата могат да бъдат много взискателни към обменния курс. Ниската скорост на предаване е основното ограничение на HID дизайна на устройството, което, в сравнение с 12 Mbit/s пълна скорост на USB 1.0 шина, изглежда като голям недостатък на HID технологията, когато става въпрос за избор на конкретна USB реализация. Въпреки това, за много комуникационни задачи посочената скорост е напълно достатъчна и HID архитектурата като специализиран инструмент заема достойно място сред методите за организиране на обмен на данни.

HID устройствата са два вида: участващи (зареждащи) и неучастващи в първоначалното зареждане на компютъра. Най-яркият пример за стартиращо USB-HID устройство е клавиатурата, чиято работа започва с стартирането на компютъра.

При разработването на HID устройство трябва да бъдат изпълнени следните изисквания, наложени от спецификацията:

1.Пълноскоростно HID устройство може да предава 64000 байта всяка секунда или 64 байта на всеки 1ms; Нискоскоростното HID устройство има способността да предава до 800 байта в секунда или 8 байта на всеки 10 ms.

2. HID устройството може да определи своята честота на запитване, за да определи дали има нови данни за предаване.

3. Обменът на данни с HID-устройството се осъществява чрез специална структура, наречена отчет (Report). Всеки конкретен отчет може да съдържа до 65535 байта данни. Структурата на отчета има много гъвкава организация, която ви позволява да опишете всеки формат на предаване на данни. За да стане известен на хоста определен формат на отчета, микроконтролерът трябва да съдържа специално описание - дескриптор на отчет.

USB комуникацията се осъществява директно на микроконтролера по няколко начина:

1.Използване на контролер с хардуерна поддръжка, например AT90USB*, произведен от atmega;

2. Използване на софтуерна емулация на USB интерфейса на всеки микроконтролер.

За софтуерна реализация в момента има редица готови решения за различни семейства микроконтролери. За AVR микроконтролери, например, Atmega8 е възможно да се използват следните безплатни C библиотеки:

И двете са сравнително лесни за използване, осигуряват пълна емулация на USB 1.1 нискоскоростни устройства с изключение на обработката на комуникационни грешки и електрическата производителност и работят на почти всички AVR контролери с минимум 2KB флаш, 128 байта RAM и честота от 12 до 20 MHz.

За да пишете приложения, които поддържат Windows USB HID устройства, ви трябват заглавките hid *, включени в комплекта драйвери на Windows (WDK), или можете да използвате безплатната скрита библиотека или подобно.

Така в общия случай програмирането на USB е доста трудна задача, която изисква специален микроконтролер с хардуерна поддръжка и писане на драйвер за операционна система. На практика обаче при разработването на устройства е възможно да се използва много по-опростен интерфейс на HID устройства, чиято поддръжка е реализирана на нивото на стандартния системен драйвер, а програмирането е опростено с помощта на съществуващи функционални библиотеки.

Контролни въпроси

  1. Каква е разликата между D- и GND проводниците в USB? Защо не можете да използвате един общ проводник за захранване и сигнал?
  2. Колко скоростни режима на USB има днес (включително версия 3.0)?
  3. Какво е HID устройство? Защо не се изисква да се пишат драйвери за тяхната работа в съвременна ОС?
  4. Възможно ли е да се реализират USB устройства с микропроцесор, който няма вградена поддръжка на интерфейса?
  5. Какви са основните разлики между USB 3.0 и предишните версии?

Добра книга, обяснява много. Полезно е за тези, които искат да разберат как се прехвърлят данни през USB шината.

Въведение 1
За кого е тази книга: 2
Какво ще намерите в книга 2
Софтуерни изисквания 3
Хардуерни изисквания 4
Относно код 4
Резюме на глави 4
Легенда 6
Благодарности 7
ЧАСТ I. ВЪВЕДЕНИЕ В USB 9
Глава 1. Какво е USB 11
1.1. USB история 11
1.2. Сравнение на USB с други интерфейси 14
1.3. Основни понятия за USB 16
1.3.1. Обща архитектура на автобуса 16
1.3.2. Архитектура на физическата и логическата шина 16
1.3.3. USB компоненти 18
1.3.4. Свойства на USB устройство 18
1.3.5. Свойства на центъра 19
1.3.6. Свойства на хоста 20
1.4. Примери за USB устройства 20
1.4.1. Мишка и клавиатура., 21
1.4.2. Монитори 21
1.4.3. USB-към-COM и USB-към-LPT адаптери 22
1.4.4. Скенерите 23
1.4.5. Модеми 23
1.4.6. Говорители 24
1.4.7. Флаш памети 25
1.4.8. Хъбове 28
1.4.9. Измервателна техника 28
1.4.10. Екзотични устройства 29
1.5. USB мрежова връзка 30
1.5.1. USB-Ethernet конвертор 31
1.5.2. Директна USB връзка 31
1.6. Пренос на данни 31
1.6.1. Принципи на предаване на данни 32
1.6.2. Механизъм за прекъсване 32
1.6.3. Интерфейси на хост адаптера 32
1.6.4. Възможност за директен достъп до паметта 34
1.6.5. Режими на пренос на данни 34
1.7. Инсталиране и конфигуриране на USB устройства 35
1.7.1. Настройки на BIOS за USB 38
1.7.2. Отстраняване на неизправности 41
1.8. USB ограничения 45
1.9. Ако си купите компютър 46
1.9.1. HS и USB 2.0 не са едно и също нещо! 46
1.9.2. Системна платка 47
1.9.3. Сграда 48
1.9.4. USB за „стари“ модели компютри 48
1.10. Онлайн ресурси за тази глава 49
Глава 2. USB хардуер 51
2.1. Кабели и конектори 51
2.1.1. Видове кабели 52
2.1.2. Дължина на кабела 53
2.1.3. Конектори 53
2.2. Физически интерфейс 55
2.2.1. Кодиране на данни 57
2.2.2. Идентификация на устройството 58
2.3. Хранене 59
2.3.1. Типове USB захранване 59
2.3.2. Енергиен мениджмънт 60
2.3.3. Влизане в режим на ниска мощност 61
2.4. Онлайн ресурси за тази глава 61
ЧАСТ II. ВЪТРЕШНА ОРГАНИЗАЦИЯ USB 63
Глава 3. Вътрешна организация на автобуса 65
3.1. Нива на логическа комуникация 65
3.1.1. Клиентски софтуер ниво 66
3.1.2. USB системен драйвер ниво 67
3.1.3. Слой на контролера на интерфейса на хоста 68
3.1.4. Ниво на периферна шина 68
3.1.5. USB логическо устройство ниво 69
3.1.6. Функционално ниво на USB устройство 69
3.2. Прехвърляне на данни от ниво 69
3.3. Видове трансфер на данни 71
3.4. Синхронизация с изохронен трансфер 73
3.5. Персонал 77
3.6. Крайни точки 78
3.7. Канали 79
3.8. Пакети 81
3.8.1. Формат на IN, OUT, SETUP и PING токен пакети 83
3.8.2. Пакет формат SOF 83
3.8.3. Формат на пакети данни 84
3.8.4. Формат на пакета за потвърждение< 84
3.8.5. формат на пакета SPLIT * 84
3.9. Контролна сума 85
3.9.1. Алгоритъм за изчисляване на CRC 86
3.9.2. Софтуерно изчисляване на CRC 87
3.10. Транзакции 90
3.10.1. Видове транзакции 91
3.10.2. Потвърждение на транзакция и контрол на потока 92
3.10.3. Протоколи за транзакции 93
Глава 4. Вътрешна организация на продукта 96
4.1. Заявки към USB устройства 96
4.1.1. Конфигурационен пакет 96
4.1.2. Стандартни заявки за устройства 99
4.1.3. Дескриптори на устройства 105
Глава 5. Вътрешна организация на хост и центрове 123
5.1. Хъбове 123
5.1.1. Взаимодействие на хост контролера с хъба 126
5.1.2. Хъб дескриптор 127
5.1.3. Хъб искания 129
5.1.4. CLEAR_HUB_FEATURE заявка 130
5.1.5. CLEAR PORT_FEATURE 130 заявка
5.1.6. Заявете GET_BUS_STA TE 131
5.1.7. Заявете GET_HUB_DESCRfPTOR 131
5.1.8. Заявете GET_HUB_STATUS 131
5.1.9. Заявете GET_PORT_STA TUS 132
5.1.10. SET_HUB_DESCRIPTOR 134 заявка
5.1.11. SET_HUB_FEATURE Заявка 134
5.1.12. Заявка за SET PORT FEATURE. 134
5.2. Съвместна работа на устройства с различни скорости 135
Глава 6. USB без компютър 137
6.1. OTG конектори 138
6.2. Видове OTG устройства 138
6.3. Дескриптор на OTG устройство 139
6.4. Онлайн ресурси за тази глава 140
ЧАСТ III. ПРАКТИКА ПО ПРОГРАМИРАНЕ 141
Глава 7. Windows USB поддръжка 143
7.1. Модел WDM 144
7.2. Взаимодействие с USB драйвер 146
Глава 8. HID устройства * 149
8.1. Свойства на HID устройство 149
8.2. Как да обменяте данни със HID устройство 151
8.3. Инсталиране на HID устройство 152
8.4. Идентификация на HID устройство 152
8.4.1. Идентификация на зареждащото устройство 153
8.4.2. Дескриптор за конфигурация на HID устройство 153
8.4.3. HID дескриптор 154
8.4.4. Дескриптор на отчет 156
8.5. Структура на дескриптора на отчета 156
8.5.1. Структура на елементите на отчета 156
8.5.2. Типове елементи на отчета 157
8.5.3. Примери за дескриптори 165
8.6. Заявки за HID устройство 168
8.6.1. Заявка GET_REPORT. 169
8.6.2. SET_REPORT Заявка 169
8.6.3. GETJDLE заявка. 170
8.6.4. SETJDLE 170 Искане
8.6.5. Заявете GET_PROTOCOL 171
8.6.6. SET_PROTOCOL Заявка 171
8.7. Инструменти 171
8.8. Взаимодействие с HID драйвер 172
Глава 9. Въведение в WDM 181
9.1. Слоеве на драйвери 183
9.2. Имена на символни устройства 184
9.3. Основни процедури за WDM драйвер 189
9.3.1. Процедура DriverEntry 190
9.3.2. Процедура за добавяне на устройство 192
9.3.3. Процедура за разтоварване 194
9.3.4. Оперативни процедури на драйвера 196
9.3.5. Обслужване на заявки IOCTL 203
9.4. Зареждане на драйвера и достъп до процедури за драйвер 209
9.4.1. Процедура на водача 209
9.4.2. Регистриране на драйвер 210
9.4.3. Позовавайки се на оперативни процедури 217
9.4.4. Съхранение на драйвер в изпълним файл 218
9.5. Инструменти за създаване на драйвери 220
9.5.1. NuMega Driver Studio 220
9.5.2. Jungo WinDriver 220
9.5.3. Jungo KernelDriver 220
Глава 10. USB PnP спецификация 221
10.1. Въведение в Plug and Play 221
10.1.1. Plug and Play Задачи и функции 221
10.1.2. Стартиране на процедурата PnP 222
10.1.3. PnP софтуерни компоненти 224
10.2. Plug and Play за USB 225
10.2.1. Конфигуриране на USB устройства 226
10.2.2. Номериране на USB устройства 226
10.2.3. USB PnP идентификатори на устройства 228
10.3. Получаване на списък с USB устройства 229
10.4. INF файл 234
10.4.1. INF файлова структура 234
10.4.2. Раздел Версия 235
10.4.3. Раздел на производителя 237
10.4.4. Destination Dirs, раздел 239
10.4.5. Описание на модела Раздел 241
10.4.6. Раздел xxx.AddReg и xxx.DelReg. 242
10.4.7. Раздел xxx.LogConfig 244
10.4.8. Раздел xxx.CopyFiles 244
10.4.9. Стрингове, раздел 245
10.4.10. Връзки към раздел 246
10.4.11. Създаване и тестване на INF файлове 247
10.4.12. Инсталиране на устройства с помощта на INF файла 248
10.5. USB клонове на регистъра 249
Глава 11. Функции на BIOS 251
11.1. BIOS услуга 1АН 251
11.1.1. Функция B101H - определяне на наличието на PCI BIOS 252
11.1.2. Функция B102H - търсене на PCI устройства по идентификатори
устройства и производители 253
11.1.3. Функция B103H - търсене на PCI устройства по клас код 254
11.1.4. Функция B108H - четене на конфигурационния регистър (байт) 255
11.1.5. Функция VYu9N - четене на конфигурационния регистър (Word) 256
11.1.6. Функция B10AN - четене на конфигурационния регистър (DWord) 256
11.1.7. Функция B10BN - запис на конфигурационен регистър (байт) 257
11.1.8. Функция B10CH - запис на конфигурационен регистър (Word) 257
11.1.9. B10DH Функция - Записване на конфигурационен регистър (DWord) 258
11.2. Казус 259
ЧАСТ IV. СЪЗДАВАНЕ НА USB УСТРОЙСТВА 283
Глава 12. USB периферни устройства 285
12.1. Микрочипове Atmel 286
12.1.1. Микроконтролери с архитектура MSC-51 286
12.1.2. Хъб контролери 289
12.1.3. Хъб микропроцесори с AVR 289 ядро
12.1.4. Други чипове Atmel 290
12.2. Микрочипове Cygnal 291
12.2.1. Микропроцесори C8051F320 и C8051F321 291
12.2.2. Други чипове Cygnal 293
12.3. ИС FTDI 296
12.3.1. ИС FT232AM и FT232BM 297
12.3.2. ИС FT245AM и FT245BM 298
12.3.3. Microchip FT2232BM 299
12.3.4. Microchip FT8U100AX 300
12.3.5. Комплекти и модули за отстраняване на грешки 301
12.3.6. Драйвери 302
12.3.7. Допълнителни помощни програми 303
12.3.8. Други модули 304
12.4. Микрочипове Intel 304
12.5. Микрочипове Microchip 308
12.6. Микрочипове Motorola 308
12.7. Микрочипове Philips 309
12.7.1. Микрочипове USB 310
12.7.2. Хъбове 311
12.7.3. Други чипове Philips 313
12.8. Микрочипове Texas Instruments 314
12.9. Микрочипове Trans Dimension 317
12.10. ИС за защита на захранването 318
12.11. Онлайн ресурси за тази глава 319
Глава 13. HID устройство, базирано на Atmel AT89C5131 322
13.1. Структурна схема на АТ89С5131 322
13.2. USB регистри АТ89С5131 324
13.2.1. Регистрирайте USBCON 324
13.2.2. Регистрирайте USBADDR 326
13.2.3. USBINT 327 регистър
13.2.4. USBIEN 328 регистър
13.2.5. Регистър UEPNUM. 329
13.2.6. Регистрирайте UEPCONX 330
13.2.7. регистър UEPSTAX. 331
13.2.8. регистър UEPRST. 334
13.2.9. UEPINT регистър. 335
13.2.10. Регистрирайте UEPIEN 336
13.2.11. Регистрирайте UEPDATX 337
13.2.12. Регистрирайте UBYCTLX 337
13.2.13. UFNUML 338 регистър
13.2.14. регистър на UFNUMH. 338
13.3. Схема AT89S5131 338
13.4. Инструменти за програмиране 339
13.4.1. Компилатор 341
13.4.2. Програмист 342
13.5. Микропроцесорна програма 349
13.5.1. Първата версия на програмата за AT89C5131 349
13.5.2. Добавяне на низови дескриптори 369
13.5.3. Добавяне на крайни точки 374
13.5.4. Създаване на HID устройство 377
13.5.5. Комуникация със HID устройство 381
13.6. Четене на отчети в Windows 388
13.7. Допълнителни функции на Windows XP 396
13.8. Устройство за множество отчети 397
Глава 14. Създаване на USB устройство на базата на ATMEL АТ89С5131 402
14.1. Не-HID устройство 402
14.2. Създаване на драйвер с Driver Studio 405
14.2.1. Няколко думи за библиотеката Driver Studio 407
14.2.2. Други класове Driver Studio 411
14.2.3. Създаване на шаблон на драйвер с Driver Studio 412
14.2.4. Модификация на шаблон на драйвер 422
14.2.5. Основни методи на клас устройства 423
14.2.6. Реализация на четене на данни 426
14.2.7. Инсталиране на драйвер 428
14.2.8. Четец на данни 429
14.2.9. Четене на данни от други типове крайни точки 438
14.2.10. Почистване на USB драйвер 439
Глава 15. Използване на FTDI 457 ИС
15.1. Функционална схема FT232BM 457
15.2. Схема FT232BM 460
15.3. Характеристики на D2XX 460
15.4. Прехвърляне от COM към USB 465
15.4.1. Описание на веригата на преобразувателя 465
15.4.2. Задаване на скоростта на предаване 467
ЧАСТ V. СПРАВКА 469
Глава 16. Основни функции на Windows 471
16.1. Функции CreateFile и CloseHandle: Отваряне и затваряне на обект 471
16.1.1. Допълнителна информация 472
16.1.2. Връщана стойност 472
16.1.3. Обадете се на пример 472
16.2. Функция за четене на файл: Четене на данни 473
16.2.1. Допълнителна информация 474
16.2.2. Връщана стойност 474
16.2.3. Извикване на пример 474
16.3. Функция WriteFile: Предаване на данни 475
16.3.1. Допълнителна информация 476
16.3.2. Връщана стойност 476
16.3.3. Обадете се на пример 476
16.4. Функция ReadFileEx. APC прочете данни 477
16.4.1. Връщана стойност 479
16.4.2. Допълнителна информация 479
16.4.3. Обадете се на пример 479
16.5. Функция WriteFileEx: APC трансфер на данни 480
16.5.1. Връщана стойност 481
16.5.2. Обадете се на пример 481
16.6. WaitForSingleObject функция чака сигнал
състояния на обект 482
16.6.1. Връщана стойност 482
16.7. Функция WaitForMultipleObjects: чака се сигнал
състояния на обект 483
16.7.1. Връщана стойност 484
16.8. Функция GetOverlappedResult резултат от асинхронна операция 484
16.8.1. Връщана стойност 485
16.9. Функция DeviceIoControl: 485 директен контрол на драйвера
16.9.1. Връщана стойност 487
16.10. Функция QueryDosDevice: вземете името на устройството
с неговото DOS име 487
16.10.1. Връщана стойност 488
16.10.2. Обадете се на пример 488
16.11: Дефиниране на функцията Dos Device: операции с име на DOS устройство 489
16.11.1. Връщана стойност 490
16.11.2. Извикване на пример 490
Глава 17. HID API функции. 492
17.1. HidD_Hello функция: Проверка на библиотека 492
17.2. Функция HidD_GetHidGuid: Вземете GUID 492
17.3. HidD_GetPreparsedData Функция: Създаване на дескриптор на устройство 493
17.4. HidD_FreePreparsedData Функция: Освобождаване на дескриптор на устройство 493
17.5. Функция HidD_GetFeature: Получаване на отчет FEATURE 494
17.6. Функция HidD_SetFeature: предаване на отчет FEATURE 494
17.7. Функция HidD_GetNumInputBuffers: вземете броя на буферите 495
17.8. Функция HidD_SetNumInputBuffers: задаване на броя на буферите на 495
17.9. Функция HidD_GetAttribntes: Получаване на атрибути на устройството 495
17.10. Функция HidD_GetMamifactnrerStnng. вземете продуцентски низ 496
17.11. Функция HidD_GetProductString. получаване на продуктова линия 497
17.12. HidD_ Вземете функцията Serial MumberString. получаване на низ
сериен номер 497
17.13. Функция HidD_GetIndexedString. получаване на низ с индекс 498
17.14. Функция HidDjGetlnputReporr. получаване на INPUT доклад 498
17.15. Функция HidD_SetOutputReport. ИЗХОДЕН доклад предаване 499
17.16. Функция HidP_GetCaps: Получаване на свойства на устройството 499
17.17. Функция HidP_MaxDataListLength: вземете 500 размера на отчета
Глава 18. UCH 502 хост контролер
18.1. Хост контролер 502 Контролни регистри
18.1.1. USB команден регистър (USBCMD) 504
18.1.2. USB регистър на състоянието (USBSTS) 506
18.1.3. Регистър за управление на прекъсвания (USBINTR) 506
18.1.4. Регистър с номера на рамката (FRNUM) 507
18.1.5. Базов адресен регистър на рамката (FLBASEADD) 508
18.1.6. Начало на регистъра на модификатора на рамка (SOFMOD) 508
18.1.7. Регистър за състоянието и контрола на порта (PORTSC) 509
18.2. Структури на данни на хост контролера на UCH 510
18.2.1. Списък с рамки 510
18.2.2. Дескриптор на прехвърляне i 511
18.2.3. Заглавка на опашката 514
18.3. UCH 516 Обработка на списък с дескриптори
Глава 19. Инструменти 518
19.1. Microsoft Visual Studio Tools 518
19.1.1. Зависи 518
19.1.2. Търсене на грешка 518
19.1.3. GuidGen 518
19.2. Microsoft DDK Tools 520
19.2.1. DeviceTree 520
19.2.2. DevCon .- 521
19.2.3. Chklnf и Genlnf. 526
19.3. Инструменти на CompuWare Corporation 527
19.3.1. Монитор 527
19.3.2. SymLink 527
19.3.3. EzDriverlninstaller 527
19.3.4. WdmSniff 527
19.4. Инструменти на Syslntemals 528
19.4.1. WinObj 528
19.5. USB Forum 531 Tools
19.5.1. HID Descriptor Tool 531
19.6. Софтуерни инструменти за твърди дискове 533
19.7. Sourceforge Tools 533
ПРИЛОЖЕНИЯ 535
Приложение 1. Допълнителни функции 537
Приложение 2. Таблица с езикови идентификатори (LangID) 539
Приложение 3. Таблица с кодове на производителя (Идентификатор на доставчик, ИД на устройство) 543
Приложение 4. Описание на CD 546
Литература 548
Индекс 549

Споделя това