Начало - Интернет
Протокол на USB шина. Основи на USB интерфейс Описание на протокола USB 2.0
  • Mini-B конектор ECN: Известие, издадено октомври 2000 г.
  • Errata, от декември 2000 г: Известие, издадено декември 2000 г.
  • Pull-up/Pull-down резистори ECN
  • Errata, от май 2002 г: Известие, издадено май 2002 г.
  • Интерфейсни асоциации ECN: Известие, издадено май 2003 г.
    • Добавени са нови стандарти, за да се позволи свързването на множество интерфейси с една функция на устройството.
  • Заоблена фаска ECN: Известие, издадено октомври 2003 г.
  • Unicode ECN: Известие, издадено февруари 2005 г.
    • Този ECN указва, че низовете са кодирани с помощта на UTF-16LE.
  • Междучипово USB допълнение: Известие, издадено март 2006 г.
  • Добавка в движение 1.3: Известие, издадено декември 2006 г.
    • USB On-The-Go прави възможно две USB устройства да комуникират едно с друго без отделен USB хост. На практика едно от устройствата действа като хост за другото.

USB OTG

USB 3.0

USB 3.0 е в последния етап на разработка. Следните компании разработват USB 3.0: Microsoft, Texas Instruments, NXP Semiconductors. В спецификацията USB 3.0 съединителите и кабелите на актуализирания стандарт ще бъдат физически и функционално съвместими с USB 2.0. USB кабел 2.0 съдържа четири линии - двойка за приемане/предаване на данни, една за захранване и още една за заземяване. В допълнение към тях, USB 3.0 добавя пет нови линии (което води до много по-дебел кабел), но новите щифтове са разположени успоредно на старите на различен ред щифтове. Сега можете лесно да определите дали даден кабел принадлежи към една или друга версия на стандарта, просто като погледнете неговия конектор. Спецификацията USB 3.0 увеличава максималната скорост на трансфер до 4,8 Gbps - което е с порядък по-високо от 480 Mbps, които може да осигури USB 2.0. USB 3.0 може да се похвали не само с по-високи скорости на трансфер на данни, но и с увеличен ток от 500 mA до 900 mA. Отсега нататък потребителят ще може не само да захранва много по-голям брой устройства от един хъб, но и хардуер, доставяни преди това с отделни захранвания, ще се отърват от тях.


