Полное изложение введения в технологию USB для начинающих

Начинающие изучать USB , Краткое изложение входа в USB для начинающих

1. Обзор
В настоящее время многие основные контроллеры имеют функции USB, но для начинающих приложение в этой области все еще довольно сложно, поскольку необходимо написать не только программу прошивки USB, но и драйвер на стороне ПК, и Драйвер должен быть написан хорошо.Вы должны написать хост-компьютер , чтобы увидеть эффект. Отлаживать таким образом очень сложно.Рекомендуется начать с USB-клавиатуры и мыши.После того, как вы это поймете, будет относительно просто сделать свой собственный протокол.
История концепции USB здесь упоминаться не будет. Давайте не будем заботиться о конкретном формате пакета данных, в этом разделе будет просто сказано на уровне всего пакета, процесс такой,
-------------------- ---------------Вставка устройства----------------------------- ---- --------------------------
1) Хост будет опрашивать каждый порт USB по очереди , и хост обнаружит , что есть соединение между D+ и D- разница напряжения, считается, что есть доступ к новой настройке. Хост отправляет запрос на сброс после ожидания 100 мс. Устройство будет генерировать внешний сигнал прерывания после получения запроса на сброс .
---------------------------------------Процесс перечисления-------- - --------------------------------------------------- -
2) В это время хост знает только, что подключено новое устройство, но не знает, что подключено, поэтому начинает спрашивать, что это за устройство, как его использовать и как о его грузоподъемности. В это время начинается процесс перечисления. Поскольку только что вставленному устройству не назначен адрес, используйте адрес по умолчанию 0, сначала отправьте Get_descript или(Get Device Descriptor) пакет инструкций, после того, как устройство получает пакет, оно начинает парсить пакет (по сути, вы судите и обрабатываете его в программе прошивки), а затем возвращает дескриптор собственного устройства в фиксированном формате , Этот шаг в основном предназначен для того, чтобы хост знал ваши основные атрибуты USB-устройства, такие как поддерживаемая длина передаваемых данных, текущая нагрузка, поддерживаемая версия USB, а также PID и VID , которые облегчат компьютеру поиск водитель в будущем. 3) В это время, после того как хост узнает длину данных и текущий размер вас (устройство, которое вы сделали, называемое вами), следующим шагом будет присвоение вам адреса, который принадлежит вам. 4) После предоставления вам адреса он начнет запрашивать вашу конкретную конфигурацию. Сначала отправьте предварительный запрос конфигурации устройства Get_configuration ( требуется фиксированный возврат 9 слов конфигурации устройства), а после его получения начните отправлять 9-байтовые слова конфигурации устройства, включая общую длину ваших слов конфигурации, чтобы хост просто знал, как long ваша конфигурация, а затем отправьте еще один запрос на настройку устройства, а затем вы начнете загружать все слова конфигурации. В это время хост уже понимает ваш метод работы и различные характеристики, и тогда он может нормально работать .. Загрузить строковый дескриптор. 6) Если это мышь или клавиатура, загрузите дескриптор отчета ------------------------------------ -- -- нормальная стадия данных ---------------------------------------------------------- -- --------- 7) На данный момент вы официально приняты и зарегистрированы хостом, и вы можете общаться с компьютером, написав тестовый драйвер или общий драйвер.





Вышеприведенное является простым описанием, а подробное введение будет сделано в следующих главах.Ключ к изучению чего-либо состоит в том, чтобы сначала узнать, что это такое, и его простой принцип работы . Позвольте мне провести здесь аналогию с USB-работой.
     Хост похож на компанию. Вы - USB-устройство. Чтобы войти в компанию, вы должны сначала пройти собеседование (перечислить). первый раз), интервьюер сначала понимает вашу Внешность, пол и должность, на которую вы хотите претендовать (дескриптор оборудования), а затем дает вам номер, а затем начинает звонить людям по номеру, а когда вам звонят, начинает спрашивать о ваши профессиональные знания, личность и т.д. (конфигурационный дескриптор), если Вы больше подходите (прошли перебор) и Вас примут, и зарегистрируйте свои данные в компании (установка драйвера, запись в реестр). Когда вы придете в компанию в следующий раз, если вы сообщите свой рабочий номер (PID, VID), вы будете знать, что вы здесь.

