Usb выход d2p что это

Обновлено: 06.07.2024

Разбираемся с нюансами формата DSD аудио высокого разрешения

Разбираемся с нюансами формата DSD аудио высокого разрешения

То, что аудио высокого разрешения кодируется в форматах PCM и DSD, известно многим. При этом, смысл сопутствующих аббревиатур, таких как DXD, DFF, DSF, D2P и других зачастую оказывается не столь очевидным. В этой статье мы постараемся разобраться что такое DoP и для решения каких задач используется эта технология.

Что такое DoP и чем он отличается от DSD?

Но сначала вспомним общие принципы кодирования аудиоинформации – форматы PCM и DSD, их принципиальные отличия и особенности. Аналоговый сигнал звуковой частоты описывается непрерывной периодической зависимостью амплитуды от времени. И ключевым словом для определения аналогового сигнала здесь является «непрерывной». При оцифровке такого сигнала всегда привносится дискретность – но делается это по-разному и с разным результатом.

Что такое DoP и чем он отличается от DSD?

PCM – классика жанра

При оцифровке аналогового сигнала по технологии PCM (Pulse Code Modulation – импульсно-кодовая модуляция) производится фиксация амплитуды сигнала через равные промежутки времени. Полученный результат измерений переводится в цифровую форму с использованием определенного количества бит. К примеру, для компакт-диска спецификация CD-DA определяет частоту дискретизации (количество измерений в единицу времени) в 44,1 кГц (44 100 раз в секунду), а для кодировки результата измерений выделяется 16 бит, что позволяет использовать шкалу с 65 536 уровнями. Цифровое аудио с такими параметрами называют аудио стандартного разрешения. Если увеличивать либо разрядность кодировки до 24 или 32 бит, либо частоту дискретизации до 96, 192 или 384 кГц, то такой материал называется аудио высокого разрешения. Чем выше разрядность и частота дискретизации, тем более точно можно описать исходную непрерывную зависимость (уменьшить дискретность оцифровки).

Что такое DoP и чем он отличается от DSD?

DSD – альтернативный подход

При разработке аудиодисков высокого разрешения SACD, которые по замыслу авторов должны были заменить компакт-диски, компании Sony и Philips предложили новый формат цифрового аудио DSD (Direct Stream Digital), который, в отличие от PCM, использует плотностно-импульсную модуляцию (Pulse Density Modulation – PDM, одна из разновидностей сигма-дельта-модуляции). Это однобитный формат кодировки – разрядность уменьшается до одного бита, при этом, существенно увеличивается частота дискретизации. Фактически каждый бит потока DSD описывает вектор изменения амплитуды сигнала в бинарном виде – растет амплитуда или снижается. При этом, в базовом варианте стандарта частота дискретизации составляет 2,8224 МГц, что в 64 раза превышает этот параметр для PCM-кодирования стандартного разрешения. Поэтому базовый вариант стандарта DSD назвали DSD64. В дальнейшем стандарт развили, добавив варианты с более высокими частотами дискретизации – DSD128 (5.6 МГц), DSD256 (11.3 МГц) и DSD512 (22.6 МГц). Считается, что формат DSD ближе по своей сути к аналоговому сигналу, потому воспринимается на слух лучше. Кроме того, преобразование в аналоговую форму в случае потока DSD гораздо проще – фактически достаточно пропустить поток через фильтр LPF (Low Pass Filter), который выделит сигнал звукового диапазона, отрезав высокочастотные шумы. Главным недостатком формата DSD стало то, что подавляющее большинство аппаратуры для записи и подготовки фонограмм в цифровом виде работают с форматом PCM. До недавнего времени редактировать DSD-записи было просто не на чем.

Что такое DoP и чем он отличается от DSD?

DoP – для чего?

Дело в том, что не только парк цифровой аудиотехники в основном ориентирован на формат PCM, но и используемые в бытовых устройствах цифровые интерфейсы транслируют аудио в этом формате. Фактически чистый DSD может быть передан через достаточно экзотический интерфейс I2S, в том числе реализованный через HDMI, либо по USB. Ни самый распространенный интерфейс SPDIF в любом виде, ни балансный AES/EBU для этого не подойдут, и это порой становится проблемой. Для её решения известный британский производитель техники High End, компания dCS, предложила технологию DoP (DSD over PCM), позволяющую для трансляции потока DSD использовать формат PCM в качестве транспорта.

Что такое DoP и чем он отличается от DSD?

DoP – конвертация или нечто иное?

Важно понимать, что DoP это не конвертация данных DSD в PCM. Это именно передача потока DSD в формате PCM без преобразований. Происходит это следующим образом – формат PCM подразумевает передачу так называемых кадров (frames), в каждом из которых отдельно закодирован уровень левого и правого каналов плюс некоторая служебная информация. Реализованная в DoP идея состоит в том, чтобы непрерывный поток DSD «нарезать» на такие же кадры – выделяя отдельные 16-битные блоки для левого и правого каналов, к которым добавляются ещё по 8 бит служебных данных, позволяющих идентифицировать этот поток как DoP. Внешне данные в таком формате выглядят как PCM, хотя понятно, что если игнорировать служебную информацию и попытаться декодировать такой сигнал как PCM, то на выходе ничего связного не получится. Но таким способом удалось добиться главного – такой поток сможет попасть в ЦАП хоть через USB, хоть через коаксиальный SPDIF, оптический Toslink или балансный AES/EBU цифровые входы. Если ЦАП поддерживает DoP, то приняв такой поток он просто соединяет цепочки битов из пакетов, восстанавливая оригинальный поток DSD. Обратите внимание, никакой обработки самих данных при этом не производится.

Цифровые аудиоинтерфейсы S/PDIF: что это такое, как работает и зачем нужно

Аудиозапись на компакт-дисках и сам компакт-диск в начале 80-х представили Philips и Sony. Они же разработали и запатентовали цифровой интерфейс для передачи данных: Sony-Philips Digital Interconnection Format — S/PDIF. В этом материале разбираемся, что это такое и зачем это нужно.

Первоначально S/PDIF был создан для передачи с компакт-диска двухканального звука в цифровом формате. Интерфейс разрабатывали как упрощенный вариант более продвинутого профессионального стандарта AES/EBU. Нужно было заменить массивные XLR-разъемы более привычными, бюджетными и понятными потребителю бытовыми коннекторами, и при этом дать возможность получать с компакт-диска «сырой» цифровой сигнал, без дополнительных преобразований.

Что и как передается по S/PDIF?

Чтобы гарантировать правильную передачу стереозвука с компакт-диска, достаточно было обеспечить скорость 150 Кбайт/с, но разработчики подстраховались и заложили запас по пропускной способности. S/PDIF может передавать не только несжатый стереосигнал с компакт-диска, но и многоканальный звук в формате 5.1 или 7.1 с использованием сжатия. А также некоторое количество дополнительной служебной информации вроде номера дорожки, флага о допустимости копирования, о наличии сжатия, о количестве каналов. Общий поток информации может теоретически достигать 1,536 Мбит/с. Всего-то полтора мегабита в секунду — по современным меркам это смешная цифра.

Еще забавнее изучить протокол изнутри: передача стереозвука была реализована импульсно-кодовой модуляцией PCM. Данные передавались пакетами по 32 бита в каждом, из которых 24 передавали данные, а 8 — служебную информацию. Если данных было меньше (некоторые компакты были записаны в 16 бит), то остаток пакета забивался нулями. Не очень рационально, зато эффективно — транслируемый сигнал тактировался через служебные биты, поэтому мог иметь самую разную частоту дискретизации. И хотя протокол аппаратно поддерживал только передачу стереопотока PCM с конкретными значениями частот дискретизации (32, 44.1 или 48 кГц), в него умудрились впихнуть многоканальность.

DVD-носители аудио и видео используют многоканальный звук формата 5.1 или 7.1, который вполне успешно сжимается по стандарту Dolby и DTS, и передается сквозь изначально стереофонический S/PDIF. Да настолько хорошо сжимается, что битность получается даже ниже, чем 16 бит. Недостающие биты опять же забиваются нулями.

Аппаратная реализация SPDIF-подключения

Наибольшую популярность SPDIF получил в форме электрического кабельного подключения через разъем RCA. Он же «тюльпанчик» или «колокольчик». Если дальность передачи не превышает полуметра, то для подключения можно использовать самый обычный и первый попавшийся кабель RCA-RCA —точно такой же, каким подключалось большинство видеомагнитофонов к телевизору. Но гораздо правильнее подключать SPDIF специальным кабелем с сопротивлением 75 Ом. Его часто называют коаксиальным, вероятно, чтобы подчеркнуть специализированное назначение.

На самом деле, все аудио-видео кабели RCA являются коаксиальными, то есть соосными. В них по центру идет сигнальный провод в изоляции, обернутый в экранный провод. Специальные кабели для подключения SPDIF, те самые на 75 Ом, устроены также. Телевизионный антенный или спутниковый кабель тоже коаксиальный. И разъемы все эти, по большому счету, тоже соосные. Но именно разъем SPDIF почему-то часто маркируют как «coaxial» или «coax».


Если дистанция передачи меньше полуметра, то SPDIF можно коммутировать хоть телефонной «лапшой» — будет работать. Да и в пределах 1.5-2 метров можно обойтись обычным, но качественным RCA-кабелем. А вот дальше потребуется тот самый волшебный коаксиальный кабель на 75 Ом.

Вторая популярная реализация SPDIF —подключение оптоволоконным кабелем и передача сигнала лазерным лучом. Выходы обычно маркируются как OpticalOut или TOSLINK—сокращение от ToshibaLink. Разъемы имеют квадратную форму и закрыты либо вставными заглушками, либо откидными шторками. В портативной электронике встречается модификация MiniTOSLINK в форм-факторе миниджека: в такой разъем можно подключать как обычные наушники, так и оптический кабель.


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

Еще бывает S/PDIF в формате Pin header — самая непопулярная реализация для «внутреннего» использования. Это штыревой разъем на материнских платах, аудиокартах, CD-приводах. Нужен для внутреннего подключения или вывода с материнской платы разъема RCA на заднюю панель компьютера. Дальность действия — сантиметров 30, не больше. Разъем обычно двухконтактный для коаксиального подключения и трехконтактный для комбинированного оптического. Лучше свериться с документацией и использовать любой подходящий кабель небольшой длины.


Какой SPDIF лучше: коаксиальный или оптический

Информация передается одинаковая, при любом типе подключения. С этой точки зрения нет никакой разницы, как именно передавать S/PDIF — по электрике или по оптике. Электрическое соединение доступнее: найти лишний кабель RCA-RCA в бытовых запасах обычно проще, чем оптоволокно. С другой стороны, оптическое подключение TOSLINK меньше подвержено помехам и электрическим наводкам, поэтому может использоваться совместно с кучей прочей электрики, например, в автомобиле.

Оптоволокно более хрупкое, при укладке резкими углами и поворотами уместнее проложить коаксиальный кабель. Сматывать и хранить оптоволокно нужно широкой петлей, без перегибов.


По дальности действия победителя тоже нет — максимальная дистанция передачи заявлена в 10 метров для обоих вариантов подключения, а «оверклокеров», которые бы решили побить этот рекорд, не очень много. Хотя на дистанции от пяти метров выигрывает оптика — лазерный луч, в отличие от электросигнала, не затухает.

Эпохи массового применения SPDIF

Первый пик популярности цифрового интерфейса многие пользователи могли и не заметить – это был специальный двухконтактный разъем на задней панели компьютерного CD-привода, через который он подключался к звуковой карте. Звук можно было выводить и через четырехконтактный аналоговый разъем, но в те времена цифро-аналоговый преобразователь в звуковой карте обычно был качественнее, чем в приводе.

