реклама на сайте
подробности

 
 
> USB на STM32F105VC, Нет отклика
Still Enemy
сообщение Feb 26 2015, 19:36
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 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 чего не так. какие-нибудь советы попрошу озвучить у мудрой аудитории этого форума.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 12)
Still Enemy
сообщение Feb 27 2015, 06:39
Сообщение #2


Участник
*

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



Доп. информация:
Взял электрическую схему. Оказалось всё немного сложнее.



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

Извиняюсь, за повтор. Изображения не прогрузились, а редактировать не даёт.
1.
2.
3.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Feb 27 2015, 08:24
Сообщение #3


Гуру
******

Группа: Модераторы
Сообщений: 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)
Go to the top of the page
 
+Quote Post
Still Enemy
сообщение Feb 27 2015, 08:40
Сообщение #4


Участник
*

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



Цитата
Картинку вижу только одну, криминала на ней не видно.

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

Я так понимаю, что схема вполне рабочая. Хорошо буду читать RM0008.
Тогда такой вопрос: VBUS в device mode вообще нужен? если нужен, то для чего?
Go to the top of the page
 
+Quote Post
diwil
сообщение Feb 27 2015, 09:03
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 366
Регистрация: 5-09-06
Из: Санкт-Петербург
Пользователь №: 20 107



Vbus нужен чтобы автоматически подтянуть DP и сгенерировать прерывание. По прерыванию будет сгенерен запрос конфигурации.
Это нужно делать в F1XX.
Go to the top of the page
 
+Quote Post
Still Enemy
сообщение Feb 27 2015, 10:33
Сообщение #6


Участник
*

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



Всем спасибо, на данный момент ясность пришла ко мне)
Go to the top of the page
 
+Quote Post
Still Enemy
сообщение Feb 27 2015, 21:40
Сообщение #7


Участник
*

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



Рано обрадовался. Устройство не определяется.

Я так понял по раскопкам в пункте Свойства->Сведения не назначен Vid и Pid устройству, хотя в коде формировался дескриптор устройства со всеми pid, vid.
Не знаю что и делать уже.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Feb 27 2015, 22:25
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Скорее всего, хост "почуял" резистор на D+ и только. То есть устройство не ответило на запрос дескрипторов. Если Вы заливаете заведомо рабочую прошивку, я бы советовал еще раз проверить соблюдение полярности D+/D- и соответствие номинала кварца.
Go to the top of the page
 
+Quote Post
kan35
сообщение Feb 28 2015, 16:26
Сообщение #9


Знающий
****

Группа: Участник
Сообщений: 537
Регистрация: 22-02-06
Пользователь №: 14 594



Если не знаете что еще и делать, то подскажу. Есть еще swd дебаггер, который часто помогает понять в чем дело...
Ну и в кубе надо верно выстроить систему тактирования, чтобы на USB подавалась кварцованные 48МГц, ядро и шины чтобы работали на скорости не менее 24МГц. Если соблюсти эти простые формальности, то USB CDC device стартует как часы, не сомневайтесь в кубе.
Go to the top of the page
 
+Quote Post
Still Enemy
сообщение Mar 2 2015, 09:59
Сообщение #10


Участник
*

Группа: Участник
Сообщений: 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-?
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Mar 2 2015, 10:29
Сообщение #11


Гуру
******

Группа: Модераторы
Сообщений: 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)
Go to the top of the page
 
+Quote Post
Still Enemy
сообщение Mar 3 2015, 07:51
Сообщение #12


Участник
*

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



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


Разница в устройствах заключается в разных строчках в пункте Свойства->Сведения->Ид оборудования.
У первого: USB\VID_0483&PID_5740&REV_0200&MI_00
У второго: USB\VID_0483&PID_5740&REV_0200&MI_01
Так и должно быть? И что это может означать? Есть смысл с этим бороться или оставить так как есть?
Go to the top of the page
 
+Quote Post
Still Enemy
сообщение Mar 12 2015, 07:41
Сообщение #13


Участник
*

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



Кому интересно, последняя загвоздка решилась скачиванием с st.com архива stsw-stm32102 с дровами для VCP.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 10:40
Рейтинг@Mail.ru


Страница сгенерированна за 0.01786 секунд с 7
ELECTRONIX ©2004-2016