Stm32 ошибка usb 43
Доброго всем времени суток) Сразу скажу для меня stm32 нечто новое.
Осваиваю с простого. Есть плата с stm32f407zet6. Что требуется: что бы плата определилась в системе как съемный диск. На данном этапе нужно создать буфер в ОЗУ, размер ОЗУ 192 кбайта, мне много не надо для эксперимента)) хватит вполне 64 кбайт.
по умолчанию заданно
я так понимаю 65536 блоков(секторов) по 512 байт = 33554432 = 32мбайт, много.
используя простой калькулятор у меня получилось так
в итоге получаю, не известное устройство, код 43, "Это устройство было остановлено, поскольку оно сообщило о возникновении неполадок. (Код 43)"
Ладно, создаю еще 1 проект, точно такой же но без моего кода, все как Cube выдал, компилирую заливаю тоже самое.
Я даже не понимаю что искать.
Использую Cube+Keil5
Вопрос по HAL USB MASS STORAGE.
Сгенрил проект с freertos и MSC. Эмулирую файловую систему с с помощью библиотеки и программирую.
USB Mass Storage Device на STM32F4
Использую микроконтроллер STM32F407. Сделал в своем устройстве поддержку USB Mass Storage Device.
USB on stm32f107 + mass storage
Прошу помочь новичку. Задача-сделать хост на stm32f107, подключить к нему флэшку и определить, что.
USB mass storage class
Я пытаюсь сделать вот что - всунуть STM32f4 по USB в комп, что бы он работал как mass storage.
На плате с stm32f407zet6 согласно схеме стоит резистор от D+ к 3v3 1.5к, я посмотрел схему STM32F746G_DISCO, там нет такого резистора по цепям D+ FS. Плата не официальная(stm32f407zet6), может его там и не должно быть?
На плате с stm32f407zet6 согласно схеме стоит резистор от D+ к 3v3 1.5к, я посмотрел схему STM32F746G_DISCO, там нет такого резистора по цепям D+ FS. Плата не официальная(stm32f407zet6), может его там и не должно быть?
В очередной раз (по usb вопросам), не вдаваясь в вашу писанину напишу:
- устанавливаем USBPCap
- устанавливаем wireshark
Запускаем сниффер, вставляем вашу флешку. Собираем логи, смотрим - и сразу все станет понятно.
ЗЫ. если устройство не обнаружилось, то:
- битый дескрипток
- неверные реквесты на запросы при инициализации.
ЗЫ. если устройство не обнаружилось, то:
- битый дескрипток
- неверные реквесты на запросы при инициализации.
Даже звучит не логично, куб генерирует кривой код?
Нашел проблему, VBUS simsyk надо было выключить, почему то по умолчанию 3х пиновое подключение.
Вопрос по USB Mass storage на stm32f103
с помощью CubeMX прикрутил стандартную библиотеку к процессору. И собственно возник вопрос.
STM32 USB MASS STORAGE in FLASH memory
Привет! Есть программа, которая заставляет плату с МК STM32F103RET7 работать в режиме USB MASS.
stm32f407 + SPI MMC + usb mass storage
Прошу не ругать, за то что так часто создаю темы (вторая за 2 дня). К stm32f407 подключена карта.
STM32F1 Проблемы с USB Mass Storage Device
Здравствуйте. Имеется плата с контроллером STM32F103RET6, mini-usb разъёмом, и держателем для.
Раз у камня есть аппаратный USB, то грех им не пользоваться. Один из способов плюнуть байтом в компьютер и чтобы он при этом не очень обиделся — это организация виртуального COM-порта.
Все в железе пробовалось на камне STM32F103ZE, на аналогах тоже должно взлететь.
Забиваем.
Как я уже говорил, пока я сторонник библиотечных решений. Памяти хватает, байтовыцарапыванием заниматься рано. Так что пойдем по легкому пути.
Точные названия я привожу на случай если на сайте производителя будет какая-нибудь реорганизация и ссылки станут невалидными.
Не забываем дрова виртуального ком-порта. У меня вообще-то оно само все нашлось, но я много чего ставил от STM, может там в комплекте и пришлись.
Также нам пригодятся следующие стандарты
USB 2.0 Specification
USB CDC
В составе библиотеки есть пример как раз организации виртуального COM-порта. Правда там он сделан как мост USART-USB, но мы же не боимся трудностей?
Цель этой статьи — разобрать приложение, делающее следующее:
Поджигаем
Собираем проект из нужных нам библиотек: CMSIS, SPD, USB. Дерево проекта прилагаю.
Как обычно, самое интересное в папочке /src. Вот её-то и будем разбирать.
Неторопливо курим
Начнем с раскуривания библиотеки от STM
Эта библиотека предназначена и для connectivity-line устройств (это STM32F105/107), у них не просто USB FS, а USB OTG. Поскольку камней с OTG у меня пока нет, сконцентрируемся на простом USB FS.
В примере, который мы взяли за основу, есть куча дефайнов, как раз на случай отличить connectivity-line от других демоплат. Я эти дефайны повырезал, чтобы глаза не мозолили.
Cо всей картинки нас интересует High Layer — синенькие квадратики, которые и составляют, собственно, пользовательскую часть библиотеки. Их мы меняем под свои нужды, все остальное остается неизменным. Если заглянуть в папочку /src, то видно, что все эти файлики там и собраны.
Первая затяжка — usb_conf.h
Самые общие настройки библиотеки.
Указано сколько у нас будет endpoints (а нам их надо 4 штуки — нулевой для начального конфигурирования устройства, один для команд, один для приема и один для передачи).
Также расписаны, какие нам будут нужны коллбэки. Все взаимодействие библиотеки и пользовательской программы построено на обратных вызовах: в случае возникновения какого-либо события вызывается функция с заданным названием. А уже содержание этой функции — проблема разработчика.
Нам будет нужен SOF_CALLBACK – сигнал начала фрейма (Start Of Frame). По нему будем выплевывать то, что накопилось в буфере передачи.
Также резервируем еще два коллбэка — на прием и передачу. По приему символа будем мигать светодиодами, чтобы уж как-нибудь задействовать канал приема.
Упс, кончился файл. Короткая получилась затяжка.
Файл берем из примера, ничего не меняем.
Вторая затяжка — usb_desc.h / usb_desc.c
В этих файлах находятся дескрипторы устройства и эндпоинтов.
Информация по стандартным дескрипторам есть в стандарте USB, в разделе 9.6 Standard USB Descriptor Definitions
Специфические дескрипторы описаны в USB CDC, раздел 5 (так и называется Descriptors),
Эти все тонны текста в стандартах для того, чтобы USB стала действительно Universal. Поэтому тщательно выведена классификация устройств и интерфейсов — чтобы глянув на дескриптор хост сразу понял, что с этим делать.
Особо подробно разбирать смысла не вижу — это не характерно для STM32, это общая боль разработчиков USB устройств.
Файл берем из примеров, ничего не меняем.
Продолжение дескрипторов — usb_prop.h / usb_prop.c
В этих файлах описана таблица реакции на запросы. Все запросы к устройству пронумерованы и стандартизованы. В этих файлах определяется массивы функций Device_Property, User_Standard_Requests и просто массивы String_Descriptor, например. Это все используется ядром. Когда в устройство приходит определенный запрос, например «Выдай мне дескриптор устройства», то ядро посмотрит в таблице, какая функция обрабатывает этот запрос, вызовет эту функцию, а оно уже отработает:
Опять же, берем файл из примеров.
Прерываемся — usb_istr.h / usb_istr.c
Тоже два коротеньких файла. В них находится то, что надо вызывать при приходе прерывания от USB. Поскольку прерывание одно, то по значениям флагов определяется событие и вызывается соответствующий коллбэк.
Прерывание будет настраиваться в файле hw_config.c, обработчик выглядит очень просто:
void USB_LP_CAN1_RX0_IRQHandler(void)
USB_Istr();
>
его можно разместить в файлах stm32f10x_it.*, а в данном проекте, чтобы не растекаться мысью по древу, я его включил в файл main.c
И тут особо ничего не меняем, все как в примере.
Питание — usb_pwr.h / usb_pwr.c
Здесь все, что касается питания. По стандарту, устройство может быть переведено в режим спячки, тогда, если оно питается от порта, нужно позаботиться об отключении жрущей периферии. Поскольку у нас плата питается отдельно, то особого смысла в управлении питанием нет. Просто устройство формально переводится в состояние SUSPENDED.
Ничего не меняем, файл из примеров.
Коллбэки — usb_endp.c
Этот файл я переписал, поскольку у нас не будет работы с USART, как это было в примере. Приведу код с комментариями:
Работа с железом — hw_config.h / hw_config.c
В этом файле собраны функции инициализации периферии, прерываний, функции управления светодиодами и работы с буфером отправки.
USB-порт и подтяжки на моей плате сделаны по такой схеме:
И USB_EN заведен на пин PF11. Значит надо не забыть его проинициализировать и дернуть вовремя.
По сравнению с примером, выкинуты функции инициализации и работы с USART, добавлена функция мигания светодиодом.
По приему символов 'A', 'B', 'C', 'D' – зажигаются соответствующие светодиоды, 'a', 'b', 'c', 'd' – гасятся.
'1' и '0' — соответственно зажигают и гасят все светодиоды.
Ну и все, что будет передано функции USB_Send_Data() попадает в буфер, а затем и через USB – в комп.
Уфф. С USB вроде закончили.
Теперь в головной программе можно просто вызывать USB_Send_Data() и посимвольно передавать данные в комп.
Если мы на этом остановимся, то размер кода будет порядка 11 кБ:
Более двух килобайт bss – это буферы приема и передачи. Понятное дело, их можно уменьшить.
Выдыхаем — printf()
Но мы же хотим, чтобы вывод функции printf() перенаправлялся в наш свежесозданный COM-порт. Подключаем и офигеваем от количества ошибок линковки:
А тут все просто — стандартная библиотека ввода-вывода подразумевает работу с файлами, но в больших системах есть ОС, которая собственно и занимается организацией файлов для программ пользователя. А поскольку у нас нет никакой ОС, то библиотека вполне справедливо недоумевает «А что же мне делать-то?»
Вот, чтобы это обойти, в проект включается файл newlib_stubs.c
В нем находятся функции-заглушки ко всем вышеперечисленным ошибкам. Но и кроме этого, есть одна функция, которую нам и надо переписать, чтобы весь вывод шел в USB:
Видим, что как раз и вызывается наша функция USB_Send_Data()
Все, компилим, собираем, запускаем.
Архив с проектом прилагаю — это на случай, если кто не заметит маленькие буковки внизу :)
После того как я вдоволь наковырялся с STM32 и USB, решил что было бы неплохо поделитсья опытом с окружающими. Тем более, что все делалось аж под три разные платы и две разные линейки процессоров: High-Density (STM32F103RET6, STM32F103VET6) и Connectivity-Line (STM32F107VCT6).
Платы у меня в руках оказались следующие:
1) STM32 Development Board MINI (512K Flash 64K SRAM) 2.4-inch QVGA TFT module
(ссылка 1) (ссылка 2)
На ней стоит микроконтроллер STM32F103VET6
2) Embest EM-STM32C (EM-STM3210C)
(ссылка)
На ней стоит микроконтроллер STM32F107VCT6 — Connectivity Line
3) Встраиваемый модуль TE-STM32F103 — Махаон, от фирмы Terraelectronica.
(ссылка)
Соответственно, на ней стоит контроллер STM32F103RET6
Запустить проект из примеров, который использует USB, на любой из этих плат, задача не такая уж и сложная.
Куда сложнее встроить эти примеры в свои проекты, так как часто они бывают очень запутанно завязаны на конкретных платах. Еще сложнее собрать проект с нуля, используя библиотеки драйверов от STM — все равно без примеров обойтись сложно.
Поэтому я поставил перед собой задачу сделать универсальный проект, работающий со всеми имеющимися у меня в наличии платами, и, при необходимости, легко подстраиваемый под другие платы.
Между первой и третьей платой отличий мало: похожие контроллеры, отличающиеся лишь числом ног, у обоих выведен USART1. А вот второй отличается сильно: это контроллер Connectivity Line, с поддержкой USB On-The-Go, из-за чего работа с USB построена по-другому, а также вместо USART1 выведен USART2, да еще и с ремапом пинов на другие, отличные от дефолтных, ноги.
На всех платах есть светодиоды в разном количестве: 1, 4 и 3 соответственно.
Поэтому было принято решение сделать банальную вещь — устройтво, светодиоды которого управляются с компьютера по USB.
Прежде чем продолжать, рекомендую вкратце ознакомиться с тем, что же из себя представляет USB.
Самая лучшая, на мой взгляд, статья по этому вопросу — «USB in a NutShell». Ее перевод можно найти тут.
- Control. Endpoint такого типа, с номером 0, обязательно должен присутствовать в любом USB-устройстве.
- Interrupt. Название, в принципе, говорит само за себя. Более подробно читайте в статье.
- Isochronous. Гарантированные передачи через равные промежутки времени. Обычно используется для передачи аудио и видео.
- Bulk. Самый простой для реализации вариант. Применяется широко. Подробнее в статье. С ним мы и будем работать.
Проект для Keil
В результате некоторых ковыряний и копипасты с примеров, редактирования, кодинга и прочих мучений, получилось следующее:
USB_SampleSomeDevice_src.rar (зеркало 1)
Структура файлов такая же, как и во многих примерах:
\Libraries\ — папка с библиотеками (CMSIS, Standart Peripheral Driver, USB OTG Full speed Device Driver)
\Project\ — папка для проектов. Их может быть много и все они могут использовать одни и те же библиотеки. Но у нас проект один.
\Project\SampleSomeDevice\ — папка с проектом
\Project\SampleSomeDevice\Doc\ — краткие описания
\Project\SampleSomeDevice\driver\ — драйвер устройства для Windows (подробнее о драйверах и софте в ч.2, когда ее напишу)
\Project\SampleSomeDevice\inc\ — заголовки .h
\Project\SampleSomeDevice\src\ — файлы исходников .c
\Project\SampleSomeDevice\RVMDK\ — файлы проекта и выходные файлы
Распаковываем проект и открываем.
Смотрим на вкладку Project, видим там несколько групп:
User — Основные исходники проекта.
User_headers — Заголовочные файлы. Вынес в отдельную группу для быстрого и удобного доступа к ним.
USB-FS-Device_Driver — файлы библиотеки USB.
StdPeriph_Driver — файлы библиотеки стандарной периферии.
RVMDK — startup-файлы для каждой линейки контроллеров. Обратите внимание, что только один, соответствующий вашему контроллеру должен компилиться.
Doc — Краткие описания.
По умолчанию проект сконфигурирован под плату TE-STM32F103.
Конфигурируем проект
под другой контроллер и плату.
1) Надо знать название контроллера и его линейку. Поддерживаются практически все контроллеры 103 серии (кроме XL-density), а также 105 и 107 серия — Connectivity Line.
Даташиты, предварительно скачанные с сайта ST:
STM32F103x4x6.pdf (зеркало 1) — STM32 Low-density performance line (краткое обозначение LD)
STM32F103x8xB.pdf (зеркало 1) — STM32 Medium-density performance line (краткое обозначение MD)
STM32F103xCxDxE.pdf (зеркало 1) — STM32 High-density performance line (краткое обозначение HD)
STM32F105_F107.pdf (зеркало 1) — STM32 Connectivity line (краткое обозначение CL)
Все, что связано с линейкой контроллера, содержит в себе краткое обозначение.
Например, startup-файл для Medium-density performance line будет называться startup_stm32f10x_md.s
Или глобальный define для Connectivity line — STM32F10X_CL
В Keil правым кликом по Target заходим в опции, выбираем вкладку Device и ищем там свой контроллер.
Следующий шаг — выбираем используемый JTAG для прошивки и отладки.
Я использую TE-ARM-LINK, отечественный клон J-LINK.
Последний шаг в данном пункте — выбрать нужный startup-файл в группе RVMDK, соответствующий линейке контроллера, включить его в сборку проекта, отключив при этом все остальные:
Следующие пункты — настройка платы.
открываем файл platform_config.h, ищем кусок кода:
2) Узнаем куда выведен USART. Для общего развития полезно также знать, используется ли при этом ремап пинов. При включенном дефайне _DEBUG_ на него выводится различная информация, которая может быть полезна.
Открываем схему платы и смотрим. Предположим, выяснили, что выведен USART2, TX — PB5, RX — PB6.
Смотрим комментарии вначале файла platform_config.h:
Выбираем подходящий и заменяем в последнем дефайне. В данном случае это будет так:
USART сконфигурирован на скорость 115200, 8 бит, 1 стоп, No Parity.
4) Проверяем, есть ли на контроллере пин, отвечающий за программный коннект/дисконнект USB и где он расположен. Схема может выглядеть так:
Если пина нету, просто удаляем дефайны, отвечающие за него.
Вот, в принципе и все. Осталось залить прошивку в контроллер. Если есть JTAG — это не проблема.
Если оного нету, не все потеряно:
USB_DfuSe.part1.rar (зеркало 1) — Софт для прошивки STM32 Connectivity line по USB. Часть 1
USB_DfuSe.part2.rar (зеркало 1) — Часть 2
COM_FlashLoader.zip (зеркало 1) — Софт для прошивки STM32 (103 серия) по UART
Не забудьте перед прошивкой этим способом перевести девайс в DFU-Mode, корректно выставив джамперы BOOT0 — BOOT1.
О софте и драйверах я напишу в другой раз, однако уже можно скачать программу, которая общается с любым количеством подключенных девайсов с данной прошивкой:
Ковыряемся в проекте
Поскольку каждую строчку кода расписывать долго, да и исходники полны в том числе и моих комментариев, приведу здесь список основных файлов проекта и их назначение.
User:
— main.c — очевидно.
— hw_config.c — конфигурация контроллера (периферия, прерывания, клоки и так далее)
— stm32f10x_it.c — обработчики прерываний
— usb_. c — конфигурация и работа USB посредством драйвера.
— user_usb.c — пользовательская работа с USB — разбор пакетов с данными и обработка команд.
— led.c — работа со светодиодами. Включение, выключение, непрерывное мигание.
User_headers:
— platform_config.h — конфигурация платы.
Для более удобного поиска я добавил в код комментарии следующего вида:
Проект собран так, что USB-устройство, помимо нулевой контрольной, содержит 4 оконечных точки типа bulk, попарно на прием и передачу.
В проекте используются первые две, по которым при помощи несложного протокола передаются команды управления светодиодами на плате.
Краткое описание протокола можно найти в Doc\protocol.txt
И что дальше?
Ну а дальше — куда приведет фантазия. Ковырять USB рекомендую начинать с файла дескрипторов usb_desc.c, потом поиграться с ендпоинтами.
Если есть желание — можно попробовать реализовать один из стандартных классов USB-устройств, или не париться и сделать свой протокол под свои задачи.
На этом пока все. Если эта статья покажется кому-то интересной и полезной, во второй части немного напишу о драйверах и софте.
Файлы, используемые в статье собраны тут
P.S.: Хоть это и первый блин, конструктивная критика, естественно, принимается.
Вы публикуете как гость. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.
1 Answer 1
One of typical mistakes in bus-powered USB devices is mismanagement of pull-up resistor. Your description says: " 1.5k pullup to 3.3", which means that the USB connect event (DP pullup) will be seen immediately upon plug in. So the host will start enumeration process in 100ms. Yet your MCU will take some time to boot, so it won't be ready with proper responses, and host inquiries will fail. By the time your MCU is ready to communicate, the host will declare the port as dead, and display error. When a demo board gets powered externally before connecting to USB host and is already up and running, the connection is fine.
To avoid this mishap, all reputable STM demo boards have the pull-up resistor controlled from GPIO pin, typically PB2 or PD2. Then the pull-up is set by code only when the USB stack is ready to respond.
The connection of ID pin on Micro-B receptacle on the USB device side is inconsequential, it is meant for USB OTG host, not for a plain device.
\$\begingroup\$ Thanks for answer - I really appreciate it. Now I will have some clues to finally get this working. One more comment from my side - on a board on which USB CDC is working (same MCU) usb is done in same fashion only PU no HW PU control same code runs without problems (same clock). Anyway I will try few options and inform about outcome. \$\endgroup\$
Последние посетители 0 пользователей онлайн
В сети есть православный P-CAD Viewer, который может открывать и распечатывать файлы пикада. По крайней мере, можно распечатать рисунок на бумагу и примерить свои детальки.
Так, кроме падения на самой микросхеме, есть ещё и 1,25 Вольта на токозадающем резисторе. Можно, наверное, попробовать стабилизаторы серии LowDrop. Но удовольствие относительно дорогое, а "бесплатные" с разбора материнок - маломощные, как правило.
По исходному условию нужна не супеточность поддержания тока, а нижний порог напряжения. 3 Вольта уже маловато многовато будет для одной банки лития, да и то, сомнительно.
Вот не понимаю я к чему эти сложности. Тоже делал самодельный тестер, нагрузка стабилизатор тока на lm317. Все го то две детали lm и резистор, работает до 3 В точно.
Либо два зеленых - к соседним двум, а два других соседних выхода к другому диоду (тоже зеленому). Сдвиг по месту расположения зеленого диода будет имитировать работу счетчика времени - половину зеленого. Чтобы водители или пешеходы понимали, что зеленый скоро выключится. И не пытались проскочить по желтому.))) Либо один диод на каждую пару (к выходам диодов) через балансные резисторы с анода светодиода не меньше (0,3-1 ком.) А еще лучше всего поменять диоды, которые ярко будут работать и при 5 кОм балансных резисторах (прозрачные с линзой). Если это не поможет, значит пробой в развязывающих (черных) диодах. Их надо прозвонить и заменить неисправный.
Want to improve this question? Add details and clarify the problem by editing this post.
Closed 4 years ago .
I face a problem with making custom PCB with STM32F103C8T6 FS CDC but whole story looked like this.
- I've made small test app using CubeMX and IAR on cheap PC from china with same MCU - in terminal on windows I was able to receive data. BTW I used 8MHz XTAL, 1k5 pull up to 3.3 on DP line no serial resistors.
- On custom board same code (which I can download to MCU without any problem) and I'm getting Unknown Device in HW Manager on win7.
Same MCU same application and clocks and two different behaviors - what I'm doing wrong?
\$\begingroup\$ I bet - probably the cheap board forces the enumeration which you do not and you are not ready to send the descriptors. It is a very common problem. \$\endgroup\$
\$\begingroup\$ Hello, thanks for attention. I will try to post schematics and PCB layout in the evening. Only difference I can find so far is that on China board there is a Micro USB connector with ID pin solder to GND and on my board I use USB_B without that pin and I'm powering board from USB. Can that change cause this effect? \$\endgroup\$
\$\begingroup\$ Common sources for this error: USB lines D+ and D- swapped, MCU clock or pin configuration incorrect. The error code 43 basically states that there is no USB communication besides the pullup on a data line. \$\endgroup\$
Последние посетители 0 пользователей онлайн
В сети есть православный P-CAD Viewer, который может открывать и распечатывать файлы пикада. По крайней мере, можно распечатать рисунок на бумагу и примерить свои детальки.
Так, кроме падения на самой микросхеме, есть ещё и 1,25 Вольта на токозадающем резисторе. Можно, наверное, попробовать стабилизаторы серии LowDrop. Но удовольствие относительно дорогое, а "бесплатные" с разбора материнок - маломощные, как правило.
По исходному условию нужна не супеточность поддержания тока, а нижний порог напряжения. 3 Вольта уже маловато многовато будет для одной банки лития, да и то, сомнительно.
Вот не понимаю я к чему эти сложности. Тоже делал самодельный тестер, нагрузка стабилизатор тока на lm317. Все го то две детали lm и резистор, работает до 3 В точно.
Либо два зеленых - к соседним двум, а два других соседних выхода к другому диоду (тоже зеленому). Сдвиг по месту расположения зеленого диода будет имитировать работу счетчика времени - половину зеленого. Чтобы водители или пешеходы понимали, что зеленый скоро выключится. И не пытались проскочить по желтому.))) Либо один диод на каждую пару (к выходам диодов) через балансные резисторы с анода светодиода не меньше (0,3-1 ком.) А еще лучше всего поменять диоды, которые ярко будут работать и при 5 кОм балансных резисторах (прозрачные с линзой). Если это не поможет, значит пробой в развязывающих (черных) диодах. Их надо прозвонить и заменить неисправный.
Want to improve this question? Add details and clarify the problem by editing this post.
Closed 4 years ago .
I face a problem with making custom PCB with STM32F103C8T6 FS CDC but whole story looked like this.
- I've made small test app using CubeMX and IAR on cheap PC from china with same MCU - in terminal on windows I was able to receive data. BTW I used 8MHz XTAL, 1k5 pull up to 3.3 on DP line no serial resistors.
- On custom board same code (which I can download to MCU without any problem) and I'm getting Unknown Device in HW Manager on win7.
Same MCU same application and clocks and two different behaviors - what I'm doing wrong?
\$\begingroup\$ I bet - probably the cheap board forces the enumeration which you do not and you are not ready to send the descriptors. It is a very common problem. \$\endgroup\$
\$\begingroup\$ Hello, thanks for attention. I will try to post schematics and PCB layout in the evening. Only difference I can find so far is that on China board there is a Micro USB connector with ID pin solder to GND and on my board I use USB_B without that pin and I'm powering board from USB. Can that change cause this effect? \$\endgroup\$
\$\begingroup\$ Common sources for this error: USB lines D+ and D- swapped, MCU clock or pin configuration incorrect. The error code 43 basically states that there is no USB communication besides the pullup on a data line. \$\endgroup\$
Читайте также: