Как проверить data на usb

Обновлено: 03.07.2024

Я не буду говорить ни о USB2 ни тем более о USB3. Это для меня в пока основном «высокие материи». Давайте поговорим о старом добром USB1.1.
И пожалуйста не смейтесь. На самом деле, если Вы поищите в русскоязычном интернете техническую спецификацию на USB1.1 (я уже не говорю про USB2, а в USB3 наверное Intel вообще не публикует деталей), то вряд ли Вы найдете там что нибудь стоящее. В основном у нас можно найти общие сведения и общие фразы. Нас же, как разработчиков аппаратуры интересуют технические детали стандарта и возможность реализации устройств поддерживающих его.
Еще конкретнее вопрос стоит так: сможем ли мы подключить платку Марсоход через USB к компьютеру?

Здесь же, в этой статье, я попробую описать основные принципы работы USB1.1.
Сразу сделаю оговорку: во-первых, я не очень люблю USB1.1, слишком уж замудрено он придуман (мне кажется можно было сделать проще), во-вторых, естественно, в маленькой статье невозможно описать все. Прошу заметить, что в файле спецификации USB1.1 целых 327 ужасных страниц текста и картинок. Если у Вас есть мысль напечатать это на принтере, то не советую. Реально полезной информации там не очень много, зато «много букав».

Итак, приступим.
В разъеме USB1.1 всего четыре контакта:

  • Земля (4, обычно черный провод в кабеле);
  • DP (3, обычно зеленый провод в кабеле);
  • DM (2, обычно белый провод в кабеле);
  • +5V (1, обычно красный провод в кабеле).

Таким образом, мы видим всего 2 сигнала для обмена данными между хостом (компьютером) и подключаемым устройством. Эти сигналы DP и DM (иногда их обозначают D+ и D-) – это дифференциальная пара. Сигнал передается по ним в противофазе. Это позволяет на приемном конце бороться с помехами.

Как хост определяет, что подключено новое устройство? Довольно просто. На стороне хоста обе линии DP и DM притянуты к GND через резисторы 15кОм. Контроллер хоста проверяет состояние этих линий. Если на обеих линиях ноль, то это значит, что ничего не подключено. На стороне подключаемого устройства один из сигналов притянут через резистор 1,5кОм к напряжению питания. Таким образом, если устройство подключено, то одна из линий либо DP либо DM поднимается в состояние «единица» и хост контроллер видит, что подключено новое устройство.

usb_low_speed

Устройства для USB1.1 бывают двух типов: полноскоростные (full speed) и низкоскоростные (low speed). Посмотрите на эти две картинки:

usb_full_speed

Таким образом, полноскоростные устройства имеют подтягивающий резистор на +5В для сигнала D+, а низкоскоростные устройства – для сигнала D-.

Частота передачи данных для полноскоростных устройств 12МГц, а для низкоскоростных 1,5МГц. Низкоскоростное устройство принимает и посылает данные до 8 байт длиной. Высокоскоростное устройство может посылать или принимать до 64 байт данных.

Особо следует отметить, что эти две линии D+ и D- служат для передачи данных в обе стороны. Как же разрешаются конфликты на линиях, если оба и хост и подключенное устройство захотят передавать данные? Такая ситуация не должна случаться в принципе. Дело в том, что передача полностью управляется хост контроллером компьютера. Если хост контроллера должен прочитать данные с устройства, то он посылает соответствующую команду и переключается в режим приема, а затем ждет пакета от подключенного устройства.

Хост контроллер компьютера ведет опрос подключенных устройств каждую миллисекунду – этот временной промежуток называется фреймом. В начале каждого фрейма хост контроллер посылает специальный SOF (Start Of Frame) пакет для полноскоростных подключенных устройств или SE0 для низкоскоростных устройств.

Если устройство не получает SOF или SE0 некоторое время (несколько фреймов), то это означает, что оно должно уйти в спячку (suspend) и по возможности снизить энергопотребление.

Отдельно нужно обратить внимание на состояние SE0. Это состояние, когда обе линии DP и DM находятся «в нуле». Это состояние используется в 3-х случаях.

Во-первых, после подключения устройства программное обеспечение хоста дает ему команду «сброс» (Reset). Хост опускает обе линии DP и DM в «ноль» на время большее 10мс. Подключенное устройство должно воспринять это действие как общий «сброс».

