Раздели на сайта
Избор на редактора:
- Фабрично нулиране на ZTE Blade X3
- Как да отключите паролата за Honor, ако сте я забравили на вашия смартфон?
- Технология Thunderbolt: как работи и какви са нейните предимства
- Как да повишите TIC и PR Как сами да повишите Yandex TIC
- Версия на ядрото 3.10. Мигане на ядрото на Android устройство. Какво е ядрото на мобилното устройство?
- Възстановяване с помощта на инсталационния диск
- Инсталиране на win 10 на 7. Съвети от експерти
- Най-добрият метод за преинсталиране на Windows от USB флаш устройство
- Android Pay: как работи и как се използва?
- Защо лаптопът не се включва: причините за проблема и как да ги поправите
реклама
Протокол на USB шина. Основи на USB интерфейс Описание на протокола USB 2.0 |
USB OTGUSB 3.0USB 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. Отсега нататък потребителят ще може не само да захранва много по-голям брой устройства от един хъб, но и хардуер, доставяни преди това с отделни захранвания, ще се отърват от тях.
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 устройства. Вижте също
ИзточнициВръзки
Осигурява обмен на данни между хоста и устройството. На ниво протокол се решават задачи като осигуряване на надеждността и надеждността на предаването и контрола на потока. Целият трафик по USB шината се прехвърля чрез транзакции във всяка транзакция, обменът е възможен само между хоста и адресираното устройство (неговата крайна точка). Всички транзакции (обмени) с USB устройства се състоят от два или три пакета; типичните последователности от пакети в транзакциите са показани на фиг. 1. Всяка транзакция се планира и инициира от хост контролера, който изпраща пакет с токен за транзакция. Токенът за транзакция описва типа и посоката на трансфера, адреса на избраното USB устройство и номера на крайната точка. Устройството, адресирано от маркера, разпознава своя адрес и се подготвя за обмен. Източникът на данни, идентифициран от токена, предава пакет от данни. В този момент транзакциите, свързани с изохронни трансфери, са завършени - няма потвърждение за получаване на пакет. За други видове предавания има механизъм за потвърждение, който гарантира гарантирана доставка на данни. Форматите на пакетите са показани на фиг. 2, видовете пакети са в таблицата. Във всички полета на пакета, с изключение на полето CRC, данните се предават първо с най-младшия бит (най-младшият бит е показан отляво на времеви диаграми). Пакетът започва със последователността Sync и завършва с терминатора - EOP. Типът на пакета се определя от полето PID. Предназначението на останалите полета е обяснено по-долу. Дължината на полетата Sync и EOP е посочена за предавания на FS/LS за високоскоростни предавания, полето Sync се разширява до 32 битови интервали, а EOP до 8 (в SOF пакетите полето EOP е дълго 40 бита); ). Всички получени пакети се проверяват за грешки, тъй като приетите пакетни формати и определени конвенции позволяват:
Откриването на някоя от тези грешки в пакета кара получателя да го счита за невалиден. Нито устройството, нито хост контролерът отговарят на получените пакети с грешка. При изохронно предаване невалидните пакетни данни трябва просто да се игнорират (те се губят); За други видове трансмисии се използват средства за осигуряване на надеждна доставка. За да открие неуспеха на партньора да отговори на пакет, всяко устройство има брояч за изчакване, който спира да чака отговор след изтичане на известно време. USB има ограничение за времето за обиколка на шината: времето от края на EOP на генерирания пакет до началото на получаването на пакета с отговор. За крайното устройство (и хост контролера) максималното забавяне на отговора (времето за отговор) от края на EOP, видян до въвеждането на началото на пакета, се нормализира. За хъбовете забавянето на предаването на пакети се нормализира; за кабелите се нормализира забавянето на разпространението на сигнала. Броячът на изчакване трябва да вземе предвид максималното възможно забавяне за валидна конфигурация на шина: до 5 междинни хъба, до 5 метра всеки кабел. Допустимата стойност на изчакване, изразена в битови интервали (bt), зависи от скоростта:
Хост контролерът има собствен брояч на грешки, свързан с всяка крайна точка на всички устройства, който се нулира, когато всяка транзакция е планирана. Този брояч отчита всички грешки на протокола (включително грешки при изчакване) и ако броят на грешките надвиши прага (3), тогава каналът с тази крайна точка се спира и неговият собственик (драйвер на устройство или USBD) се уведомява. Докато прагът не бъде надвишен, хостът обработва грешки за неизохронни трансфери, като се опитва да повтори транзакции, без да уведомява клиентския софтуер. Изохронните трансфери не се повтарят; хостът съобщава за грешки веднага. Пакетите за ръкостискане се използват за потвърждение, контрол на потока и сигнализиране за грешка. От тези пакети хост контролерът може да изпрати на устройството само ACK пакет, потвърждаващ безпроблемното приемане на пакета данни. Устройството използва следните пакети за ръкостискане, за да отговори на хоста: ACK - потвърждение (положително) за успешно завършване на изходяща или контролна транзакция; Контролът на изходния поток, който разчита единствено на способността да се отговори с NAK, ако устройството не е готово, е много неефективно използване на честотната лента на шината: голям пакет данни се губи в шината, за да се гарантира, че устройството не е готово. USB 2.0 избягва този проблем при транзакции Bulk-OUT и Control чрез използване на протокола Ping. Хостът може да проучи готовността на устройството да получи максимален размер на пакета, като му изпрати токен за PING сонда. Устройството може да отговори на този токен с ACK (ако е готово) или 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):
USB интерфейс се свързва домакин (домакин) и устройства. Домакинът е вътре персонален компютъри контролира работата на целия интерфейс. За да разрешите свързването на повече от едно устройство към един USB порт, използвайте хъбове (хъб- устройство, което осигурява връзка с интерфейса на други устройства). Коренна главина (коренов център) се намира вътре в компютъра и е свързан директно към хоста. USB интерфейсът използва специален термин "функция" - това е логически завършено устройство, което изпълнява определена функция. Топологията на USB интерфейса е набор от 7 нива ( ниво): първото ниво съдържа хост и root хъб, а последното ниво съдържа само функции. Извиква се устройство, което включва хъб и една или повече функции композитен (съставно устройство). Портът на хъб или функция, която се свързва с хъб от по-високо ниво, се нарича upstream порт ( порт нагоре по веригата), а портът на хъба, който се свързва с хъб или функция от по-ниско ниво, се нарича порт надолу по веригата ( пристанище надолу по веригата). Всички трансфери на данни през интерфейса се инициират от хоста. Данните се предават под формата на пакети. USB интерфейсът използва няколко вида пакети:
USB интерфейсът използва няколко вида трансфер на информация.
Стрийминг трансфери
характеризиращ се с гарантиран трансфер на данни без грешки между хоста и функцията чрез откриване на грешки по време на предаване и повторно искане на информация. Поради факта, че USB интерфейсът реализира сложен протокол за обмен на информация, интерфейсното устройство с USB интерфейс изисква микропроцесорен модул, който осигурява поддръжка на протокола. Следователно основната опция при разработването на интерфейсно устройство е използването на микроконтролер, който ще осигури поддръжка на протокола за обмен. В момента всички големи производители на микроконтролери произвеждат продукти, които включват USB модул.
Илюстрирана проекция на мрежовия модел 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 - рамки, пакети или просто целия битов поток в шината? Транзакциите се състоят от колет, трансфер или може би някакъв вид ценен колет? Защо не можете просто: групата на хоста пакети в транзакции и разпределя ли ги във времеви отрязъци, наречени рамки, за да даде приоритет на критични за времето данни (видео, аудио) въз основа на текущата честотна лента на шината?Да, 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, като устройствата получават пълна честотна лента и в двете посоки. Петият проводник е „маса“. |
Популярни:
Разпределени звукови системи |
Нов
- Как да отключите паролата за Honor, ако сте я забравили на вашия смартфон?
- Технология Thunderbolt: как работи и какви са нейните предимства
- Как да повишите TIC и PR Как сами да повишите Yandex TIC
- Версия на ядрото 3.10. Мигане на ядрото на Android устройство. Какво е ядрото на мобилното устройство?
- Възстановяване с помощта на инсталационния диск
- Инсталиране на win 10 на 7. Съвети от експерти
- Най-добрият метод за преинсталиране на Windows от USB флаш устройство
- Android Pay: как работи и как се използва?
- Защо лаптопът не се включва: причините за проблема и как да ги поправите
- Режим на хибернация в Windows - какво е и как да го използвате