Тук GND е "корпусната" верига за захранване на периферни устройства, VBus е +5 V, също и за захранващи вериги. Данните се предават различно през проводниците D+ и D− (състояния 0 и 1 (съответно в терминологията на официалната документация diff0 и diff1) се определят от потенциалната разлика между линиите над 0,2 V и при условие, че на един от потенциалът на линиите (D− в случай на diff0 и D+ при diff1) спрямо GND е по-висок от 2,8 V. Методът на диференциално предаване е основният, но не и единственият (например по време на инициализацията устройството информира хост относно режима, поддържан от устройството (Full-Speed ​​​​или Low-Speed) чрез изтегляне на една от линиите данни към V_BUS през резистор от 1,5 kOhm (D− за режим с ниска скорост и D+ за пълноскоростен режим, устройствата, работещи в режим Hi-Speed ​​​​се държат на този етап като устройства в режим Full-Speed ​​​​също понякога наоколо). физическо увреждане. .

USB 3.0 тип B конектор

USB 3.0 конектор тип A

USB 3.0 кабели и конектори

Недостатъци на USB

Въпреки че пиковата честотна лента на USB 2.0 е 480 Mbps (60 MB/s), на практика е възможно да се постигне пропускателна способност, близо до върха, не успява. Това се обяснява с доста големи закъснения по USB шината между заявката за прехвърляне на данни и действителното начало на прехвърлянето. Например шината FireWire, въпреки че има по-ниска пикова пропускателна способност от 400 Mbps, което е с 80 Mbps по-малко от USB 2.0, всъщност позволява по-голяма пропускателна способност за обмен на данни с твърди дискове и други устройства за съхранение.

USB и FireWire/1394

протокол USB памет, което е метод за предаване на команди

Освен това USB паметта не се поддържаше в по-стари операционни системи (оригиналния Windows 98) и изискваше инсталиране на драйвер. В тях се поддържаше и SBP-2. Освен това в по-стари операционни системи (Windows 2000) протоколът за USB съхранение беше реализиран в съкратена форма, което не позволяваше използването на функцията за запис на CD/DVD на свързания USB устройство SBP-2 никога не е имал такива ограничения.

USB шината е строго ориентирана, така че свързването на 2 компютъра или 2 периферни устройства изисква допълнително оборудване. Някои производители поддържат свързване на принтер и скенер или камера и принтер, но тези реализации са силно специфични за производителя и не са стандартизирани. Шината 1394/FireWire не е обект на този недостатък (можете да свържете 2 видеокамери).

Въпреки това, поради лицензионните политики на Apple, както и много по-високата сложност на хардуера, 1394 е по-рядко срещан. дънни платкипо-старите компютри нямат 1394 контролери. Що се отнася до периферните устройства, поддръжката на 1394 обикновено не се намира в нищо друго освен в видеокамери и кутии за външни твърди дискове и CD/DVD устройства.

Вижте също

  • FireWire
  • TransferJet

Източници

Връзки

  • USB новини (немски)

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

Всички транзакции (обмени) с USB устройства се състоят от два или три пакета; типичните последователности от пакети в транзакциите са показани на фиг. 1. Всяка транзакция се планира и инициира от хост контролера, който изпраща пакет с токен за транзакция. Токенът за транзакция описва типа и посоката на трансфера, адреса на избраното USB устройство и номера на крайната точка. Устройството, адресирано от маркера, разпознава своя адрес и се подготвя за обмен. Източникът на данни, идентифициран от токена, предава пакет от данни. В този момент транзакциите, свързани с изохронни трансфери, са завършени - няма потвърждение за получаване на пакет. За други видове предавания има механизъм за потвърждение, който гарантира гарантирана доставка на данни. Форматите на пакетите са показани на фиг. 2, видовете пакети са в таблицата. Във всички полета на пакета, с изключение на полето CRC, данните се предават първо с най-младшия бит (най-младшият бит е показан отляво на времеви диаграми). Пакетът започва със последователността Sync и завършва с терминатора - EOP. Типът на пакета се определя от полето PID. Предназначението на останалите полета е обяснено по-долу. Дължината на полетата Sync и EOP е посочена за предавания на FS/LS за високоскоростни предавания, полето Sync се разширява до 32 битови интервали, а EOP до 8 (в SOF пакетите полето EOP е дълго 40 бита); ).

Всички получени пакети се проверяват за грешки, тъй като приетите пакетни формати и определени конвенции позволяват:

  • пакетът започва с последователност за синхронизиране, последвана от неговия PID (идентификатор на пакета). Идентификаторът е последван от негово обратно копие - Проверка. Ако две копия не съвпадат, това се счита за грешка;
  • тялото на пакета (всички полета на пакета, с изключение на PID и EOP атрибута) е защитено от CRC код: 5-битов за маркерни пакети, 16-битов за пакети с данни. CRC, който не отговаря на очакваната стойност, се счита за грешка;
  • пакетът завършва със специален EOP сигнал; Ако пакетът съдържа нецяло число байтове, той се счита за грешен. Фалшив EOP, дори на граница на байт, няма да позволи пакетът да бъде получен поради почти неизбежна CRC грешка в тази ситуация;
  • пакетните данни се предават към физическия слой (към шината), като се използва битово пълнене (нула се вмъква след шест единични бита), което предотвратява загубата на битова синхронизация по време на монотонен сигнал. Получаването на повече от шест единични бита подред се счита за грешка (на HS - знак за край на рамката).

Откриването на някоя от тези грешки в пакета кара получателя да го счита за невалиден. Нито устройството, нито хост контролерът отговарят на получените пакети с грешка. При изохронно предаване невалидните пакетни данни трябва просто да се игнорират (те се губят); За други видове трансмисии се използват средства за осигуряване на надеждна доставка.

За да открие неуспеха на партньора да отговори на пакет, всяко устройство има брояч за изчакване, който спира да чака отговор след изтичане на известно време. USB има ограничение за времето за обиколка на шината: времето от края на EOP на генерирания пакет до началото на получаването на пакета с отговор. За крайното устройство (и хост контролера) максималното забавяне на отговора (времето за отговор) от края на EOP, видян до въвеждането на началото на пакета, се нормализира. За хъбовете забавянето на предаването на пакети се нормализира; за кабелите се нормализира забавянето на разпространението на сигнала. Броячът на изчакване трябва да вземе предвид максималното възможно забавяне за валидна конфигурация на шина: до 5 междинни хъба, до 5 метра всеки кабел. Допустимата стойност на изчакване, изразена в битови интервали (bt), зависи от скоростта:

  • За FS/LS скорости забавянето, въведено от един кабелен сегмент, е малко в сравнение с битовия интервал (bt). Въз основа на това в USB 1.0 е възприет следният модел за изчисляване на допустимите закъснения. Разпределено е допустимо забавяне от 30 ns за всеки кабелен сегмент и 40 ns за хъба. Така пет междинни хъба с техните кабели въвеждат забавяне от 700 ns по време на двойно завъртане, което съответства на приблизително 8,5 bt на FS. За FS устройство забавянето на отговора не трябва да надвишава 6,5 bt (и като се вземе предвид неговия кабел - 7,5 bt). Въз основа на това, спецификацията изисква предавателите на FS да използват брояч за изчакване от 16-18 bt;
  • при HS скорост забавянето в кабелния сегмент е много по-голямо от битовия интервал, а в USB 2.0 моделът на изчисление е малко по-различен. Тук са разпределени 26 ns за всеки кабелен сегмент и 4 ns плюс 36 bt за хъба. По този начин преминаването през 6 кабелни сегмента два пъти (2×6×26 = 312 ns ≈ 150 bt) и пет хъба (2×5×4 = 40 ns ≈ 19 bt плюс 2×5×36 = 360 bt) отнема до 529 bt . Забавянето на реакцията на устройството е приемливо до 192 bt, а общото забавяне, като се вземат предвид кабелите и хъбовете, ще бъде до 721 bt. Въз основа на това, спецификацията изисква предавателите на HS да използват брояч на изчакване от 736-816 bt.

Хост контролерът има собствен брояч на грешки, свързан с всяка крайна точка на всички устройства, който се нулира, когато всяка транзакция е планирана. Този брояч отчита всички грешки на протокола (включително грешки при изчакване) и ако броят на грешките надвиши прага (3), тогава каналът с тази крайна точка се спира и неговият собственик (драйвер на устройство или USBD) се уведомява. Докато прагът не бъде надвишен, хостът обработва грешки за неизохронни трансфери, като се опитва да повтори транзакции, без да уведомява клиентския софтуер. Изохронните трансфери не се повтарят; хостът съобщава за грешки веднага.

Пакетите за ръкостискане се използват за потвърждение, контрол на потока и сигнализиране за грешка. От тези пакети хост контролерът може да изпрати на устройството само ACK пакет, потвърждаващ безпроблемното приемане на пакета данни. Устройството използва следните пакети за ръкостискане, за да отговори на хоста:

ACK - потвърждение (положително) за успешно завършване на изходяща или контролна транзакция;
NAK - отрицателно потвърждение, е знак, че устройството не е готово да извърши тази транзакция (няма данни за предаване към хоста, няма място в буфера за приемане, контролната операция не е завършена). Това е нормален отговор, за който никой няма да знае, освен контролера на хоста, който е принуден да повтори транзакцията по-късно. При входни транзакции устройството дава NAK отговор вместо пакет данни, ако те не са готови;
STALL е сериозно съобщение за грешка, което означава, че без специална софтуерна намеса работата с тази крайна точка става невъзможна. Този отговор се съобщава както на USBD драйвера, който отменя по-нататъшни транзакции с тази точка, така и на клиентския драйвер, от чиято софтуерна намеса се очаква да деблокира точката. При контролни транзакции (Контрол), отговорът STALL означава, че заявката не може да бъде изпълнена; Деблокирането на точката не е необходимо.

Контролът на изходния поток, който разчита единствено на способността да се отговори с NAK, ако устройството не е готово, е много неефективно използване на честотната лента на шината: голям пакет данни се губи в шината, за да се гарантира, че устройството не е готово. USB 2.0 избягва този проблем при транзакции Bulk-OUT и Control чрез използване на протокола Ping. Хостът може да проучи готовността на устройството да получи максимален размер на пакета, като му изпрати токен за PING сонда. Устройството може да отговори на този токен с ACK (ако е готово) или NAK (ако не може да получи максималния размер на пакета). Отрицателният отговор ще принуди хоста да опита отново по-късно, положителният отговор ще му позволи да извърши изходна транзакция. При транзакция за теглене след положителен отговор на теста, отговорите на устройството са по-разнообразни:

  • ACK означава успешно приемане и готовност за приемане на следващия пълноразмерен пакет;
  • NYET означава успешно приемане, но не е готов за следващия пакет;
  • NAK е неочакван отговор (противоречи на успеха на теста), но е възможно, ако устройството внезапно стане временно недостъпно.

Високоскоростното устройство в дескрипторите на крайните точки отчита възможния интензитет на NAK изпращания: полето bInterval за групови и контролни крайни точки показва броя микрокадри на NAK (0 означава, че устройството никога няма да отговори с NAK на изходна транзакция).

Трансферите на масиви, прекъсвания и контроли осигуряват надеждна доставка на данни. След успешно получаване на пакета, приемникът на данни изпраща потвърждение - ACK пакет за потвърждение. Ако приемникът на данни открие грешка, пакетът се игнорира и към него не се изпраща отговор. Източникът на данни счита, че следващият пакет е предаден успешно, когато получи ACK от приемника. Ако потвърждението не пристигне, тогава при следващата транзакция източникът повтаря изпращането на същия пакет. Въпреки това, пакетът за потвърждение може да бъде загубен поради смущения; така че в този случай повторното изпращане на пакета от получателя да не се възприема като следваща порция данни, пакетите с данни се номерират. Номерирането е по модул 2 (1-битово число): пакетите се разделят на четни (с идентификатор DATA0) и нечетни (DATA1). За всяка крайна точка (с изключение на изохронната), хостът и устройството имат превключващи битове, техните начални състояния са последователни по един или друг начин. IN и OUT транзакциите предават и очакват пакети данни с идентификатори DATA0 или DATA1, съответстващи на текущото състояние на тези битове. Приемникът на данни превключва своя бит в случай на безгрешно приемане на данни с очаквания идентификатор, източникът на данни превключва при получаване на потвърждение. Ако приемникът получи пакет без грешки с неочакван идентификатор, той изпраща ACK, но игнорира данните в пакета, тъй като пакетът е повторно предаване на данни, които вече са получени.

Транзакции за различни видовепредаванията имат разлики в протоколите поради гарантираната или негаранционната пропускателна способност, времето за реакция, надеждността на доставката и синхронизирането на входа и изхода. В зависимост от тези характеристики транзакциите използват един или друг от протоколните механизми, описани по-горе. Имайте предвид, че откриването на грешка при предаване работи във всички транзакции, така че данните, получени погрешно, винаги се игнорират. Кои механизми на протокола се използват в текущата транзакция се „познават“ както от хост контролера (на базата на предварително получения дескриптор на крайната точка), така и от USB устройството, в което е внедрена тази крайна точка.

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

Изохронните изходни транзакции се състоят от два пакета, изпратени от хост контролера, OUT токен и пакет данни DATA. При входна транзакция хостът изпраща IN токен, на който устройството отговаря с пакет от данни, евентуално с дължина на полето за данни нула (ако няма готови данни). Всеки друг отговор от устройството (както и „мълчание“) се счита от хоста за грешка, водеща до спиране на този канал.

При изохронен обмен има контрол на надеждността (отхвърляне на пакети с грешки) и целостта на данните (откриване на факта на липсващ пакет). Контролът на целостта се основава на стриктната детерминираност на обменния курс - в съответствие с дескриптора си, точката очаква транзакция с период от 2bInterval-1 микрокадъра. За типична изохронна крайна точка е възможна само една транзакция на микрокадър и грешка при получаване на пакет води до липса на получени данни в микрокадъра, в който се очаква. По този начин не се изисква номериране на пакети (превключвател за превключване на битове). Устройствата с пълна скорост и хост контролерите трябва да изпращат само пакети от тип DATA01. За широколентови изохронни крайни точки (USB 2.0) във всеки микрокадър могат да се предават до три пакета данни. Всеки от тези пакети може да бъде загубен и откриването на тази ситуация изисква номериране на пакети в микрокадъра. За това номериране са въведени два нови типа пакети данни: DATA2 и MDATA. Разнообразието от типове пакети, в допълнение към номерирането, ви позволява също така да информирате вашия комуникационен партньор за вашите планове за даден микрокадър. При IN транзакциите устройството показва чрез идентификатора на пакета колко още пакета възнамерява да издаде в същия микрокадър, което позволява на хоста да избегне ненужни опити за въвеждане. Така че, ако един пакет се предава в микрокадър, тогава той ще бъде DATA0; ако две, последователността ще бъде DATA1, DATA0; три - DATA2, DATA1, DATA0. OUT транзакциите използват пакет MDATA (More Data) за извеждане на непоследния пакет в микрокадър, а последният идентификатор на пакета показва колко пакета са били предадени преди него. И така, с една изходна транзакция се използва пакетът DATA0, с две - последователността MDATA, DATA1, с три - MDATA, MDATA, DATA2. Всички транзакции с изключение на последната в микрокадър трябва да използват максималния размер на пакета. Имайте предвид, че други транзакции могат да бъдат поставени между широколентови транзакции в микрокадър.

Интерфейс USB (Universal Serial Bus - Universal Serial Interface) е предназначен за свързване на периферни устройства към персонален компютър. Позволява ви да обменяте информация с периферни устройства на три скорости (спецификация USB 2.0):

  • ниска скорост ( Ниска скорост- LS) - 1,5 Mbit/s;
  • Пълна скорост ( Пълна скорост- FS) - 12 Mbit/s;
  • Висока скорост ( Висока скорост- HS) - 480 Mbit/s.
За свързване на периферни устройства се използва 4-жилен кабел: +5 V захранване, сигнални проводници D+И Д-, общ проводник.
USB интерфейс се свързва домакин (домакин) и устройства. Домакинът е вътре персонален компютъри контролира работата на целия интерфейс. За да разрешите свързването на повече от едно устройство към един USB порт, използвайте хъбове (хъб- устройство, което осигурява връзка с интерфейса на други устройства). Коренна главина (коренов център) се намира вътре в компютъра и е свързан директно към хоста. USB интерфейсът използва специален термин "функция" - това е логически завършено устройство, което изпълнява определена функция. Топологията на USB интерфейса е набор от 7 нива ( ниво): първото ниво съдържа хост и root хъб, а последното ниво съдържа само функции. Извиква се устройство, което включва хъб и една или повече функции композитен (съставно устройство).
Портът на хъб или функция, която се свързва с хъб от по-високо ниво, се нарича upstream порт ( порт нагоре по веригата), а портът на хъба, който се свързва с хъб или функция от по-ниско ниво, се нарича порт надолу по веригата ( пристанище надолу по веригата).
Всички трансфери на данни през интерфейса се инициират от хоста. Данните се предават под формата на пакети. USB интерфейсът използва няколко вида пакети:
  • знак-пакет (пакет токени) описва вида и посоката на трансфер на данни, адреса на устройството и серийния номер на крайната точка (CT е адресируемата част на USB устройството); Пакетите с функции се предлагат в няколко типа: IN, ВЪН, SOF, НАСТРОЙКА;
  • пакет данни (пакет данни) съдържа предадените данни;
  • пакет за одобрение (пакет за ръкостискане) има за цел да докладва резултатите от прехвърлянето на данни; Има няколко вида съвпадащи пакети: ACK, Н.А.К., СЕРГИЯ.
По този начин всяка транзакция се състои от три фази: фаза на предаване на атрибутния пакет, фаза на предаване на данни и фаза на договаряне.
USB интерфейсът използва няколко вида трансфер на информация.
  • Контролно препращане (контролен трансфер) се използва за конфигуриране на устройството, както и за други специфични за устройството конкретно устройствоцели.
  • Поточно предаване (групов трансфер) се използва за предаване на относително голямо количество информация.
  • Прекъснете препращането (прекъсване на прехвърлянето) се използва за предаване на относително малко количество информация, за което е важно нейното навременно предаване. Има ограничена продължителност и по-висок приоритет в сравнение с други видове трансфери.
  • Изохронно препращане (изохронен трансфер) се нарича още стрийминг в реално време. Информацията, предавана при такъв трансфер, изисква мащаб в реално време по време на нейното създаване, предаване и приемане.

Стрийминг трансфери характеризиращ се с гарантиран трансфер на данни без грешки между хоста и функцията чрез откриване на грешки по време на предаване и повторно искане на информация.
Когато хостът стане готов да получи данни от функция, той изпраща флагов пакет към функцията IN- найлонов плик. В отговор на това функцията във фазата на пренос на данни предава пакет данни към хоста или, ако не може да направи това, предава Н.А.К.- или СЕРГИЯ- найлонов плик. Н.А.К.-пакетът съобщава, че функцията временно не е готова да предава данни и СЕРГИЯ- пакетът показва необходимостта от намеса на хоста. Ако хостът успешно е получил данните, той изпраща функции във фазата на договаряне ACK
Когато хостът стане готов да предава данни, той изпраща функции ВЪН-пакет, придружен от пакет данни. Ако функцията успешно получи данните, тя изпраща на хоста ACK-пакет, иначе изпратен НАК-или СЕРГИЯ- найлонов плик.
Контролни трансфери съдържа поне два етапа: Етап на настройкаИ етап на състоянието. Между тях също може да има етап на пренос на данни. Етап на настройкаизползвани за изпълнение SETUP транзакции, по време на който се изпраща информация към контролната функция на КТ. SETUP транзакциясъдържа НАСТРОЙКА- найлонов плик , пакет данни и координационен пакет. Ако пакетът данни е получен от функцията успешно, тогава той изпраща до хоста ACK- найлонов плик. В противен случай транзакцията е завършена.
IN етапи на трансфер на данниконтролните трансфери съдържат един или повече В-или ИЗВЪН-транзакции, чийто принцип на трансфер е същият като при поточните трансфери. Всички транзакции в етапа на пренос на данни трябва да се извършват в една посока.
IN стадий на състояниетоизвършва се последната транзакция, която използва същите принципи като при поточните трансфери. Посоката на тази транзакция е обратна на тази, използвана в етапа на прехвърляне на данни. Етапът на състоянието се използва за отчитане на резултата от етапа НАСТРОЙКА и етапа на прехвърляне на данни. Информацията за състоянието винаги се предава от функцията към хоста. При контролен запис (Control Write Transfer) информацията за състоянието се предава във фазата на прехвърляне на данни на етапа на състоянието на транзакцията. При контролно четене (Прехвърляне на контролно четене) информацията за състоянието се връща във фазата на договаряне на състоянието на транзакцията, след като хостът изпрати пакет данни с нулева дължина в предишната фаза на пренос на данни.
Прекъснете трансферите може да съдържа IN- или ВЪН- препращане. При получаване IN-packet функция може да върне пакет с данни, Н.А.К.-пакет или СЕРГИЯ- найлонов плик. Ако функцията няма информация, която изисква прекъсване, тогава във фазата на прехвърляне на данни функцията се връща Н.А.К.- найлонов плик. Ако работата на КТ с прекъсване е спряна, тогава функцията се връща СЕРГИЯ- найлонов плик. Ако е необходимо прекъсване, функцията връща необходимата информация във фазата на пренос на данни. Ако хостът успешно е получил данните, той изпраща ACK- найлонов плик. В противен случай пакетът за преговори не се изпраща от хоста.
Изохронни транзакции съдържат фаза на предаване на чертаИ фаза на трансфер на данни, но нямат координационни фази. Домакинът изпраща IN- или ВЪН-знак, след което във фазата на предаване на КТ данни (за IN-знак) или хост (за ВЪН-знак) изпраща данни. Изохронните транзакции не поддържат фазата на съгласуване и повторното предаване на данни в случай на грешки.

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

Производствена фирма Име Описание

Atmel
AT43301 LS/FS хъб 1-4 контролер с общо управление на мощността надолу по веригата.
AT43312A Контролер LS/FS hub 1-4 с индивидуален контрол на мощността надолу по веригата.
AT43320A Микроконтролер, базиран на AVR ядро. Има вградена USB функция и хъб с 4 външни порта надолу по веригата, работещи в режими LS/FS, 512 байта RAM, 32x8 регистри с общо предназначение, 32 програмируеми пина, сериен и SPI интерфейс. Функцията има 3 CTs с FIFO буфери от 8 байта. Портовете надолу по веригата на хъба имат индивидуално управление на захранването.
AT43321 Клавиатурен контролер на ядрото на AVR. Има вградена USB функция и хъб с 4 външни downstream порта, работещи в режими LS/FS, 512 байта RAM, 16 KB ROM, 32x8 регистри с общо предназначение, 20 програмируеми изхода, сериен и SPI интерфейс. Функцията има 3 КТ. Портовете надолу по веригата на хъба имат индивидуално управление на захранването.
AT43324

Микроконтролер, базиран на AVR ядро. Има вградена USB функция и хъб с 2 външни downstream порта, работещи в режими LS/FS, 512 байта RAM, 16 KB ROM, 32x8 регистри с общо предназначение, 34 програмируеми изхода. Матрицата на клавиатурата може да има размер 18x8. Контролерът има 4 изхода за свързване на светодиоди. Функцията има 3 КТ. Портовете надолу по веригата на хъба имат индивидуално управление на захранването.

AT43355 Микроконтролер, базиран на AVR ядро. Има вградена USB функция и хъб с 2 външни низходящи порта, работещи в режими LS/FS, 1 KB RAM, 24 KB ROM, 32x8 регистри с общо предназначение, 27 програмируеми пина, сериен и SPI интерфейс, 12-канален 10-битов ADC . Функцията има 1 контролен CT и 3 програмируеми CT с FIFO буфери от 64/64/8 байта.
Fairchild Semiconductor USB100 Контролер за манипулатор (мишка, тракбол, джойстик). Поддържа 2D/3D мишка, джойстик с три потенциометъра, гребло с 16 бутона.

Intel
8x931Ax Микроконтролер с MSC-51 архитектура. Има вградена USB функция, работеща в режими LS/FS, 256 байта RAM, 0/8 kbytes ROM, 8x4 регистри с общо предназначение, 32 програмируеми пина, сериен интерфейс, интерфейс за управление от клавиатурата. Функцията има 3 CTs с FIFO буфери от 8/16/8 байта.
8x931Hx Микроконтролер с MSC-51 архитектура. Има вградена USB функция и хъб с 4 външни низходящи порта, работещи в режими LS/FS, 256 байта RAM, 0/8 kbytes ROM, 8x4 регистри с общо предназначение, 32 програмируеми изхода, сериен интерфейс, управление от клавиатурата интерфейс. Функцията има 3 CTs с FIFO буфери от 8/16/8 байта.
8x930Ax Микроконтролер с архитектура MSC-251. Има вградена USB функция, работеща в режими LS/FS, 1024 байта RAM, 0/8/16 kbytes ROM, 40 регистъра с общо предназначение, 32 програмируеми изхода, сериен интерфейс. Функцията има 4(6) CTs с FIFO буфери от 16/1024(256)/16(32)/16(32)/(32)/(16) байта.
8x930Hx Микроконтролер с архитектура MSC-251. Има вградена USB функция и хъб с 4 външни downstream порта, работещи в режими LS/FS, 1024 байта RAM, 0/8/16 KB ROM, 40 регистъра с общо предназначение, 32 програмируеми изхода, сериен интерфейс. Функцията има 4 CT с FIFO буфери от 16/1024/16/16 байта.

Микрочип
PIC16C745 Микроконтролер с PIC архитектура. Има вградена USB функция, работеща в режим LS, 256 байта RAM, 14336 байта ROM, 22 програмируеми пина, сериен интерфейс, 5-канален 8-битов ADC.
PIC16C765 Микроконтролер с PIC архитектура. Има вградена USB функция, работеща в режим LS, 256 байта RAM, 14336 байта ROM, 33 програмируеми пина, сериен интерфейс, 8-канален 8-битов ADC.
PIC18F2450 Микроконтролер с PIC архитектура. Има вградена USB функция, работеща в режим LS/FS, 1536 байта RAM, 16384 байта ROM, 19 програмируеми пина, сериен и SPI интерфейс, 5-канален 10-битов ADC. Функцията има 8 CT.
PIC18F2550 Микроконтролер с PIC архитектура. Има вградена USB функция, работеща в режим LS/FS, 1536 байта RAM, 32768 байта ROM, 19 програмируеми пина, сериен, CAN и SPI интерфейси, 5-канален 10-битов ADC. Функцията има 8 CT.
PIC18F4450 Микроконтролер с PIC архитектура. Има вградена USB функция, работеща в режим LS/FS, 1536 байта RAM, 16384 байта ROM, 34 програмируеми изхода, сериен, CAN и SPI интерфейс, 8-канален 10-битов ADC. Функцията има 8 CT.
PIC18F4550 Микроконтролер с PIC архитектура. Има вградена USB функция, работеща в режим LS/FS, 1536 байта RAM, 32768 байта ROM, 34 програмируеми изхода, сериен, CAN и SPI интерфейс, 8-канален 10-битов ADC. Функцията има 8 CT.
Texas Instruments TUSB2036 LS/FS хъб 1-3 контролер с индивидуално управление на мощността надолу по веригата.
  • Урок

Илюстрирана проекция на мрежовия модел OSI върху универсалната серийна шина.

Три "забележителни" нива на USB стека

Не бях доволен от външния вид на USB стека, който може да се намери най-често в интернет:

Не много полезен USB стек


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

Ако читателят е имал подобни чувства, предлагам алтернативна визия за USB стек, която внезапно ми се появи ясно в прегрятия ми мозък, базирана на любимия 7-слоен OSI модел. Ограничих се до пет нива:

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

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

Още един ретроспекция от деветдесетте

Изтърсих първия си бъг от кода на някой друг в края на деветдесетте години, докато работех като студент като студент. Беше pppd за FreeBSD, който след това инсталирахме на модемния пул. Модемите на Motorola бяха блокирани при прекъсване, никой не можеше да се свърже, линията беше загубена и единственият останал метод чрез PPP keep-alive беше по някаква причина бъгов. Тогава разбрах, че по някаква причина pppd чакаше шест LCP байта за отговор вместо необходимите четири. Чувствах се толкова луд тогава шейкър за грешкиот деветдесетте :-) Какво общо има ПЧП? Просто е подобно на USB: пакетно и от точка до точка. Вярно е, че за разлика от USB 2.0, той е пълен дуплекс.


Независимо дали ни харесва или не, еволюцията на микроконтролерите очевидно няма да спре. Не, не, и ще се появи в публикации (http://habrahabr.ru/post/208026/, http://habrahabr.ru/post/233391/) „тежки периферни устройства“ - реализации на USB шина, вградени в MK, с примери за анализ, използване на HID и др. Трябва да отдадем почит на автора на RaJa: от осем примера, дадени в стандартната библиотека STSW-STM32121 (UM0424) и по някакъв начин, той избра най-полезния (Custom HID), пренесе го в безплатната среда Em::Blocks, представи го на разбираем език, и малко го разкраси, браво! Това ми спести много време.

Как да стигна до библиотеката?

След като получих проекта RHIDDemo за Em::Blocks, любезно публикуван в GitHub от автора, започнах да го пренасям към Keil (моят базиран на FTDI CoLink дебъгер; някой да ми каже плъгина Coocox за Em::Blocks). Но просто не можах да разбера: откъде, по дяволите, авторът е взел SPL 3.6.1 от 2012 г., ако сайтът е публикувал 3.5.0 от 2011 г.? Минах през доста скучен куест, който за моя изненада доведе... направо до готов Custom HID проект за Keil като част от библиотеката USB FS 4.0.0. Лежи пред очите, като мишка под метла. О, добре. Но най-накрая стигнах до версиите на STMicroelectronics, намерих описание на библиотеката STSW-STM32121 (UM0424) USB FS и спрях опитите на разработчика да ме подлуди. Кажете ми, нормално ли е да поставите ретро CMSIS 1.30 от 2009 г. в комплект SPL 3.5.0, издаден през 2011 г., да скриете новия SPL 3.6.1, издаден през 2012 г., в USB-FS 4.0.0, издаден през 2013 г. (поставяне на CMSIS 3.0. 1 от 2012 г. също), въпреки факта, че имат текущата версия на CMSIS 3.30, издадена през 2014 г.? Между другото, в SPL 3.6.x за STM32F10X бяха коригирани няколко грешки с USART, свързани със сигналите за препълване на буфера. Благодаря ви, поне оставиха бележки за изданието...

HID срещу SNMP

И така, след като взех STM32F103C8T6, реших също да се задълбоча малко в темата за USB HID, USB HID абстракцията се вписва много добре в концепцията за всички видове сензори, сензори и други PWM-контролирани захранващи драйвери. По някакъв начин ми напомни за SNMP, само че в много опростена форма: HID дескрипторите играят ролята на SNMP MIB. Когато устройството се инициализира от хоста: „Здравей, хост! Аз съм кафеварка. Имам [старт] бутон, [крем], [захар] контроли, [остатъчно кафе], [остатъчна вода], [остатъчна захар], [остатъчна сметана]. Вдигнете шофьорите, натиснете бутона, да пием кафе. Нищо не ти напомня? Пример за SNMP диалог: „Е, здравейте, станция за управление със софтуер за $100 000. И имам шаси за превключвател за $200 000 и имам още 4 модула върху него за $100 000 на брой; всеки има още 16 порта с неприлична скорост и е просто невъзможно да се изброят всички функции тук... попитайте отделно за всеки елемент; о, да, натоварването на процесора е такова и такова, паметта е такова и такова...” И още дузина страници в същия дух.

Хареса ми идеята за HID. Но веднага щом оставих Windows отвъд образователните задачи на мигащи светодиоди (напред към реални UNIX среди!), той започна да се просмуква през всички незапечатани пукнатини и се почувствах като някакъв безпомощен куц. Докато отстранявах грешки в проекта, инстинктивно хванах някакъв вид tcpdump (така се нарича: usbdump(8) или usbmon), но видях само съобщения на непознат език.

Стана очевидно: липсват фундаментални познания за USB шината. Ако OSI модели всеки опитен IT специалист разбира TCP/IP стека някъде на нивото на гръбначния мозък просто от необходимост, тогава с USB ситуацията е различна. Разбираемо е: там можете (трябва) да шпионирате трафика чрез същия tcpdump и да конфигурирате хардуера и софтуера, но тук е напълно plug and play и можете да коригирате нещо, като актуализирате драйвера или фърмуера (или преинсталирате операционната система). Но ние сме се събрали тук точно за да направим добър фърмуер, нали? След като прочетох някои USB описания онлайн, бях изненадан колко объркваща може да бъде документацията. Даже имах чувството, че нарочно искат да ни подведат, разпръсквайки мъгла и отървавайки се от конкуренцията в зародиш. Не съм съгласен с това състояние на нещата!

Още една страхотна схема

В интернет попаднах на друга илюстрация (беше във формат BMP, без майтап):

На пръв поглед изглежда оптимистично. Накрая купчината се разглобява. Кадрите обаче са лошо маркирани: бих ги нарисувал с вертикални пунктирани линии, а EOF е само пауза, реално не се предават данни. Но започваме да четем контекста и губим разбиране за истинското намерение на автора (да ни обърка):

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

Изглежда, че всичко е нарисувано правилно, но докато четете, въпросите стават все повече и повече. Дали минималната структура на данните, предавана по шината, е рамка или пакет? Като цяло отгоре надолу ли трябва да гледаме или обратното? И какво се кодира с помощта на метода NRZI - рамки, пакети или просто целия битов поток в шината? Транзакциите се състоят от колет, трансфер или може би някакъв вид ценен колет?
Защо не можете просто: групата на хоста пакети в транзакции и разпределя ли ги във времеви отрязъци, наречени рамки, за да даде приоритет на критични за времето данни (видео, аудио) въз основа на текущата честотна лента на шината?Да, USB има нюанси с планирането на пакетни трансфери, все още не ги засягам.

Моята визия за USB стека

Смятам, че USB in a NutShell, споменат тук на хъба (ура, превод), както и USB Made Simple, са добра документация. Въз основа на тях сглобих моята версия на USB стека, ще го нарисувам отново.

Физически слой
На физическо ниво се използва набор от електрически режими на диференциална двойка проводници (заедно със земята) за обозначаване на състоянията, с които битовият поток е кодиран с помощта на метода NRZI с битово пълнене: тук след шест последователни „1s“ ( добре, исках да предам, да речем, 0xffff) „0“ се вмъква, така че приемникът да не остане в едно състояние за дълго време; Приемник АНяма въведена „0“ и няма да се брои като данни; това е доста често срещана техника при кодиране за по-добра автоматична настройка на честотите. Двойка проводници заедно със земята позволяват да се образуват най-малко четири статични състояния (те са обозначени с J, K, SE0, SE1). В USB 2.0 SE1 не се използва, а останалите три се възпроизвеждат допълнително в динамика (с часовници и преходи), за да предадат още няколко контролни знака (граници на пакети, нулиране, свързване/разединяване, пестене/изход). Има добри илюстрации в USB Made Simple, Part 3 - Data Flow.
Тези. В резултат на това данните се предават под формата на нули и единици, плюс всякакви контролни знаци, така че от цялата тази електродинамична кухня да могат да се подготвят нормални пакети данни.
(добавено по желание на читателите)
Ниво на партида
На ниво пакет безадресните пакети се предават между хоста и устройството (двойка устройства на полудуплексна линия може да направи без адресиране). Пакетът се състои от маркер SYNC за синхронизиране на часовника на приемника, поредица от байтове и символ EOP. Дължината на пакета е променлива, но се договаря чрез горни нивастек. Първият байт се нарича Packet Identifier (PID), има прост излишен формат за устойчивост на шум и е подходящ за подаване към машина от следващо ниво (за сглобяване на транзакции от пакети). Пакетите с пълнене (по-дълги от един PID байт) се доставят с контролна сума (къс CRC5 или дълъг CRC16, в зависимост от типа на пакета). Анализаторът на протоколи трябва поне да ни покаже пакетите.
Ниво на транзакция
На следващото ниво от пакетиотиват сделки. Транзакцията е малък набор от пакети (в Full Speed ​​​​USB 1, 2 или 3), следващи стриктно един след друг, които (в полудуплексен режим) хостът обменя с крайна точка и само с една. Много е важно само хостът да отваря транзакцията; това е специфика на USB (има по-малко проблеми за нас във фърмуера на MK). На ниво сделка можем да говорим канал(тръба) между хоста и една от крайните точки на устройството, но умишлено избягвам термина „Връзка към данни“ от OSI модела. Анализаторът на протоколи трябва поне да декодира транзакции.
Ниво на предавка
Върху транзакциите ще поставим слоя за трансфери. Има четири вида от тях в USB: контролни трансфери с крайна точка № 0, прекъсващи трансфери, изохронни трансфери и масови трансфери. Последните три са варианти на стрийминг канали (stream pipe), за които ще кажа няколко думи по-късно. Това ниво също трябва да показва добър анализатор на протоколи.
Приложен слой
В горната част на стека, както обикновено, е слоят на приложението. Това, което се случва тук е: задаване на адреса на устройството от хоста, съобщаване на устройството за себе си на езика на дескрипторите, команди на хоста за избор на конфигурация (контролни предавания), обмен на данни с HID устройства (в примерите намерих предаване с прекъсвания досега, искам да пробвам контролното), печат на принтер и сканиране, достъп до USB памет (голям блок), комуникация чрез слушалки и уеб камери (изохронно) и много други страхотни неща.
Довършителни работи
Прескачайки надолу по нивата за секунда, можем да добавим, че хостът периодично хвърля същите тези Start of Frame (SOF) пакети през шината, разделяйки времето на равни интервали, но по такъв начин, че да не прекъсва самите транзакции. Следователно SOF пакетите могат да се считат за независими транзакции. USB рамката не трябва да се бърка с омоним за слоя за връзка за данни на модела OSI. По-добре е да запомните кадрите (рамките) на аудио компактдиск, това е просто количество време: хостът „тиктака“ в шината със SOF пакети, така че свързаните устройства планират предварително да участват в т.нар. изохронни предавания, управлявайки потоци от данни в реално време. Е, или така: групи от транзакции се планират от хоста във времеви интервали, наречени рамки. Един кадър е 1ms при пълна скорост и 125µs при високоскоростен USB, но High Speed ​​​​е по-сложен стандарт и е най-добре да се изучава отделно.
UPD:
Читателите зададоха добър въпрос: какво ще кажете за фрагментацията? Не открих никакви признаци на фрагментация в USB 2.0 на ниво транзакция и по-долу, т.е. Транзакциите са предназначени да се предават в тяхната цялост. В някои случаи трансферите могат и трябва да бъдат разделени на няколко транзакции, особено като се вземат предвид изохронните режими. И ще повторя, че засега домакинът отговаря за цялото планиране вместо нас (от страна на MK трябва да мислим по-малко).

Разглеждане на USB трафик

Добра селекция от илюстрации е в споменатата книга USB Made Simple, глава 5: www.usbmadesimple.co.uk/ums_5.htm

Ето един от тях


Така транзакцията винаги се инициира от хоста срещу една избрана крайна точка на устройството (освен това специална точкас номер 0 може да има още до 15 от тях на едно устройство, например комбинирана клавиатура с мишка, термометър, флашка, кафе машина и бутон за извикване на водопроводчик за поръчка на пица).
Ако хостът получи данни от устройството, последният не може сам да отвори транзакция, а може само да изчака подходящия моменти участвайте в него. Хостът отваря транзакция към устройството с пакет с PID = IN (Token group) и гарантира свобода на шината за необходимото време, устройството хвърля пакет от групата Data, в зависимост от типа транзакция, хостът може да потвърди успех с третия пакет от групата Handshake (ACK, NAK, STALL, NYET), транзакцията е затворена.
При изпращане на данни към устройството (PID = OUT, Token group), хостът отваря транзакция, изпраща пакет данни (Data) и в зависимост от режима може също да получи Handshake пакет, потвърждаващ успеха на транзакцията.
В края на транзакцията всичко ще се върне към нормалното, устройството отново ще чака контролни пакети от хоста.

USB режими на трансфер в STM32 USB FS примери

За да използвате един чифт кабели за копиране от диск едновременно с аудио-видео поток, жестове на мишката и високоскоростен осцилоскопски сигнал, има различни видовесъобщения и излъчвания.
Точно по-горе описах просто стрийминг канал(Stream Pipe) между хоста и крайната точка, където пакетите с пълнежа (Data groups) не носят никаква специална или контролна информация към самата USB подсистема. Пълна свобода на кореспонденция, библиотеката на контролера трябва да осигури примитиви за изтегляне на буфер с произволен размер от паметта на MK към хоста или обратно. Нека MK библиотеката заедно с хост драйвера се справят с нарязването на пакети, пренасочването и „дефрагментирането“. В STM32 това са USB_SIL_Write() и USB_SIL_Read(), описани в UM0424. Те са самото логично ниво на абстракция. От страната на хоста вижте описанието на съответния драйвер (например на FreeBSD това е ugen(4)).
Въпреки това смятам за богохулство да се използват тежки периферни устройства като USB за организиране на прост стрийминг канал (въпросът е: какво не е наред с USART?). Но, разбира се, има всякакви ситуации.
Във всеки случай, за да може USB подсистемата изобщо да оживее и устройството да бъде открито, е необходим обмен на контролни транзакции.

ОТКАЗ ОТ ОТГОВОРНОСТ

Допълнителни примери ще бъдат споменати от същата библиотека UM0424 за работа с Full Speed ​​​​USB от STMicroelectronics, но те са предназначени за техните собствени демо платки. Вземете пример от автора Raja, покажете инженерни умения в адаптирането на проекти към вашата демонстрационна дъска.

Всичко е ясно за софтуера: това са примери, които не са за промишлена употреба, може да има грешки, някои части (като таблицата за връзки в примера за масово съхранение) са защитени с патент и вие нямате право да ги използвате в търговски проект. Но това не е нищо, след това китайците успяват да продадат USB продукти на пазара, за които дори не си правят труда да променят библиотеката VID и PID.

За желязото, както разбирам, трябва да започнете с кварц. Имам Chelyabinsk PinBoard II с 12 MHz кварц (всички библиотеки са проектирани за 8 MHz), промених PLL множителя от 9 на 6 (връзка с обяснения), в противен случай MK ще се ускори до 108 MHz вместо 72 MHz и USB няма да отиде на 72 MHz вместо необходимите 48 MHz. Можете също така да забавите скоростта на MK до 48 MHz, като промените делителя на USB шината от един и половина на един. Специалистите не обичат да използват вътрешния генератор на HSI MK: честотата може леко да се отклони поради нагряване и е трудно да се предвидят последствията за USB. Е, не забравяйте за периферията, разбира се. Без SPI/SDIO флаш памет, от примера за масово съхранение можете да направите само аналог на /dev/null, но не можете да го форматирате :-)