Популярность первого пришествия интерфейса S/PDIF сошла на нет в ходе естественного развития компьютерной техники. Когда компьютеры стали достаточно быстры, чтобы обрабатывать цифровой поток аудио в реальном времени, необходимость в отдельном кабельном подключении исчезла — вся информация передавалась по штатному шлейфу IDE. Цифровой выход убрали с задней панели CD-приводов одновременно с кнопкой переключения дорожек, миниджеком и регулировкой громкости на лицевой панели дисковода. Это был конец 90-х.

Второй пик популярности пришелся на первые домашние кинотеатры с многоканальным звуком, еще до появления HDMI. Бытовые DVD-проигрыватели обычно предлагали два варианта вывода звука: либо стереозвук двумя «тюльпанами», либо многоканальный одним разъемом – оптическим или коаксиальным. Разумеется, для подключения был нужен AV-ресивер, который не только умел принимать многоканальный звук по S/PDIF, но и выступал в качестве усилителя. Он же был центром подключений всех источников видео и аудио.

Третий пик мы можем наблюдать сегодня, когда центральным устройством воспроизведения и ядром всей медиасистемы все чаще становится телевизор. Подключить в него можно что угодно, а вот звуковые способности тонкого корпуса невелики, да и для вывода звука предусмотрен только коаксиальный (реже оптический) S/P-DIF. И чтобы подключить к телевизору акустику помощнее, потребуется цифро-аналоговый преобразователь, который сделает из коаксиальной или оптической «цифры» парочку аналоговых «тюльпанов».

И в такой схеме, когда от телевизора до ЦАПа всего несколько сантиметров, нужен не специализированный коаксиальный кабель с точным сопротивлением, а самый обычный бытовой «тюльпан-тюльпан».

Будущее S/PDIF

Несмотря на долгую и непростую историю интерфейса, перспектив у него практически нет: с невысокой скоростью и дальностью передачи данных он вчистую проигрывает современным комбинированным способам передачи звука и видео, пропускная способность которых выражается в десятках гигабит в секунду — HDMI и DisplayPort.

Разъем SPDIF сегодня чаще используется для совместимости с предыдущими поколениями техники, чтобы подключать DVD-проигрыватель, видеомагнитофон, аналоговую акустическую систему и т. д. Вот несколько ключевых особенностей, которые нужно помнить при использовании SPDIF:


USB-C предлагает новые потрясающие возможности, включая подключение внешних мониторов по USB-порту. Распространены недорогие конвертеры USB-C на DisplayPort и HDMI. Также часто встречаются хабы USB-C с поддержкой внешних мониторов, однако попытки разобраться в их возможностях и ограничениях могут сильно вас запутать. Некоторые из них совместимы с Mac, некоторые – нет. Некоторым нужны драйвера. Очень сильно разнится поддержка разрешений и частоты обновления. Некоторые рекламируются как «не предназначенные для игр». Делаются упоминания об альтернативных режимах, дуальных режимах, и прочем. Цены разнятся от $20 до $300+, причем функции у тех и других очень похожи. Что вообще происходит?

Это инструкция по передаче видео высокого разрешения по USB-C, которую я хотел бы в своё время иметь. Если вы хотите подключить монитор высокого разрешения к своему компьютеру, имеющему выход USB-C, читайте далее.

Забудьте про HDMI

В первую очередь необходимо сконцентрироваться на подключении к разъёму DisplayPort и забыть про HDMI. Вы не найдёте хаба USB-C, возможности которого с использованием порта HDMI превосходят возможности с использованием DisplayPort, однако же можно найти хабы, которые через DisplayPort предлагают большее разрешение и частоту обновления. Подозреваю, что большинство хабов с поддержкой HDMI внутри просто работают через DisplayPort и конвертер DisplayPort – HDMI. Всё оттого, что видео через DisplayPort на USB-C с одной и той же частотой и разрешением можно передавать более эффективно, чем через HDMI.

