Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ПОУК / 09 семестр / Книги и методические указания / Описание библиотеки для стенда.doc
Источник:
Скачиваний:
124
Добавлен:
04.03.2014
Размер:
214.02 Кб
Скачать

Московский государственный технический университет им. Н.Э. Баумана

Факультет «Робототехника и комплексная автоматизация»

Кафедра «Робототехника»

Драйвер USB многофункционального

устройства URC220 для ОСРВ QNX

Пояснительная записка

Студент ……………………… (Куренев П.Н.) Группа РК10-72

Руководитель проекта ……………………… (Гончаренко К.В.)

Москва

2007

1. Техническое задание

Необходимо разработать для операционной системы реального времени QNXдрайвер устройстваURC220, подключаемого к компьютеру через универсальную последовательную шину (USB).

Также необходимо разработать библиотеку для облегчения написания пользовательских программ на C++, а также описание этой библиотеки и демонстрационные программы.

2. Драйвер

Для многих задач не всегда требуется писать программу непосредственно для микроконтроллера, так как достаточно простого управления с компьютера. Для этого была реализована программа для микроконтроллера, которая принимает команды от компьютера по USBинтерфейсу и управляет всеми периферийными устройствами на плате. Для компьютера создан драйвер и библиотека, которая позволяет легко управлять платой из любой программы подQNX.

Драйвер USBустройстваURC220 реализован в виде исполняемого файла “URCSrv”. Кроме драйвера, программа также является нумератором подключаемых устройств. Выполнена в виде консольного приложения.

Программа URCSrv, выполняет следующие задачи:

- определение факта подключения устройства;

- назначение номера подключённому устройству;

- обработка подключения, установление соединения;

- корректное отключение от устройства;

- предоставление интерфейса для взаимодействия с устройствами пользовательским программам.

2.1 Алгоритм работы

После за пуска, драйвер подключается к USBстекуQNXи назначает функции, которые операционная система вызывает в случае подключения и отключения устройства.

Функция также создаёт объект общего доступа к памяти под именем “/dev/shmem/urc_srv_100”. С помощью этого объекта происходит взаимодействие между драйвером и пользовательскими программами.

После подключения устройства, программа ищет незанятый номер в диапазоне [0; (URC_MAXDEV-1)] (URC_MAXDEV= 127) и присваивает его вновь подключённому устройству. Все дальнейшие обращения к устройству будут производиться по этому номеру (номер является индексом элемента в массиве объектов структур-описателей).

Далее происходит подключение к устройству и считывание его дескрипторов (дескриптор устройства, конфигурации, конечных точек (endpoints)) и проверка их соответствия тем, которые должны быть у устройств, для которых написан этот драйвер. Это вторая проверка, так как ещё при подключении кUSBстеку были заданыVID(VendorID) иPID(ProductID) того устройства, подключение которого нужно обрабатывать.

Затем создаются потоки чтения и записи (pipes) и выделяется память для буфера данных. Теперь устройство готово к работе, поэтому создаётся поток (thread) для обработки команд пользовательского приложения. То есть, кроме основного потока программы создаётся ещё по одному потоку на каждое подключённое устройство.

Рис.1.1 Внешний вид программы URCSrv

После всех этих действий данные об устройстве заносятся в общую память, чтобы пользовательские приложения смогли работать с ним.

Общая память представляет собой массив из URC_MAXDEVэлементов. Каждый элемент массива – структура. Поля структуры составляют:

- mutexдля распределения доступа к памяти между драйвером и приложениями;

- состояние этого слота подключения;

- данные, отправляемые или принимаемые из устройства;

- команда; которую должен выполнить сервер.

После отключения устройства происходит удаление всех созданных объектов (mutex,pipes, буфер и т.д.) и отсоединение от устройства.

При закрытии программы происходит принудительное отключение от всех подключённых устройств, а также удаление объекта общего доступа к памяти.

Все действия драйвера отображаются в окне программы (см. рис.1.1).