Контролирайте предаванията и каналите за съобщения
Мислейки за USB, си спомням добрия стар PPP протокол с неговите LCP, IPCP, CCP и също xzCP. Обменът на съобщения от специален тип между хост и крайна точка № 0 е локалният еквивалент на x3CP.
Чрез контролни предавания устройството се инициализира, получава адрес, съобщава на хоста за себе си на езика на дескрипторите (така че да може да намери и активира необходим драйвер). Без контролни операции дори простите няма да „отидат“ стрийминг, ако устройството не отговори във формуляра, хостът бързо ще затвори порта: трябва да се следва протоколът.
По принцип протоколът не забранява свързването на обмен на данни към контролна точка № 0, подобно на режима с прекъсвания. В същото време помислете за това: как ще актуализирате фърмуера на MK, така да се каже, на полето? Готов ли сте програмиста? Има и друго решение.
Пример: Надграждане на фърмуера на устройството
Прекъснати предавания
Този сорт ( прекъсване на трансфера) е предназначен за обмен на малки транзакции, подобни на контролните. Не, устройството не може да прекъсне хоста, то чака запитване, тяхната честота и размер на пакетите са посочени предварително в дескриптора на устройството. Много подходящ за всички видове дистанционни управления, сензори, мишки, светодиоди и други HID кафемашини. Каналът с прекъсвания във всяка точка е еднопосочен.
Примери: Персонализиран HID, Джойстик мишка, Виртуален COM порт
Изохронни предавания
Χρόνος на гръцки означава „време“. Изохронно предаване ( изохронен трансфер) - местни високотехнологични, които ви позволяват да управлявате потоците от данни в реално време. Той разполага с гарантирана (но не непременно широка) честотна лента и без потвърждаващи транзакции, подобно на UDP с QoS. Счупен пакет? Бог Хронос беше този, който бутна МК по крака. Няма нужда да се опитвате да изпратите пакета отново, в противен случай Бог ще се разстрои. Ние обаче проверяваме контролните суми тихо от Chronos. Изохронните трансфери са добри за аудио-видео и измервателни системи в реално време, както и за други играчки двойна употреба. Въпреки че някои от тях може. По-интересно е да закачите някакъв вид AVR, като го свържете към нашата ARM чрез USART или SPI. Изохронните операции са включени в сигнализирането на рамка (помнете тиктакането на SOF пакет).
Пример: USB гласов високоговорител
Големи блокови трансмисии
Не, няма да носим торби с цимент. Мисля, че всички са научили режима на работа на всички видове USB устройства. Трансфери групов трансферимат за цел да изпращат данни възможно най-много и възможно най-бързо, винаги с прехвърляне на счупени пакети, но без гаранции за честотна лента, като ги поддават на изохронни предавания, ако е необходимо (както в TCP без QoS). Вече говорих за вътрешната структура на USB флаш устройствата, сега можете да изтеглите и стартирате работещ прототип. Не съм го пробвал сам, но таблицата на SCSI командите в описанието на примера (между другото) е доста символична. Не открих признаци на алгоритъм за управление на износването на NAND памет :-)
ЗАБЕЛЕЖКА: Патентната защита на STM се прилага на места.
Пример: Масово съхранение