Во-вторых, как я уже сказал, для низкоскоростных утройств каждый фрейм начинается с состояния SE0 (обе линии DP и DM в нуле) длительностью 2 такта от 1.5МГц.

В-третьих, каждый посланый пакет в любую сторону, от хоста к устройству или наоборот, всегда заканчивается состоянием EOP (End Of Packet), и этот EOP - это тот же самый SE0 – обе линии DP и DM в нуле на протяжении времени 2 бит передачи данных. Для полноскоростных устройств это 2 такта от 12МГц. Для низкоскоростных устройств это 2 такта от 1,5МГц.

ls_usb_signals

Все данные в любую сторону оформлены в виде пакетов. Давайте посмотрим как они выглядят на физическом уровне. Лучше всего изучать по картинкам, а они в спецификации USB1.1 какие-то не очень понятные. Я нарисовал свою картинку.

Здесь видно, что подключено низкоскоростное устройство, так как фрейм начинается с SE0 – по времени 2 бита DP и DM находятся в нуле.

Дальше видно 3 пакета: хост посылает пакет SETUP, посылает пакет DATA0 и получает от устройства пакет ACK. Каждый пакет всегда начинается со специального символа SYN, его значение 0x80. Байт передается младшими битами вперед. Кодировка несколько странная. Каждый нулевой бит кодируется изменением сигнала DP/DM на противоположный. Каждый единичный бит состояние линий не изменяется. Однако есть исключение – если в передаваемом потоке окажется подряд шесть единиц, то состояние линий DP/DM принудительно меняется на противоположный. Этот нулевой бит должен быть удален на приемном конце при приеме пакета. Этот алгоритм называется «bit stuffing». Обратите внимание на завершение пакетов состоянием SE0 – EOP (End Of Packet). Интервал между пакетами должен быть не менее времени 2 бит, на практике обычно больше. Это был физический уровень связи.

Рассмотрим уровень протокола. Здесь все гораздо более запутанно. Без поллитра не разобраться (конечно если Вам больше восемнадцати). Для чего разработчики стандарта сделали все это так сложно я и сам не пойму.

Существуют пакеты нескольких типов. В каждом типе есть под-типы (это мое определение, в спецификации так не говорят).
Итак вот таблица:

Тип пакета Идентификатор пакета PID в шестнадцатеричном виде Описание
Token OUT 0xE1 Используется для передачи адреса устройства и номера канала (endpoint) во время транзакции передачи данных от хоста к уствойству
Token IN 0x69 Используется для передачи адреса устройства и номера канала (endpoint) во время транзакции передачи данных от устройства к хосту
Token SETUP 0x2D Используется для передачи адреса устройства и номера канала (endpoint) во время транзакции передачи данных от хоста к уствойству к специальному управляющему каналу (control pipe)
Token SOF 0xA5 Маркер начала фрейма и номер фрейма
Data DATA0 0xC3 Используется для передачи четного пакета данных
Data DATA1 0x4B Используется для передачи нечетного пакета данных
Handshake ACK 0xD2 Подтверждение о приеме данных
Handshake NAK 0x5A Либо приемник не может принят данных либо передатчик не может послать
Handshake STALL 0x1E Останов endpoint или служебный запрос не поддерживается
Special PRE 0x3C Посылается USB хабу, когда требуется переключить скорость в низкоскоростную

usb_token_pkt

Рассмотрим формат основных пакетов: token, data, handshake.
Не забудьте, что в линии USB пакеты посылаются начиная с символа SYN 0х80, а уж затем вот эти пакеты и завершаются они EOP (2 такта линии DP и DM в нуле).

usb_data_pkt

usb_handshake_pkt

Для token и data еще нужно посчитать контрольные суммы. Их можно считать вот так (написано на языке C):

//функция принимает двухбайтовое слово где адрес и номер канала, считает CRC5 и //вписывает контрольную сумму прямо в нужное место этого слова
USHORT CalcCrc5ForUsbTokenPacket(USHORT a)
ULONG b = 0x1f;
USHORT d = a;
for(int i=0; i<11; i++)
if((d^b)&1)
b >>= 1;
b ^= 0x14;
>
else
b >>= 1;
d >>= 1;
>