Коннекторы DualMode DisplayPort++ способны работать как коннекторы HDMI с простым пассивным адаптером (он преобразует 3,3 В в 5 В). Обычные коннекторы DisplayPort такого не умеют, и требуют активного HDMI-адаптера. Других отличий между двумя этими типами DisplayPort я не знаю.

Компромиссы по пропускной способности: всё дело в полосах

USB-C коннектор с 24 контактами является ключом к пониманию.


У коннекторов USB-C есть четыре дифференциальных разных пары, или «полосы», для передачи данных на высокой скорости. Есть и пятая пара, D+ и D-, передающая данные в старом стиле USB 2.0.

Посмотрим, что происходит при добавлении в эту кучу DisplayPort:


USB 3.1 Gen 2 использует только две из четырёх полос, как показано в двух верхних строках таблицы. Две остальные пропадают зря (их будет использовать USB 3.2). Две этих полосы можно переделать на поддержку родного сигнала DisplayPort, используя то, что называют DisplayPort Alternate Mode – это показано в средних строках. В данном случае коннектор USB-C работает как коннектор DisplayPort другой формы и дополнительными проводами для данных USB. Быстродействие USB 3.1 не теряет. Для компьютера и внешнего монитора это выглядит ровно как обычное соединение DisplayPort.

Две полосы DisplayPort обеспечивают достаточную пропускную способность для одного внешнего монитора разрешения до 4К и 30 Гц. Для фильмов сойдёт, но работать с десктопами Windows или MacOS на 30 Гц жестоко. Для поддержки частоты обновления в 60 Гц нужно уменьшить разрешение до 2К.

Если вам нужно 4К 60 Гц, 5К или несколько внешних мониторов, придётся использовать DisplayPort Alternate Mode со всеми четырьмя полосами для передачи данных DisplayPort, как показано в нижних строках таблицы. Для компьютера и внешнего монитора это всё ещё выглядит как обычное соединение DisplayPort. Однако для данных USB 3.1 полос уже не остаётся. Остаётся только старая пара D+/D-, обеспечивающая медленные данные USB 2.0. Это значит, что никакой USB-C хаб, использующий эту технологию для передачи видео 4К 60 Гц не может иметь портов USB 3.1.

Также можно поддерживать внешние мониторы с DisplayPort, не используя выделенных полос для DisplayPort Alternate Mode, и для этого есть два разных подхода. Если в порту USB-C компьютера есть поддержка Thunderbolt 3, тогда данные DisplayPort можно передавать внутри данных Thunderbolt. Тогда видеоданные становятся ещё одним типом макетов данных, уплотнённых вместе со всем остальным. У Thunderbolt 3 достаточно пропускной способности, чтобы таким способом поддерживать несколько соединений на 4К60, и ещё останется место для данных USB 3.1

Это круто, однако хабы для Thunderbolt 3 дороги, а у компьютера должна быть поддержка Thunderbolt 3, чего у многих нет. Также для компьютера это выглядит по-другому – в отличие от DisplayPort Alternate Mode, тут нет никаких родных сигналов DisplayPort и прямой связи с GPU компьютера. Не знаю, есть ли из-за этого задержка обработки видео, или это всё волшебным образом обрабатывается в чипсете без потери скорости. Полагаю, что потери нет.

DisplayLink


Другой способ поддержки внешних мониторов без выделения полос – DisplayLink. Эта технология сжимает видео на стороне хоста, отправляет его по USB 3.1 в виде данных общего назначения, и превращает обратно в видео на другом конце при помощи особого чипа типа DL-6950. Это похоже на доступ к экрану рабочего компьютера из дома по системе удалённого рабочего стола, только всё это происходит на одном вашем же рабочем столе.

