Jump to content

    

USB VCP не отправляются данные

Доброго времени суток.

 

Столкнулся с проблемой, USB VCP не отправляются данные через EP1. СОМ порт определяется м открывается, данные принимаются, но не отправляется. МК STM32F103, тактирование от HSI. Библиотека USB_FS_Device_Lib_v4_10.

Буфера и счётчики проверял.

Код для отправки:

UserToPMABufferCopy(data, GetEPTxAddr(ENDP1), len);

SetEPTxCount(ENDP1, len);

SetEPTxValid(ENDP1);

 

Приложил скрины дескриптора и обмена.

Подскажите, где искать ошибку?

 

обмен.png

Descriptors1.png

Descriptors2.png

Descriptors3.png

Descriptors4.png

Share this post


Link to post
Share on other sites

1. Да будь оно проклято! Потратил 15 мин на разглядывание дескрипторов так ничего и не рассмотрел. Что за неуважение такое?

2. У F103 тактировать USB от кварца надо. В данном случае проблема не в этом, но оно себя проявит обязательно.

3. Конкретно в приведённых трёх строчках ошибок нет. 

4. Я бы смотрел на статусные регистры конечной точки EP1.

Share this post


Link to post
Share on other sites
9 часов назад, Rash сказал:

Приложил скрины дескриптора и обмена

А почему не видео? 

Share this post


Link to post
Share on other sites
12 hours ago, VladislavS said:

1. Да будь оно проклято! Потратил 15 мин на разглядывание дескрипторов так ничего и не рассмотрел. Что за неуважение такое?

2. У F103 тактировать USB от кварца надо. В данном случае проблема не в этом, но оно себя проявит обязательно.

3. Конкретно в приведённых трёх строчках ошибок нет. 

4. Я бы смотрел на статусные регистры конечной точки EP1.

Наверное движок форума сжал картинку, изменил в первом сообщение, скрины дескриптора

В статусных регистрах не заметил противоречий с документацией. Скрины:

регистры после открытия порта:

148517779_.png.ec2265c1b71148b6425a388cb91d6464.png

регистры после приёма и передачи данных:

656653357_.png.3bfa1d180658b467538ccc4f00aa62a5.png

 

9 hours ago, Сергей Борщ said:

А почему не видео? 

А к чему вопрос?

Share this post


Link to post
Share on other sites

VladislavSПросмотрел, дескриптор. От моего отличается не значительными полями и тем, что для приёма используется IP1, а у меня EP3. Пробовал и раньше и сейчас EP1 на приём, результат тот же - приём есть, а передачи нет. Также, в вашем дескрипторе есть массив Device_Qualifier[], у меня его нет. Вряд ли это проблема. Когда запускал USB на 105 и 4хх, там я не помню такого массива, но USB работал без проблем, для целей бутлоадера и запись/чтение настроек.

 

Кто нибудь знает, должно быть так, как на картинке дескриптора - см. строки URB 27 - 38? Программа USBlyzer. Если не должно быть, то какие могут быть причины?

см. строки unsuccesful.png

Share this post


Link to post
Share on other sites

Что-то много конечных точек. EP0-Control, EP1-Bulk данные туда-обратно, EP2-Interrupt. И всё же от кварца тактировать надо.

Share this post


Link to post
Share on other sites

Конечных точек 4.   EP0-Control, EP1-Bulk данные обратно, EP2-Interrupt, EP3-Bulk данные туда. Делал и 3 контрольные точки, когда EP1-Bulk данные туда-обратно, разницы ни какой.

От внешнего кварца через день попробую, будет на руках плата. Хотя сомневаюсь что в этом дело.

Смотрел лог на другой своей плате, где 105 установлен, но с внешним кварцем. Там "красных строк" в логе  нет, как в скрине в предыдущем сообщении.

Логическим анализатором смотреть проблематично, т.к. пакеты SOF идут каждую 1 мсек.

Но разница с рабочим 105 есть: В рабочей плате между двумя SOF куча запросов IN1, каждые 4.5 мксек, в течении 0.91 мсек, и пауза ~80 мксек.

В некорректно рабочей 103: После SOF идёт один запрос IN2 и один запрос IN1, потом на 0.98 мсек пауза. Хотя прерывание IN1 не срабатывает, в точку останова не попажает.

 

 

 

Share this post


Link to post
Share on other sites

К сожалению, способов отладки через форум я не знаю.

Share this post


Link to post
Share on other sites

Возможно, будет кому-то полезно.

VCP заработал, только пришлось заменить контроллер. Был STM32F103С6 ревизия A, поменял на STM32F103С8 ревизия X и всё заработало.

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

Тактирование осталось от внутреннего кварца.

Share this post


Link to post
Share on other sites
37 minutes ago, Rash said:

Тактирование осталось от внутреннего кварца.

А не смущает, что так на F103 делать в принципе нельзя?

Share this post


Link to post
Share on other sites

Хорошо хоть не от внутреннего рубидиевого стандарта..

Share this post


Link to post
Share on other sites
8 hours ago, aaarrr said:

А не смущает, что так на F103 делать в принципе нельзя?

Покажите, где об этом написано?

То, что для usb нужно точная частота тактирования это понятно. Но даташит не запрещает использовать HSI.

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

2 hours ago, VladislavS said:

Хорошо хоть не от внутреннего рубидиевого стандарта..

Это к чему?

Share this post


Link to post
Share on other sites
21 minutes ago, Rash said:

Но даташит не запрещает использовать HSI

Прямо запрещает:

For the USB function to be available, both HSE and PLL must be enabled, with USBCLK running at 48MHz

Share this post


Link to post
Share on other sites
3 часа назад, Rash сказал:

Это к чему?

Это к внутреннему кварцу. HSI является обычным RC-генератором со всеми зависимостями от напряжения питания, температуры, косых взглядов и прочего. Кварца там нет.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now