b ^= 0xffffffff;
b <<= 11;
a |= b;
return (USHORT)a;
>

usb_dialog

//функция принимает указатель на пакет данных (без PID) и длину пакета
//возвращает CRC16
USHORT CalcCrc16ForUsbDataPacket(char *pData, int len)
USHORT b = 0xFFFF;
for(int i=0; i<len; i++)
char a = *pData++;
for(int j=0; j<8; j++)
if((a^b)&1)
b >>= 1;
b ^= 0xa001;
>
else
b >>= 1;
a >>= 1;
>
>
b ^= 0xffffffff;
return (USHORT)b;
>

Ну а на последок, чтобы Вы оценили все «прелесть» диалога между хостом (компьютером) и подключенным устройством посмотрите на следующую картинку:

Это снимок экрана с программы USB Tracker – устройства позволяющего записывать и анализировать весь трафик между хостом и устройством.

На самом деле, сделать что нибудь с USB не имея подобного инструмента практически нереально. У нас он есть и мы попробуем реализовать простую функцию USB в плате Марсоход. А что у нас получится возможно скоро Вы узнаете.

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

В Windows

Возможности электропитания USB-портов можно проверить с помощью диспетчера устройств в Windows. Чтобы найти эти данные в Windows 10:

1. Введите Run в поле поиска на панели задач.

2. В открывшемся окне введите devmgmt.msc.

3. Дважды щелкните на ветке контроллеров Universal Serial Bus, чтобы развернуть ее.

Usb Power Expand Usb

4. Щелкните правой кнопкой мыши одну из записей, которые называются USB Root Hub или Generic USB Hub и выберите Properties.

Usb Power Usb Root Hub Right Click

В разделе Hub Information вы найдете общий уровень мощности, доступный для данного USB-устройства. Если к порту подключены устройства, вы увидите энергию, потребляемую этим устройством, которая указана в разделе Attached Devices.

Usb Power Usb Root Hub Properities

USB Deview

USB Deview — это бесплатное программное обеспечение, которое предоставляет пользователю технические характеристики USB-портов на компьютере. Это портативная программа, и вам не нужно ничего устанавливать на свой компьютер.

Для использования USBDeview:

2. Распакуйте файлы и запустите приложение.

Как проверить выходное напряжение USB-портов 1

3. Найдите порты USB. Простой способ сделать это — щелкнуть на ярлыке Description (Описание), чтобы отсортировать устройства по описанию. Это сгруппирует все USB-порты и облегчит их поиск в списке.

4. Щелкните на том, который вы хотите проверить.

Как проверить выходное напряжение USB-портов 2

5. Прокручивайте до тех пор, пока не найдете заголовок колонки с надписью Power. Нажатие сюда покажет вам, сколько энергии использует порт.

Заранее спасибо! Все собранные средства будут пущены на развитие сайта. Поддержка проекта является подарком владельцу сайта.

Последние

Creepwave вернулась на первое место в турнирной таблице D2CL 2021 S5 Коллектив NAVI стали победителями чемпионата Европы по PUBG Mobile Windows System Control Center — сборник системных утилит для Windows Как установить несколько загрузочных операционных систем на USB-накопитель Как добавить время на панель задач второго монитора в Windows 11 10 интересных гаджетов с AliExpress. Часть 96. Инструменты для мужика 8 лучших бесплатных онлайн-конструкторов для создания логотипов

Реклама

telegram

Рубрики

СЧЕТЧИКИ

РЕКЛАМА И ДОНАТЫ

Социальные сети

©2016-2021 Блог Евгения Левашова. Самое интересное и полезное из мира ИТ. Windows 10, Linux, Android и iOS. Обзоры программ и веб-сервисов. Статьи о мотивации и продуктивности.

Данный блог является личным дневником, содержащим частные мнения автора. В соответствии со статьей 29 Конституции РФ, каждый человек может иметь собственную точку зрения относительно его текстового, графического, аудио и видео наполнения, равно как и высказывать ее в любом формате. Блог не имеет лицензии Министерства культуры и массовых коммуникаций РФ и не является СМИ, а, следовательно, автор не гарантирует предоставления достоверной, не предвзятой и осмысленной информации. Сведения, содержащиеся в этом блоге не имеют никакого юридического смысла и не могут быть использованы в процессе судебного разбирательства. Автор блога не несёт ответственности за содержание комментариев к его записям.