DisplayLink хорошо подходит для запихивания видео высокого разрешения в низкоскоростное соединение типа USB, или поддержки нескольких внешних мониторов без использования Thunderbolt. Однако при наличии альтернатив лучше избегать DisplayLink. Вот его недостатки:

  • Требуется драйвер на стороне хоста. Доступность и совместимость драйверов для Mac/Linux практически нулевая. Поэтому некоторые хабы USB-C идут с пометкой о несовместимости с Mac.
  • Драйвер может замедлить работу компьютера. Он реализует поддержку виртуальной видеокарты, на лету сжимающей данные, что нагружает проц.
  • При большой занятости компьютера или изобилии трафика по USB на видео будут появляться артефакты. Пикселизация, задержки, выпадение кадров и другие проблемы. Поэтому некоторые USB-C хабы идут с пометкой «не для игр».

Так и какие у нас варианты?

Учитывая всё вышесказанной, можно разбить USB-C хабы на четыре категории на основании того, как они работают с видео. Вот примеры из каждой категории.

4 полосы для видео

Такие хабы поддерживают внешние мониторы вплоть до 4К60, или, возможно, 5К, но данные передают только по USB 2.0. Это не быстро, но достаточно для клавиатуры, мыши и простых принтеров. Должны работать на любом компьютере с поддержкой DisplayPort Alternate Mode, и стоят обычно порядка $30.

Cable Matters 201046 $38 – 1x DisplayPort, power, ethernet, 1x USB2
Cable Matters 201055 $58 – 2x DisplayPort, power, ethernet, 2x USB2
Monoprice 24274 $28 – 1x DisplayPort, power
Cable Matters 201026 $20 – 1x DisplayPort, power
Baseus B07P713FPD $25 – 1x DisplayPort, power

2 полосы для видео

Такие хабы поддерживают внешние мониторы вплоть до 4К30, и данные по USB 3.1. Многие из них рекламируются, как «4К», без указания частоты обновления. Должны работать на любом компьютере с поддержкой DisplayPort Alternate Mode, и стоят обычно порядка $30-$150.


USB версии разъёмов

USB версии в настоящее время включают 1.1, 2.0, 3.0, 3.1 и 3.2.

USB - A, B, C и D: распиновка, скорость и особенности подключения

USB - A, B, C и D: распиновка, скорость и особенности подключения

Все USB 1.1, 2.0 и 3.0 имеют одинаковую конструкцию разъема типа A, это означает, что он всегда совместим с портом типа A, даже если устройство и хост используют разные версии USB. Они отличаются только тем, что в версиях 3.0 и 3.1 добавлены дополнительные линии для дополнительных сигналов, необходимых для использования режимов SuperSpeed и SuperSpeed+.

Полезное: Разъёмы Molex Wire-to-Board для печатного монтажа

USB - A, B, C и D: распиновка, скорость и особенности подключения

По сути, разъем B является конечной частью стандартного USB-кабеля, который подключается к периферийному устройству, например, принтеру, телефону или внешнему жесткому диску, и также известен как штыревой тип B. Поскольку периферийные устройства бывают разных форм и размеров, разъем B и его порт также доступны в нескольких различных версиях. В настоящее время доступно 5 популярных моделей USB-разъемов и разъемов типа B: оригинальный стандарт B, Mini-B, Micro-B, Micro-B USB 3.0 и стандартный разъем USB B типа 3.0. Они отличаются в основном размерами, что позволяет размещать разъемы типа B в очень маленьких устройствах.

В настоящее время кабели USB типа B практически забыты. Это потому, что принтеры и другие крупные устройства уже используют беспроводные WiFi каналы.

Конструкция стандартного разъема типа B используется для подключения больших периферийных устройств, таких как принтеры или сканеры, к компьютеру и была разработана для USB 1.1. Значительно меньшие порты Mini-B можно найти в старых портативных устройствах, таких как цифровые камеры и старые портативные накопители. Этот формат соединителя теперь устарел. Micro-B USB немного меньше, чем Mini-B, и является наиболее распространенным типом разъема USB для современных смартфонов и планшетов. Micro-USB 3.0 является самой массовой конструкцией и в основном используется для портативных накопителей USB 3.0. Интерфейсные разъемы USB 3.0 и выше, как правило, синего цвета для упрощения интуитивного подключения к компьютерам, где порты USB 3.x также синего цвета.

USB - A, B, C и D: распиновка, скорость и особенности подключения

USB - A, B, C и D: распиновка, скорость и особенности подключения

USB - A, B, C и D: распиновка, скорость и особенности подключения

Есть в продаже переходники USB Micro <-> C, советуем на запас купить несколько штук, так как будет появляться всё больше оборудования USB-C. Такие адаптеры будут полезны в ситуации, когда у всех вокруг есть только зарядные устройства с «обычным» Micro-USB.

USB - A, B, C и D: распиновка, скорость и особенности подключения

USB 2.0 A и B всё ещё будут на рынке в течение долгого времени, потому что есть миллиарды устройств с этим портом, и это дешево, также потому что это механически самый сильный USB-разъем, если разъемы хорошего качества и платы не тонкие, то эти разъемы действительно надёжны. Это подтверждает их применение в сценическом оборудовании, где они являются стандартными и могут работать на сценах и студиях в течение многих лет без сбоев. Такое же дело стоит в оборудовании: осциллографы, цифровые БП, ЧПУ, автоматизация.

В ожидании USB-D

USB 3 C разъем хотя и лучше, чем mini и micro, но очень слабый по сравнению с A и B. Это подтверждается практикой. Так что будем ждать очередного стандарта (может USB-D?), который при высокой скорости также окажется достаточно надёжным.

Коротко о USB - откуда все начинается. D+ и D- это дифференциальная пара, данные передаются в противофазе с одной лишь целью уменьшить помехи. То есть линия передачи по сути одна ! Есть ведущее устройство (Хост) и ведомое (Device).

Ведущее и ведомое могут одновременно что-то посылать в канал. Поэтому протокол USB очень требовательно распределяет , что ведущий и когда посылает и что (и когда) ведомый должен ответить. Иначе никак нельзя.

Вот на картинке ниже все отчетливо видно (один пакет от ведомого):

фотка 1

Сначала все просто:

Пакет всегда начинается с SYN (10000000).

Завершается пакет всегда EOP (End Of Packet ) . На картинке выше видна единственная ассиметрия в конце пакета, когда : 2 линии DP и DM различаются.

Примерная последовательность пакетов.

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

Периодические пакеты "НЕ СПАТЬ" SOF (Start Of Frame) - это примерно 1раз/1мс посылка от хоста ведомому ("не спи"). Их лучше сразу как-то отфильтровывать для понимания.

Далее остается три типа пакетов типа . Ниже их PID (Packet Identificator) , он же токен :
SETUP это служебные пакеты стандартного протокола настройки устройства
OUT это хост передает данные
IN это хост запрашивает данные от девайса

Эти пакеты вкладываются между SYNK и EOP .

фотка 2

Получается примерно такая структура [SYNC] [PID] [Address(7 бит)] [EndPoint] (4 бит) [EOP ]. На картинке выше видно как девайс отвечает NAK практически сразу и это нормально. Это означает , что девайсу надо подумать и сразу он не может ответить на команду.

PID это токен или (Program Identificator) SETUP, IN , OUT.

Address - это адрес нашего устройства на шине USB . Сначала он всегда 0 после подключения USB. Потом хост перенумеровывает все устройства на шине и присваивает каждому устройству уникальный адрес (размер всего 1 байт).

EndPoint - хост всегда общается не просто с устройством по адресу , а еще и с конкретной конечной точкой (end-point) устройства , которых может быть несколько. Как же хост узнает какие значения у конечных точек (EP) ? Правильно для этого зарезервировано значение 0 (конечная точка EP0), служебный end-point , через который хост получает первичную информацию от других конечных точках. Как всегда все просто.

Допустим наш хост уже получил всю информацию о конечных точках , интерфейсах, конфигурациях через EP0.

Как происходит дальше работа на примере обычной клавиатуры

Хост долбит периодически PID IN по адресу устройства плюс Endpoint устройства (у нас EndP 0x01), который отвечает за прием данных от клавиатуры (IN для хоста).