Какво е останало неразкрито

Нямам за цел да правя друг учебник на USB, има достатъчно и без мен и са добре описани: електрическа част, детайли на протокола, работа с хъбове, дескрипторен език и ниво на HID абстракция, проблеми с VID /PID уникалност, USB 3.0 и много други прекрасни функции на USB шината, някои полезни за нас и някои не толкова полезни. За IT хората препоръчвам специално екскурзия до тъмната страна с преглед на вражеските устройства (флашка с прикрита HID клавиатура, която ще направи ужасни неща).

Връзки

Адаптиране на персонализирания HID пример към свободна среда Em::Blocks и бюджетната демо платка STM32F103C8T6, произведена от LC-Tech Industrial Electronics и IT хора. Това е един вид инженерство Ин и Ян, всеки от нас има дял и от двете.

Инженерите по индустриална електроника имат отлични познания и умения в хардуера; те запояват тънки като косъм радиокомпоненти с лявата си ръка със затворени очи (и тогава работи). Гледайки електронна схема, почти физически започват да усещат всичките му токове с потенциали, те също работят със силови вериги и с (големи, бързи, опасни) индустриални продукти. Подходът към програмирането на MK е подходящ: той просто трябва да изведе необходимите логически нива на десните крака в точното време, няма значение по какъв начин. Те са консервативни в технологията (не се намесвайте - работи), тежките MK периферни устройства не са особено предпочитани. Когато обсъждаме обектно-ориентирано програмиране, информационна сигурност, гигантски проекти с милиони редове код и всякакви фантастични графични интерфейси, хората се отегчават. Вместо пакетно-ориентираната USB шина, те предпочитат USART стрийминг режим, подобрен или от обичайния RS-232, или от по-бруталния RS-485 ( серийна шиназа индустриални приложения, до 10Mbit/s на 15m, до 100kbit/s на 1200m, до 32 устройства).

ИТ специалистите са възпитани да разбират операционните системи, мрежовата инфраструктура и сложните взаимодействия; елитът е добре запознат с информационната сигурност и разбира всички видове невидими начини за проникване в нечия друга система. Някои хора наистина обичат котки (как да не ги обичаш? Аз обаче не отглеждам, не развъждам и не готвя :-). Много хора обичат свободата на информацията, критикуват корпорациите/правителствата и побеждават природните сили със силата на мисълта. Патологично мързеливи, но обичат новите технологии и изкривените инженерни пъзели скъпи играчки(за предпочитане решен на софтуерно ниво или, в краен случай, джъмпери). Връзките с поялник се пазят: не питайте ИТ специалиста дали харесва поялник, може да разбере погрешно; По-добре попитайте дали обича да запоява електронни схеми.

за какво говоря Ние просто виждаме този свят по различен начин... В края на краищата ядрото на Linux беше създадено от едни и същи хора, от модули в C и асемблерни вложки за специфични платформи, и те изглежда се справяха без holivars. Виждам наистина сериозен проект като многоядрена система, съчетаваща най-новите микроконтролери с тежки периферни устройства, но не изключвам комбинации с класически модели като AVR: те могат да се използват за окачване на някои критични, бързо въртящи се върхове на техническия прогрес. Ако кодът е тестван с години, защо не?

Добавете етикети

В края на 2008г. Както може да очаквате, нов стандартувеличена производителност, въпреки че увеличението не е толкова значително, колкото 40-кратното увеличение на скоростта при преминаване от USB 1.1 към USB 2.0. Във всеки случай 10-кратното увеличение на пропускателната способност е добре дошло. USB 3.0поддържа максимална скорост на трансфер от 5 Gbit/s.Пропускателната способност е почти два пъти по-висока от съвременния стандарт Serial ATA (3 Gbit/s, като се вземе предвид прехвърлянето на излишна информация).

Лого на USB 3.0

Всеки ентусиаст ще потвърди, че интерфейсът USB 2.0 е основният " тясно място» модерни компютрии лаптопи, тъй като неговата пикова „нетна“ пропускателна способност варира от 30 до 35 MB/s. Но модерните имат 3,5″ твърди дисковеза настолни компютри скоростта на трансфер вече надхвърли 100 MB/s (появяват се и 2,5″ модели за лаптопи, които се доближават до това ниво). Високоскоростните SSD устройства успешно надминаха прага от 200 MB/s. А 5 Gbit/s (или 5120 Mbit/s) съответства на 640 MB/s.

Не смятаме, че твърдите дискове ще се доближат до 600 MB/s в обозримо бъдеще, но следващото поколение SSD може да надхвърли този брой само след няколко години. Увеличаването на пропускателната способност става все по-важно, тъй като количеството информация се увеличава и съответно времето, необходимо за нейното архивиране, се увеличава. Колкото по-бързо работи хранилището, толкова по-кратко ще бъде времето за архивиране, толкова по-лесно ще бъде създаването на „прозорци“ в графика за архивиране.

Таблица за сравнение на скоростта на USB 1.0 – 3.0

Цифровите видеокамери днес могат да записват и съхраняват гигабайти видео данни. Делът на HD видеокамерите се увеличава и те изискват по-голямо и по-бързо съхранение за запис на големи количества данни. Ако използвате USB 2.0, тогава прехвърлянето на няколко десетки гигабайта видео данни към компютър за редактиране ще отнеме значително време. Форумът на USB Implementers вярва, че честотната лента ще остане фундаментално важна и USB 3.0ще бъде достатъчно за всички потребителски устройства през следващите пет години.

8/10 битово кодиране

За осигуряване на надежден трансфер на данни USB 3.0 интерфейсизползва 8/10 битово кодиране, познато ни, например, от Serial ATA. Един байт (8 бита) се предава с помощта на 10-битово кодиране, което подобрява надеждността на предаването за сметка на пропускателната способност. Следователно преходът от битове към байтове се извършва в съотношение 10:1 вместо 8:1.

Сравнение на честотната лента на USB 1.x – 3.0 и конкурентите

Режими за пестене на енергия

със сигурност основна целинтерфейс USB 3.0 е да се увеличи наличната честотна лента, обаче, новият стандарт ефективно оптимизира консумацията на енергия. Интерфейсът USB 2.0 непрекъснато проверява за наличност на устройството, което консумира енергия. За разлика от тях, USB 3.0 има четири състояния на връзка, наречени U0-U3. Състоянието на връзка U0 съответства на активен трансфер на данни, а U3 поставя устройството в „заспиване“.

Ако връзката е неактивна, тогава възможността за получаване и предаване на данни ще бъде деактивирана в състояние U1. State U2 отива една крачка напред, като деактивира вътрешния часовник. Съответно, свързаните устройства могат да преминат към състояние U1 веднага след завършване на прехвърлянето на данни, което се очаква да осигури значителни предимства в консумацията на енергия в сравнение с USB 2.0.

По-висок ток

В допълнение към различните състояния на консумация на енергия, стандартът USB 3.0 е различенот USB 2.0 и по-висок поддържан ток. Ако USB 2.0 осигури праг на тока от 500 mA, тогава в случая на новия стандарт ограничението беше изместено до 900 mA. Токът на иницииране на връзката е увеличен от 100 mA за USB 2.0 на 150 mA за USB 3.0. И двата параметъра са доста важни за преносимите твърди дискове, които обикновено изискват малко по-високи токове. Преди това проблемът можеше да бъде решен чрез използване на допълнителен USB щепсел, черпейки енергия от два порта, но използвайки само един за пренос на данни, въпреки че това нарушаваше спецификациите на USB 2.0.

Нови кабели, конектори, цветово кодиране

Стандартът USB 3.0 е обратно съвместим с USB 2.0, т.е. щепселите изглеждат същите като обикновените щифтове тип A остават на същото място, но сега има пет нови щифта, разположени дълбоко в конектора. Това означава, че трябва да поставите USB 3.0 щепсела докрай USB порт 3.0, за да се уверите в режима USB работа 3.0, което изисква допълнителни щифтове. В противен случай ще получите USB скорост 2.0. Форумът на USB Implementers препоръчва на производителите да използват цветово кодиране Pantone 300C от вътрешната страна на конектора.

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

USB 3.0 не използва оптични влакна, защото е твърде скъпо за масовия пазар. Следователно имаме добрия стар меден кабел. Сега обаче ще има девет, а не четири проводника. Предаването на данни се извършва по четири от петте допълнителни проводника в диференциален режим (SDP–Shielded Differential Pair). Едната двойка проводници е отговорна за получаване на информация, а другата за предаване. Принципът на работа е подобен на Serial ATA, като устройствата получават пълна честотна лента и в двете посоки. Петият проводник е „маса“.



 


Прочетете:



Процес на рестартиране на браузъра Firefox

Процес на рестартиране на браузъра Firefox

Повечето проблеми с Firefox могат да бъдат коригирани, като следвате методите за отстраняване на неизправности, описани по-долу. Опитайте тези стъпки в ред. Ако някой не работи,...

Безплатно нулиране на нивото на мастилото в принтери Epson L100, L110, L210, L300, L350, L355, L550, L555, L800

Безплатно нулиране на нивото на мастилото в принтери Epson L100, L110, L210, L300, L350, L355, L550, L555, L800

Безплатно нулиране на нивото на мастилото за принтери Epson L110, L210, L300, L350, L355, L550, L555.

VK руската версия на моята страница

VK руската версия на моята страница

Инструкции за презареждане на контейнери с мастило и...

Форматиране на SD и microSD карти с памет: защо е необходимо и как да го направите

Форматиране на SD и microSD карти с памет: защо е необходимо и как да го направите

Социалната мрежа Vkontakte моята страница днес е един от най-популярните интернет ресурси в света, да не говорим за Русия и Украйна. тя...

feed-image RSS