В комментариях под их видео, один из зрителей сказал, что можно без проблем сделать нечто подобное из обычного свистка для прошивки STM,

Немного об АСЦ (Тестер USB) Асц, Тестер, USB, Видео, Длиннопост

который в Китае стоит 200 рублей,

Немного об АСЦ (Тестер USB) Асц, Тестер, USB, Видео, Длиннопост

цена же тестера от АСЦ 3500 рублей, мотивируется тем, что это личная разработка, которая почти год разрабатывалась и много сил и времени было на нее потрачено, а так же было заказано производство, что как бы тоже денег да и стоит, давайте разберемся :)

Вот видео того человека, в котором он повторил девайс на свистке от стм, причем не спустя год, а в тот же день, что выпустила видео АСЦ.

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

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

1. Размеры платы не должны мешать втыкать оборудование в соседние порты USB

2. Должен быть аккумулятор, чтобы можно было проводить диагностику на обесточенных устройствах (касаемо проверки на КЗ и разность сопротивлений дата линий)

2а. Этот аккумулятор должен заряжаться при подключении к запитанному порту USB

3. При подключении к порту USB, у которого нет питания, происходит проверка сопротивлений шин данных, результаты выводятся либо на светодиод, последовательностью миганий, либо их ускорением, либо на oled Экранчик, тут как творец захочет :)

4. При подключении к порту USB, у которого есть питание +5v, устройство переключается в режим проверки прохождения инициализации, и одновременно заряжает встроенный аккумулятор, таким образом мы убираем сложность в определении сопротивлений работающих дата линий, в прочем, USB тестер от АСЦ, видимо сделан по той же схеме, так как в видео именно так и было показано, сначала в мертвый бук воткнули, потом в живой. С другой стороны, эта сложность и не нужна, я не встречал буков, которые подают питание на USB порты в выключенном состоянии по причине излишнего разряда аккумулятора.

5. Проверка на прохождение инициализации происходит путем эмуляции клавиатуры, а точнее нажатия кнопки CapsLock, и последующей проверки статуса CapsLock, включен или нет, если эти состояния меняются, значит инициализация пройдена и устройство включилось. В видео АСЦ, кстати, об этом умолчали, но преподнесли как фичу, что при подключении к рабочему компьютеру, в отличии от тестера от nbzip, который каким-то образом влияет на мышку, прерывая частично ее работу, с подключенным тестером от АСЦ компьютером можно спокойно пользовать и заряжать его от порта USB, только вот мигающий капс лок, даст вам печатать в тАкОм СтИле, что как бы не удобно? Хотя фича, почему бы и нет :D

Как видим, исходя из ТЗ, понятно что подобное устройство не может стоить 3500 рублей, с учётом заказа плат с монтажем с JLC PCB и использования корпуса в виде термоусадки, как в оригинале от АСЦ. Год разработки нууу, если изначально выучить язык, потом понять как работает схемотехника, и засчитывать это время, то да. Ну и еще накосячить с тз изначально, сделать 4-5 ревизий, которые по некоторым параметрам не подходят и т.д. но должно ли финальное устройство включать эту стоимость? На примере человека, который повторил часть функционала за несколько часов, можно сказать, что год разработки это много.

Еще хочу добавить, что 3500 для рабочего устройства, помогающего в работе не цена, у меня жало для паяльника столько стоит, и уж точно не мне рассуждать о стоимости устройства, если оно действительно того стоит.

Продолжим повествование: Через некоторое время, АСЦ написал комментарий под видео этого человека, примерно следующего характера —

Все хорошо, вы молодец, но чем больше подобных людей будут повторять наши самоделки, которые вышли в продажу, тем меньше мы их будем делать…

Под этим комментарием, я им сказал, что самоделки нужно делать такого уровня, который нельзя повторить за час, — допустим программатор Вертьянова, либо продавать по той цене, чтобы остальным не было смысла их повторять, в этом случае, я считаю что это 1500 рублей, с учетом заказа с JLC PCB где 5 плат размера 100 на 100мм, в которые можно включить минимум 8 таких тестеров, а это порядка 40 готовых печаток, обойдутся в 8 долларов + 8 долларов доставка ( но доставка не сильно дорожает при увеличении партии).

Асц пишет мне ответ

Немного об АСЦ (Тестер USB) Асц, Тестер, USB, Видео, Длиннопост

Пользователь Ассоциация Сервисных Центров оставил комментарий: "Мне пох, на обиды и прочее. Тестеров продано уже много и остался последний остаток в 300 штук. Тестер это измерительный прибор, рабочий инструмент и не может стоить как доширак. Не нравится, не пок. " 14 минут назад

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

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

В связи с этим буду освещать развитие проекта от KARMA ELECTRONICS, и как только допилит проверку на кз в этом свистке за 200 рублей, выложу у себя на странице, а пока можете повторить его тестер инициализации, ссылки на видео выше, в его описании ссылка на архив с прошивкой.

Вы когда-нибудь пытались передать файлы с ПК на смартфон с помощью USB-кабеля, но компьютер не распознает ваше устройство? - он только заряжает его. Такое случается, и, я думаю, все мы бывали в такой ситуации. Но почему это происходит? Иногда кабель может быть «поддельным». Также возможно, что ваш кабель неисправен или оборван. Но обычно с USB-кабелем все в порядке, он просто не предназначен для передачи данных.


Типы USB-кабелей

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

Как правило, есть два типа кабелей:

  1. Кабели для зарядки: могут только заряжать ваш смартфон и другие устройства, но не могут передавать данные. Их обычно называют кабелями «только для зарядки» (Charge-only).
  2. Кабели для передачи данных: они могут делать и то, и другое — этот кабель заряжает ваши устройства и передаёт данные (Data cable).

Чем (и почему) отличаются эти кабели?

Что отличает USB-кабель только для зарядки от кабеля для передачи данных, так это способ их изготовления. Точнее, их разводка — количество жил внутри кабеля. Под причудливым корпусом ваших USB-кабелей прячутся провода, верно? Количество проводов в кабеле будет определять, будет ли ваш телефон заряжаться, передавать данные или делать и то, и другое.


Система подключения кабеля USB

Кабели для передачи данных обычно содержат четыре провода (положительный, отрицательный, для передачи и приёма данных). Положительный (+) и отрицательный (-) провода подают электроэнергию к устройству, в то время как два других провода передачи данных (D +) и приёма данных (D-) отвечают за обмен данными. С другой стороны, кабели только для зарядки имеют только положительный и отрицательный провода питания, но не имеют проводов для обмена данными.

Все USB-кабели имеют положительный и отрицательный провода (потому что они являются наиболее важными), но не все USB-кабели имеют провода для обмена данными — поэтому некоторые кабели только заряжают ваш смартфон.


USB-кабель для передачи данных (с 4 проводами)

Как отличить

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

1. Физическое обследование

Из-за количества проводов в них USB-кабели для передачи данных обычно толще, чем USB-кабели для зарядки. Кабели для передачи данных имеют четыре провода и, как таковые, имеют более толстую внешнюю изоляцию/покрытие, чем их аналоги, предназначенные только для зарядки, с двумя (2) проводами.


Кабель только для зарядки USB (с 2 подключёнными проводами)

2. Обратитесь в службу поддержки

Если вы покупаете USB-кабель в Интернете, и на странице продукта прямо не указано, что кабель поддерживает обмен данными, лучше всего обратиться в службу поддержки клиентов веб-сайта для подтверждения. Если вы покупаете кабель в офлайн-магазине, обязательно свяжитесь с продавцом, чтобы убедиться, что кабель, который вы покупаете, действительно является кабелем для передачи данных.

3. Предварительный тест

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

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

4. Описание кабеля

Обращайте внимание на описание кабеля — если присутствует слово «Charge», но отсутствует слово «Data», то скорее всего это кабель только для зарядки.

5. Кабели со съёмными головками

5. Кабели со съёмными головками — удобные кабели для зарядки с красивой подсветкой, делающее подключение более безопасным — если вы забылись и случайно резко дёрнули телефон, то вместо того, чтобы сломать гнездо телефона или розетку, произойдёт отсоединение магнитной головки. Такие кабели обычно являются кабелями только для зарядки!

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