фотка 3

Если никакая клавиша не нажата ведомый обязан ответить и отвечает NAK. Такие пакеты хост передает примерно 1 раз в 10ms и устройство если не нажата клавиша передает NAK.

А вот когда на клавиатуре нажимается какая-нибудь клавиша, ведомый ответит сначала DATA0 пакетом и следом пакет ACK.

фотка 4

Количество передаваемых байт в DATA0 зависит от типа клавиатуры, то есть каждый решает сколько использовать байт для передачи скан кода нажатой клавиши. Клавиатура сообщает по стандартному протоколу через EP0 о своих настройках.

Тут есть нюанс , что хост всегда посылает запрос устройству на конкретный EP. Если запрос идет на EP для передачи данных (у нас EP1 ) это одно , если запрос идет на служебный EP0 - это хост хочет подключить , настроить устройство. То есть хост всегда определяет логику обмена , а девайс обязан подстраиваться под запрос.

Вообще кто есть хост? Это драйвер например клавиатура или сетевого адаптера и у каждого драйвера соответственно свой протокол , своя логика.

Таким образом если вы разрабатываете USB устройство и ПК шлет вам все пакеты на EP0 , а до других EP не доходит дело, то значит что-то еще не закончено с настройками устройства, что-то хосту не нравится.

Хост вообще говоря может ждать ответ одновременно от 2 и более конечных точек . Это абсолютно нормально. Выглядит это в логах анализатора LA1010 примерно так:

Видно как хост тупо чередует EP0 и EP2.

Если не возникает какого-то прерывания у девайса

То есть если на шине пакеты бегут, а прерывание необходимое не возникает. Например тупо не возникает прерывание IN bulk у RNDIS адаптера (DataIn у EP2). То есть на шине вижу , что девайс отсылает NAK на IN EP2, но самого прерывания в девайсе не возникает.

Тут надо в регистры лезть и отсрочки уже не будет. Какие мысли возникают в первую очередь. Прерывания маскируются вроде (надо проверить).

Так как у нас есть один рабочий проект но без FreeRTOS , то сначала тупо начинаем сверять регистры USB ( OTG_FS_GLOBAL и OTG_FS_DEVICE ): после инициализации , после открытия конечных точек, после приема нужного пакета и т.д. Эти регистры кстати удобно просматривать на закладке SFRS (в Atollic true Studio), тут видна их внутренняя структура. И еще с момента последней точки остановки подсвечиваются изменения.

фотка 1

В процессе сверки регистров мы находим отличия в OTG_FS_GLOBAL, исправляем, заодно изучаем назначение регистров и в какой-то момент даже ловим __HAL_PCD_IS_INVALID_INTERRUPT (на картинке выше видно). Ура хоть что-то.

На самом деле не знач - не ведая мы подошли к главному моменту. Мы наконец-то обратили внимание на USBD_LL_Init, а точнее на загадочные функции HAL_PCDEx_SetRxFiFo(..) и HAL_PCDEx_SetTxFiFo(..) .

Момент истины

И выяснилось , что мы не понимаем и половины логики работы USB . Не зная регистры вообще нет возможности понять что делать. В данном случае HAL это вред.

Итак HAL_PCDEx_SetRxFiFo / HAL_PCDEx_SetTxFiFo создает таблицу во внутренней памяти контроллера USB. Да именно контроллера USB , а не контроллера STM32. Так как у STM32F имеется как-бы свой встроенный контроллер , отвечающий за USB. И у него есть своя память 512К, в которой надо создать таблицу с буферами приема / передачи для каждой конечной точки.

Где эта таблица, где ее адреса.

А вот сама структура USB_OTG_GlobalTypeDef .

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

Опять момент истины

Дальше , если интересно немного о передаваемых скан кода клавиатуры . Проводная клавиатура Low Speed

Скан коды USB HID клавиатур это не ASCII коды и не не коды PS/2 клавы.

Читайте также: