|
USB на STM32F105VC, Нет отклика |
|
|
|
Feb 26 2015, 19:36
|
Участник

Группа: Участник
Сообщений: 66
Регистрация: 29-01-15
Из: Нижний Новгород
Пользователь №: 84 817

|
Проблема такая. Создана ПЛИС на база МК stm32f105, в stm32cube сгенерирован код для device only usb CDC. Как я и думал, после прошивки(отдельно распаянный J-TAG) ничего не заработало. Смотрел осциллографом на дифференциальные выходы возле распайки разъема USB, никаких сигналов(по идее на PA12 должно быть 3.3~3.8В). Как пример есть платка STM32VlDiscovery: там на D+ 3.3В. Инженеры изготовившие платку говорят, что сопротивление на D+ подтянуто как надо. Я смотрел по схеме VBUS отсутствует. Я заранее извиняюсь за свою глупость, я не схемотехник, я программист, схемы читаю со словарём и с знающим инженером, да и вообще мк программирую впервые. И понимаю, что на форуме прорицателей нет. Но Вопрос такой: в чём может быть дело? куда копать? нужен ли VBUS(плата самозапитывающаяся)? может я конешно грешу на схемарей, может в библиотеках stm чего не так. какие-нибудь советы попрошу озвучить у мудрой аудитории этого форума.
|
|
|
|
|
 |
Ответов
(1 - 12)
|
Feb 27 2015, 06:39
|
Участник

Группа: Участник
Сообщений: 66
Регистрация: 29-01-15
Из: Нижний Новгород
Пользователь №: 84 817

|
Доп. информация: Взял электрическую схему. Оказалось всё немного сложнее.    На первой картинке пины stm32f105. На второй, как должны были сделать разводку USB. На третьей, как сделали... В итоге, мне говорят, что у stm32f105 есть внутренняя подтяжка и её можно программно запустить. Есть ли она, как её программно запустить, я хз... И схема меня слегка напрягает, даже мне-программисту кажется, что так дела не делаются... Извиняюсь, за повтор. Изображения не прогрузились, а редактировать не даёт. 1.  2.  3.
|
|
|
|
|
Feb 27 2015, 08:24
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Картинку вижу только одну, криминала на ней не видно. Встроенный резистор подтяжки в 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.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Feb 27 2015, 08:40
|
Участник

Группа: Участник
Сообщений: 66
Регистрация: 29-01-15
Из: Нижний Новгород
Пользователь №: 84 817

|
Цитата Картинку вижу только одну, криминала на ней не видно. Извиняюсь, сразу не уточнил. Все 3 части - это одна схема, но 2 часть начисто выброшена(типо "за ненадобностью") в уже реализованной ПЛИС, и D- идёт на DM, а D+ на DP. Я так понимаю, что схема вполне рабочая. Хорошо буду читать RM0008. Тогда такой вопрос: VBUS в device mode вообще нужен? если нужен, то для чего?
|
|
|
|
|
Feb 27 2015, 10:33
|
Участник

Группа: Участник
Сообщений: 66
Регистрация: 29-01-15
Из: Нижний Новгород
Пользователь №: 84 817

|
Всем спасибо, на данный момент ясность пришла ко мне)
|
|
|
|
|
Feb 27 2015, 21:40
|
Участник

Группа: Участник
Сообщений: 66
Регистрация: 29-01-15
Из: Нижний Новгород
Пользователь №: 84 817

|
Рано обрадовался. Устройство не определяется.  Я так понял по раскопкам в пункте Свойства->Сведения не назначен Vid и Pid устройству, хотя в коде формировался дескриптор устройства со всеми pid, vid. Не знаю что и делать уже.
|
|
|
|
|
Mar 2 2015, 09:59
|
Участник

Группа: Участник
Сообщений: 66
Регистрация: 29-01-15
Из: Нижний Новгород
Пользователь №: 84 817

|
Цитата(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-?
|
|
|
|
|
Mar 2 2015, 10:29
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Цитата(Still Enemy @ Mar 2 2015, 11:59)  а после перепайки, устройство определилось как неизвестное. Для этого достаточно, чтобы код на любой частоте доковылял до включения подтяжки. Когда кварца не было он просто циклился в ожидании готовности кварца. Так что частоту проверить стоить - вывести на MCO и посмотреть осциллографом/частотомером. Если совсем тяжко с приборами - вывести строку в УАПП и попытаться ее принять на компе, хотя бы о попадании в +-5% можно будет быть уверенным. Цитата(Still Enemy @ Mar 2 2015, 11:59)  как это проверить соблюдение полярности D+/D-? Видимо имелось ввиду "убедиться, что эти провода не перепутаны".
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Mar 3 2015, 07:51
|
Участник

Группа: Участник
Сообщений: 66
Регистрация: 29-01-15
Из: Нижний Новгород
Пользователь №: 84 817

|
Я не знаю как, но всё решилось само собой. И это достаточно печально, потому как он вдруг может заглохнуть в нужный момент без причины. Хотя возник другой вопрос. Устройство определяется в виде двух портов, причём второе с ошибкой висит:   Разница в устройствах заключается в разных строчках в пункте Свойства->Сведения->Ид оборудования. У первого: USB\VID_0483&PID_5740&REV_0200&MI_00 У второго: USB\VID_0483&PID_5740&REV_0200&MI_01 Так и должно быть? И что это может означать? Есть смысл с этим бороться или оставить так как есть?
|
|
|
|
|
Mar 12 2015, 07:41
|
Участник

Группа: Участник
Сообщений: 66
Регистрация: 29-01-15
Из: Нижний Новгород
Пользователь №: 84 817

|
Кому интересно, последняя загвоздка решилась скачиванием с st.com архива stsw-stm32102 с дровами для VCP.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|