Введение в USB для начинающих, краткое изложение введения в USB для начинающих (2) Программа прошивки устройства

Во-вторых, фактический тест обработки данных
(цвет изображения не может быть отображен, вы можете перейти в мой блог http://blog.csdn.net/arthur05611/archive/2009/02/23/3929778.aspx)
Этот раздел в основном для USB в прошивке есть понятие обработки запросов, и есть метод отладки. Если вас не волнует эта часть, вы можете пропустить крупномасштабное сотрудничество по программе, ха-ха.
Чтобы лучше проиллюстрировать весь процесс загрузки USB, мы можем использовать последовательный порт для отслеживания каждого прерывания USB в режиме реального времени. Однако здесь для тестирования не используется последовательный порт, а просто записывается процесс с набором переменных. Процедура тестирования следующая (описание процедуры будет ниже):

uchar  test [100];//переменная длины 100, процесс записи
uchar conters =0;//значение счетчика записи,
/*------------------- -- ------------------------------------------------------- Альянс
        университетской электроники -- Сяо Цзида
     QQ: 258347765   
- ------------------------------------------------ -- ----------*/

void EXT_int(void)//функция ответа на прерывание USB
{     /*--------------------------------------------------- ------------------------           Проверьте регистр состояния прерывания, чтобы узнать     источник        прерывания. -----------------------------------------------------------*/



    if (USB_BUSRESET_ASS_INT())
    { /* Сброс шины USB */
        /* для USB Rev.1.1
                     После сброса шины USB у нас есть время восстановления 10 мс.
                     Следующий запрос должен быть обработан нормально.
        */

        CLR_BUS_RESET_STATE(); /* Состояние сброса шины USB очищено */

        /*------------------------------------------------ ---------------------------
           Настройка Endpoint0
        ------------------------------------ ------------------------*/ /*  Настройка размера полезной
        нагрузки Tx/Rx */         /* Полезная нагрузка Rx фиксируется как 8-байтовая или 32-байтная байт, поэтому            установка не имеет значения */

        SET_PAYLOAD_EPn(EP0RX, device_descriptor.bMaxPacketSize0);
        SET_PAYLOAD_EPn(EP0TX, device_descriptor.bMaxPacketSize0);
        /* Бит остановки, значение после сброса не определено, сброшен */
        CLR_STALL_EPn(EP0);
             
        /*------------------------------------------------ ---------------------------
           Разная инициализация переменной состояния
        ---------------------------------- --------------------------*/
        usb_status.configuration = NULL;
        usb_status.remote_wakeup = 0;
        usb_status.address = 0;
        usb_status.dvcstate = DEFAULT_STATE; /* Состояние устройства: ПО УМОЛЧАНИЮ */
        usb_status.stall_req = 0;
               #ifdef Отладка
                     тест[контеры]='!';
                     счетчики++;
                     #endif

        /*------------------------------------------------ ------------
           Обратный вызов на прикладной уровень
        ---------------- ------------------------------*/
        (*usb_status.callback)();
    }
    else if (SUSPENDED_INT())
    { /* состояние приостановки */
        /* для USB Rev.1.1
                     Переход в состояние приостановки после обнаружения того, что линия USB оставалась бездействующей более 3 мс.
                     После обнаружения возобновления завершите состояние приостановки через 3 мс, чтобы иметь возможность ответить на
                     запрос хоста.
        */
              CLR_SUSPENDED_STATE();
                     #ifdef Отладка
                     тест[контеры]='@';
                     счетчики++;
                     #endif

    }

    else if (AWAKE_INT())
    { /* Активное состояние устройства */
        /* Процедура AWAKE */

        CLR_AWake_STATE(); /* Запрос очистки */
                     #ifdef Debug
                     test[conters]='#';
                     счетчики++;
                     #endif

    }
    else if (USB_BUSRESET_DES_INT())
    { /* Отмена подтверждения сброса шины USB */
        /* Процедура отмены подтверждения сброса шины USB */
       
        CLR_BUS_RESET_DES_STATE(); /* Запрос очистки */
                     #ifdef Debug
                     test[conters]='$';
                     счетчики++;
                     #endif

    }

    else if (SOF_INT())
    { /* Состояние прерывания SOF */
        CLR_B_SOF_STATE();  
               #ifdef
                     Тест отладки[conters]='%';
                     счетчики++;
                     #endif
       /* статус прерывания SOF очищен */
    } /* статус прерывания SOF */

    if (SETUP_RDY_INT())
    { /* установка готова */
                  #ifdef Debug
                     test[conters]='^';
                     счетчики++;
                     #endif

        read_Device_Requests();
    }

    else if(EP1_PKTRDY_INT())
    { /* Пакет EP1 готов */    
        read_FIFO(EP1);
       }
    else if (EP2_PKTRDY_INT())
    { /* Пакет EP2 готов */

        запись_FIFO (EP2);
    }

    else if (EP0_RXPKTRDY_INT())
    { /* EP0 готов принять пакет */
        read_FIFO(EP0RX);
    }
    else if (EP0_TXPKTRDY_INT())
    { /* Пакет передачи EP0 готов */
        write_FIFO(EP0TX);
    }

}
Записанные результаты отображаются в представлении переменных следующим образом:

Прежде всего, позвольте мне объяснить, что эта программа является функцией прерывания, когда я создаю USB-устройство. Главный элемент управления (вещь, в которую вы записываете программу прошивки) будет генерировать соответствующее прерывание, когда устройство должно работать (мы можем использовать метод прерывания или метод запроса. Преимущество метода прерывания в том, что хост вызываться, когда вам нужно работать, но вы должны постоянно спрашивать хост "в чем дело", вот метод прерывания), например, хост устанавливает адрес для устройства, и хост отправит "установить адрес" через пакет с фиксированным каналом (point0), мастер устройства сгенерирует прерывание после получения пакета и сохранит статус ответа в соответствующем регистре Нам нужно только оценить каждый регистр в программе прерывания, чтобы выполнить задачу хозяин.
Синим словом в программе обозначен тип прерывания, а соответствующее определение макроса не указано. Если это прерывание, будет выполнена соответствующая операция прерывания. И есть только один тип прерывания для одного прерывания.Мы добавляем программу красным цветом к каждому ответу на прерывание, чтобы сохранить состояние каждого прерывания.После операции прерывания запишите состояние test[conters]='!';conters++; означает что после входа в это прерывание установить текущую позицию этой группы чисел в '!', и добавить единицу к переменной, записанной в позиции, так что следующий Лог в следующую позицию за раз. Таким образом, мы будем записывать процесс USB,
     и давайте посмотрим на результаты записи (цифры и буквы в нем генерируются программой в ответ на стандартный запрос, и программа здесь не будет указана).
file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtml1/01/clip_image002.jpg

Как вы можете видеть, он начинается со сброса шины, затем сброса шины USB отменяет подтверждение, а затем приостанавливает работу шины. Повторяется дважды, а затем это конкретная конфигурация предыдущего раздела.
Этот раздел в основном посвящен концепции обработки USB-запросов в прошивке и методу отладки.
 


Введение в USB для начинающих, краткое описание USB для начинающих (3) Объяснение пакетов данных

Есть общее понятие USB передачи.Следующий шаг - посмотреть что загружается по USB и в каком формате передавать данные.Понятие конечной точки не задействовано.
Передача данных по различным шинам осуществляется с фиксированным уровнем согласования, USB конечно не исключение. Так называемый уровень - это просто абстрактное понятие. Он выражает отношения зависимости. Верхний уровень зависит от нижнего уровня. Верхний уровень основан на нижнем уровне. Верхний уровень должен заботиться только о своих вещах. невозможно понять смысл в одном или двух предложениях при изучении предмета Требуется всестороннее понимание, чтобы понять каждый пункт. Для реализации связи
между двумя машинами (диапазон машин относительно широк, это может быть компьютер, коммутатор , однокристальный микрокомпьютер ) всегда должен быть носитель.Для машины уровень конечно носитель В частности, машина A должна сообщить машине B одну вещь (например, инструкцию), затем машина A может быть подключена к порту ввода-вывода машины B через линию (последовательную шину данных), A отправляет высокий и низкий уровни один за другим. one, а B обнаруживает свой собственный порт ввода-вывода в фиксированное время, а затем записывает их один за другим и помещает в свой собственный буфер, так что B получает данные, отправленные A. Выше приведено описание простого уровня канала передачи данных ( так называемый в компьютерной сети).Этот уровень должен гарантировать, что каждый бит данных, отправленный A, может быть получен B правильно и своевременно, а ошибки в процессе передачи Данные реагируют. На самом деле физический уровень ниже канала передачи данных, который является реальной физической средой.Для машины это провод, а данные - это напряжение, передаваемое по проводу.USB использует четыре провода,два источника питания, и два провода данных . Вот тоже аналогия.Например,когда люди общаются друг с другом,конечно мы говорим.Физический уровень-это воздух и передаваемые звуковые волны.Канкальный уровень-это каждое слово,которое мы говорим,а физический уровень-это воздух .Слова преобразуются в звуковые волны и передаются другой стороне.Слой передачи данных отвечает за то, чтобы другая сторона могла правильно слышать каждое слово.Если вы не слышите четко, вы можете попросить другую сторону произнести это слово еще раз.

После вышеупомянутых двух нижних уровней можно гарантировать, что каждый бит данных может быть правильно передан другой стороне. Следующим шагом, конечно же, является анализ того, что представляют данные.Вообще говоря, данные представлены в единицах последовательности чисел, обычно называемых пакетами, а передача между машинами осуществляется в единицах пакета, как говорят люди. то же самое, что вывод в единицах одного предложения. Каждый пакет содержит много битов данных, и эти сегменты данных имеют разное значение.Как показано на рисунке 1, это пакет этапа USB-токена, а Sync — это синхронные данные (эквивалентно приветствию во время разговора, передаче другому абоненту команды Talked to). ему), PID — это метка пакета (скажите другой стороне, для чего предназначен пакет), ADDR — это адрес другой стороны (называемый именем другой стороны), ENDP — это связь между конечными точками (не вводить это первым) , CRC5 — бит проверки (определение наличия ошибки при передаче пакета), EOP — конец пакета.
|------------------------------------------------- -------||
Синхронизация|PID|ADDR|ENDP|CRC5
|

                      Рисунок 1.
