Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: USB на STM32F105VC
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > ARM, 32bit
Still Enemy
Проблема такая. Создана ПЛИС на база МК stm32f105, в stm32cube сгенерирован код для device only usb CDC. Как я и думал, после прошивки(отдельно распаянный J-TAG) ничего не заработало. Смотрел осциллографом на дифференциальные выходы возле распайки разъема USB, никаких сигналов(по идее на PA12 должно быть 3.3~3.8В). Как пример есть платка STM32VlDiscovery: там на D+ 3.3В.
Инженеры изготовившие платку говорят, что сопротивление на D+ подтянуто как надо. Я смотрел по схеме VBUS отсутствует.
Я заранее извиняюсь за свою глупость, я не схемотехник, я программист, схемы читаю со словарём и с знающим инженером, да и вообще мк программирую впервые. И понимаю, что на форуме прорицателей нет. Но Вопрос такой: в чём может быть дело? куда копать? нужен ли VBUS(плата самозапитывающаяся)? может я конешно грешу на схемарей, может в библиотеках stm чего не так. какие-нибудь советы попрошу озвучить у мудрой аудитории этого форума.
Still Enemy
Доп. информация:
Взял электрическую схему. Оказалось всё немного сложнее.



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

Извиняюсь, за повтор. Изображения не прогрузились, а редактировать не даёт.
1.
2.
3.
Сергей Борщ
Картинку вижу только одну, криминала на ней не видно.

Встроенный резистор подтяжки в STM32F105 есть. Он упоминается в разделе 28.5.2 руководства пользователя:
Цитата
Powered state
The VBUS input detects the B-Session valid voltage by which the USB peripheral is allowed
to enter the powered state (see USB2.0 par9.1). The OTG_FS then automatically connects
the DP pull-up resistor to signal full-speed device connection to the host and generates the
session request interrupt (SRQINT bit in OTG_FS_GINTSTS) to notify the powered state.
...
Soft disconnect
The powered state can be exited by software with the soft disconnect feature. The DP pullup
resistor is removed by setting the soft disconnect bit in the device control register (SDIS
bit in OTG_FS_DCTL), causing a device disconnect detection interrupt on the host side
even though the USB cable was not really removed from the host port.
Still Enemy
Цитата
Картинку вижу только одну, криминала на ней не видно.

Извиняюсь, сразу не уточнил. Все 3 части - это одна схема, но 2 часть начисто выброшена(типо "за ненадобностью") в уже реализованной ПЛИС, и D- идёт на DM, а D+ на DP.

Я так понимаю, что схема вполне рабочая. Хорошо буду читать RM0008.
Тогда такой вопрос: VBUS в device mode вообще нужен? если нужен, то для чего?
diwil
Vbus нужен чтобы автоматически подтянуть DP и сгенерировать прерывание. По прерыванию будет сгенерен запрос конфигурации.
Это нужно делать в F1XX.
Still Enemy
Всем спасибо, на данный момент ясность пришла ко мне)
Still Enemy
Рано обрадовался. Устройство не определяется.

Я так понял по раскопкам в пункте Свойства->Сведения не назначен Vid и Pid устройству, хотя в коде формировался дескриптор устройства со всеми pid, vid.
Не знаю что и делать уже.
aaarrr
Скорее всего, хост "почуял" резистор на D+ и только. То есть устройство не ответило на запрос дескрипторов. Если Вы заливаете заведомо рабочую прошивку, я бы советовал еще раз проверить соблюдение полярности D+/D- и соответствие номинала кварца.
kan35
Если не знаете что еще и делать, то подскажу. Есть еще swd дебаггер, который часто помогает понять в чем дело...
Ну и в кубе надо верно выстроить систему тактирования, чтобы на USB подавалась кварцованные 48МГц, ядро и шины чтобы работали на скорости не менее 24МГц. Если соблюсти эти простые формальности, то USB CDC device стартует как часы, не сомневайтесь в кубе.
Still Enemy
Цитата(kan35 @ Feb 28 2015, 19:26) *
Если не знаете что еще и делать, то подскажу. Есть еще swd дебаггер, который часто помогает понять в чем дело...
Ну и в кубе надо верно выстроить систему тактирования, чтобы на USB подавалась кварцованные 48МГц, ядро и шины чтобы работали на скорости не менее 24МГц. Если соблюсти эти простые формальности, то USB CDC device стартует как часы, не сомневайтесь в кубе.

Ну я шьюсь через SWD интерфейс J-Link-ARM. Дело в том, что я прогонял в дебаге код сгенерированный в Кубе. Нашел пару ошибок(возможно и не ошибки, а просто костыли-среди них есть такое действие, как запись числа в поле reserved). Тактирование в Кубе выставлено правильно, конешно я код не проверял на наличие ошибок по этой теме, но USB тактируется, иначе бы оно не определилось совсем. В подтверждение сего могу сказать одно: был не рабочий кварц сначала запаян и через Куб сгерен код-естественно ничего не определилось, а после перепайки, устройство определилось как неизвестное.
Попробую весь код прошерстить, возможно поможет.

Цитата(aaarrr @ Feb 28 2015, 01:25) *
Скорее всего, хост "почуял" резистор на D+ и только. То есть устройство не ответило на запрос дескрипторов. Если Вы заливаете заведомо рабочую прошивку, я бы советовал еще раз проверить соблюдение полярности D+/D- и соответствие номинала кварца.

На самом деле, прошивка вероятнее всего рабочая, по крайней мере, я ничего не изменял в сгенерированном коде из Куба и у многих она пашет. У меня пока ниразу не заработала.
С кварцем мне кажется, всё норм. А можно поподробней, в паре предложений разъяснить, как это проверить соблюдение полярности D+/D-?
Сергей Борщ
Цитата(Still Enemy @ Mar 2 2015, 11:59) *
а после перепайки, устройство определилось как неизвестное.
Для этого достаточно, чтобы код на любой частоте доковылял до включения подтяжки. Когда кварца не было он просто циклился в ожидании готовности кварца. Так что частоту проверить стоить - вывести на MCO и посмотреть осциллографом/частотомером. Если совсем тяжко с приборами - вывести строку в УАПП и попытаться ее принять на компе, хотя бы о попадании в +-5% можно будет быть уверенным.

Цитата(Still Enemy @ Mar 2 2015, 11:59) *
как это проверить соблюдение полярности D+/D-?
Видимо имелось ввиду "убедиться, что эти провода не перепутаны".
Still Enemy
Я не знаю как, но всё решилось само собой. И это достаточно печально, потому как он вдруг может заглохнуть в нужный момент без причины.
Хотя возник другой вопрос. Устройство определяется в виде двух портов, причём второе с ошибкой висит:


Разница в устройствах заключается в разных строчках в пункте Свойства->Сведения->Ид оборудования.
У первого: USB\VID_0483&PID_5740&REV_0200&MI_00
У второго: USB\VID_0483&PID_5740&REV_0200&MI_01
Так и должно быть? И что это может означать? Есть смысл с этим бороться или оставить так как есть?
Still Enemy
Кому интересно, последняя загвоздка решилась скачиванием с st.com архива stsw-stm32102 с дровами для VCP.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.