Пакеты данных USB делятся на три типа: один представляет собой пакет токена, один представляет собой пакет данных, а третий представляет собой пакет подтверждения. Каждая коммуникационная транзакция USB начинается с пакета токена, сообщающего другой стороне, с кем следует разговаривать и для чего используется это предложение. Если требуется передача данных, следующим шагом является пакет данных, а если от другой стороны требуется обратная связь, будет отправлен пакет подтверждения. Пакет токенов просто включает в себя три типа: OUT, IN и STEP. OUT используется для того, чтобы хост сообщал устройству, что хост хочет отправить данные на USB-устройство. IN используется для того, чтобы хост сообщал устройству о загрузке данных. , а STEUP используется хостом для отправки данных на USB-устройство.Устройство отправляет информацию о конфигурации, которая используется в процессе перечисления. Кроме того, для конкретного формата пакета данных и пакета рукопожатия вы можете обратиться к подробному соглашению.
Можно видеть, что во всех коммуникационных процессах хост является инициатором, независимо от того, отправляет ли хост данные на USB-устройство или USB-устройство отправляет данные на хост, он должен контролироваться хостом. На рис. 2 показана фаза маркера процесса транзакции
  
        — — «фаза данных — —» фаза рукопожатия.

                                Рис. 2
Процесс можно описать так: А и Б ведут диалог, А — начальник, Б — сотрудник. Как упоминалось в первом разделе, опрос Б является перечислением. В этом процессе А отправляет пакеты токенов STEP к Б в несколько этапов. Если Б получает данные и хочет получить данные обратной связи, он отправляет пакет данных А. После того, как А его получит правильно , ​​пожать руку А, что означает, что диалог прошел успешно.
После того, как B будет официально допущен, A назначит задачу (OUT).В это время A сообщает B, что для вас есть задача (этап токена), а затем B начинает слушать. A говорит, что ваша задача - записать данные и сообщить об этом (этот абзац является пакетом данных), а B согласился (пакет рукопожатия).
B начинает формальную работу и записывает данные. Через некоторое время A начинает запрашивать отправку данных (IN), B сообщает данные A (этап данных), а A говорит «да» (рукопожатие успешно). Здесь B не может проявить инициативу, чтобы отчитаться перед боссом, а может работать только пассивно.
Процесс передачи данных между USB-хостом и устройством был описан выше.Это мое личное понимание.Если это неправильно или не на месте, пожалуйста, предложите это.Это удобно для понимания новичками.Спасибо••

Начало работы с USB, краткое изложение введения USB для начинающих (4) Быстрое развитие коммуникационных USB-устройств

После описания в трех вышеприведенных разделах у вас должно быть предварительное представление о USB.Конкретные протоколы (типа определения каждого дескриптора) здесь описываться не будут, а их в интернете очень много. Ниже я на примере подробно объясню этапы быстрой разработки USB-устройств.
Во-первых, установите план
. Все будет сделано заранее, и это будет дорого, если вы этого не сделаете. Поэтому вам нужно спланировать немного при разработке небольшого USB, например, представить, каких функций вы хотите достичь.Какой протокол передачи данных.
2. Программирование
прошивки.Говоря грубо, программирование прошивки заключается в написании программы для однокристального микрокомпьютера.Для реализации USB, как правило, можно использовать однокристальный микрокомпьютер с функцией USB, а второй – добавить выделенный чип USB . Здесь мы берем встроенный микроконтроллер с функцией USB в качестве примера.Разработка прошивки USB
обычно заключается в том, чтобы сначала включить USB, включить часы USB и включить каждое прерывание управления USB (приостановка, сброс, стандартный запрос, запись, запись, д.) и тогда USB может нормально работать.В это время лучше не писать другие вещи.Компьютер может определить что подключено USB устройство.Конкретная реакция - в устройстве будет обнаружена флешка менеджер, указывающий, что найдено новое USB устройство.Далее компьютеру будут отправлены различные стандартные запросы, так как ваша программа на данный момент не написана полностью, и ответа на эти запросы не будет, поэтому невозможно компьютер, чтобы узнать, что это такое.
Следующая задача — отвечать на различные стандартные запросы компьютера в прерывании. Когда необходимые запросы будут правильно отвечены, если в это время в компьютере есть правильный драйвер, компьютер загрузит драйвер.Если устройство вставляется в первый раз, драйвер должен быть установлен, а затем устройство будет войдите в нормальную работу.После работы компьютер отобразит «Этот USB был успешно установлен и может быть использован».
Позвольте мне кратко рассказать здесь о концепции конечных точек. Как правило, USB-устройство имеет несколько конечных точек. Конечная точка представляет собой область управления буфером данных (FIFO). Каждый буфер эквивалентен пулу с одним экспортом и одним импортом. Данные поступают через импортировать в пул, а потом использовать данные в прошивке. Когда прошивка записывает данные в компьютер, она также сначала помещает данные в пул, а затем открывает выход, чтобы он мог заниматься своими делами, вместо того, чтобы отправлять данные один за другим, выход из пула автоматически выводит данные.
Общий порт 0 используется для стандартного ответа на запрос, то есть он используется на этапе перечисления. Обычно я определяю порт 1 как выход (OUT), а порт 2 — как вход (IN) (обратите внимание, что эти OUT и IN относятся к компьютеру, то есть OUT — это данные, идущие от компьютера к устройству, и IN - это данные устройства в компьютер). Эти определения также сообщаются компьютеру в стандартных запросах.
Далее может быть реализована связь с компьютером, и вы просто помещаете данные в соответствующий пул. Далее вы можете самостоятельно определить формат данных для связи. Например , если первый индикатор из 8 светодиодов на плате разработки управления включен, то главный компьютер отправляет данные 0x55, 0x01, 0x80, 0xaa. Можно оговорить, что первые данные это бит просветления. Встреча с ним указывает на начало команды управления. 0x01 означает, что это команда управления включением и выключением света. 0x80 означает данные управления светодиодом. бит равен 0, что означает, что оба темные. Последние данные 0xaa, что указывает на то, что это конец. По сути, так называемый протокол данных — это просто набор самоопределяемых форматов данных, которые позволяют обеим сторонам общаться, чтобы правильно понимать друг друга. Компьютер больше похож на компьютер, и все должно быть указано, прежде чем он сможет работать правильно.
3.Для быстрой разработки драйвера
    можно использовать Driverstudio.Сначала я установил VC6.0, потом установил DDK2600 и наконец установил Driverstudio.В интернете говорят,что этот заказ не легко вызвать проблемы,и у меня нет времени пробовать другие порядки.какие спецэффекты выйдут,вне зависимости дурачится он или нет,нет ничего страшного в том,чтобы сначала так нажимать.
    Установил версию DriverStudio 3.2 более модную в начале, а потом взломал по методике в интернете.Сгенерированный драйвер открывает устройство, но данные не передаются. Или кряк не полный? Затем я удалил 3.2 и установил 3.1, и это сработало Я действительно не знаю, сделала ли Compuware что-то, чтобы поиграть со мной, или я был глуп и совершил ошибку.
Шаги создания драйвера можно найти в Baidu и Google по запросу «Завершить драйвер USB за 10 минут», и вы найдете


Многое, если вам сложно искать, просто щелкните здесь и забудьте об этом http://www.4oa.com/Article/html/6/33/482/2005/17317.html Просто следуйте инструкциям и следуйте указаниям мастера. После завершения ВК выйдет с фреймворком драйвера, если скомпилировать его в это время, то столкнетесь со многими проблемами, моя работа такая. Сначала скомпилируйте библиотеку DDK, операция доступна в Интернете, и в Интернете есть облака:
1. Запустите Visual  C++  .
2. Выберите меню Файл |Открыть рабочую область. Откройте файл рабочей области, расположенный в DriverStudio/DriverWorks/Source/vdwlibs.dsw.
3. Выберите меню Build|Batch Build и выберите библиотеку, которую хотите скомпилировать, во всплывающем диалоговом окне.
4. Щелкните Build, чтобы скомпилировать выбранную вами библиотеку.
Затем нажмите «изменить переменные среды» на панели инструментов Driverstudio VC и выберите путь к DDK на первой карте выбора, у меня это C:\WINDDK\2600. Затем нажмите «ОК», затем нажмите «Компилировать» на панели инструментов DriverStudio и все.Если вы все еще сталкиваетесь с проблемами, вы можете скопировать ошибки, отображаемые VC, в Baidu.

[Вышеупомянутая информация собрана и опубликована Aibo Testing. Если есть какие-либо несоответствия, пожалуйста, исправьте их вовремя. Если есть какая-либо цитата, пожалуйста, укажите источник. Добро пожаловать на совместное обсуждение. Мы уделяем внимание ее разработке! Фокус: CCC/SRRC/CTA/операторское складирование]

рекомендация

отblog.csdn.net/weixin_47371464/article/details/131891733