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

 
 
 
Reply to this topicStart new topic
> USB HID в STM32L052 работает через раз, USB HID HAL
digital
сообщение Dec 16 2015, 11:00
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 229
Регистрация: 3-02-06
Из: Санкт-Петербург
Пользователь №: 13 974



USB HID стек это HAL библиотека от Cube


По какой то причине USB HID в STM32L052 работает мягко говоря ненадежно, на одних машине работает безупречно, на других либо через раз, либо вообще не работает,
не работает это не проходи инициализация и устройство не определяется в ОС, в стеке не вызывается callback функция CUSTOM_HID_Init_FS, а аппаратно USB выдает прерывания об ошибки (и не только их)

от ОС (ubuntu win7 win XP не зависит), есть где безупречно работает и на linux и на win, есть где глючит и на linux и на win

это совсем негодный стек или что ?

лог
CODE

RESET
ESOF
ESOF
SUSP
ESOF
WKUP
RESET
CTR
SOF
DIR
ERR
CTR
DIR
ERR
ERR
CTR
DIR
RESET
CTR
SOF
DIR
ERR
SOF
ERR
ERR
CTR
DIR
CTR
DIR
RESET
SOF
ESOF
RESET
CTR
SOF
DIR
CTR
DIR
CTR
DIR
ERR
RESET
CTR
SOF
DIR
CTR
DIR
ERR
CTR
DIR
RESET
SOF
ESOF
RESET
CTR
SOF
DIR
ERR
SOF
ERR
CTR
SOF
DIR
CTR
DIR
SOF
ESOF
RESET
CTR
SOF
DIR
CTR
SOF
DIR
ERR
CTR
SOF
DIR
CTR
DIR
ERR
ERR
SOF
ESOF
ESOF
SUSP
ESOF



описание тегов
CODE

temp=hpcd->Instance->ISTR;

if (temp&USB_ISTR_CTR )printf("CTR\n"); //Correct TRansfer
if (temp&USB_ISTR_PMAOVR )printf("PMAOVR\n");// DMA OVeRunderrun
if (temp&USB_ISTR_ERR )printf("ERR\n"); // ERRor
if (temp&USB_ISTR_WKUP )printf("WKUP\n"); // WaKe UP
if (temp&USB_ISTR_SUSP )printf("SUSP\n"); // SUSPend
if (temp&USB_ISTR_RESET )printf("RESET\n"); // RESET
if (temp&USB_ISTR_SOF )printf("SOF\n"); // Start Of Frame
if (temp&USB_ISTR_ESOF )printf("ESOF\n"); // Expected Start Of Frame
if (temp&USB_ISTR_L1REQ )printf("L1REQ\n"); // LPM L1 state request
if (temp&USB_ISTR_DIR )printf("DIR\n"); // DIRection of transaction
if (temp&USB_ISTR_EP_ID )printf("EP_ID\n"); // EndPoint IDentifier
Go to the top of the page
 
+Quote Post
Kabdim
сообщение Dec 16 2015, 12:34
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 558
Регистрация: 26-11-14
Из: Зеленоград
Пользователь №: 83 842



А разводка какая, демоплата или собственная?
Go to the top of the page
 
+Quote Post
Integro
сообщение Dec 16 2015, 13:50
Сообщение #3


Частый гость
**

Группа: Свой
Сообщений: 167
Регистрация: 25-12-09
Из: Минск
Пользователь №: 54 460



Имел подобную проблему на stm32f042, вылечил ее дёрганьем встроенного PULLUP резистора. Но у меня была возможность за детектировать USB_5V!
При обнаружении 5V реинитил всю USB соre HAL'овскими функциями, но это результата не дало. Добавил сброс бита для PULLUP в _MSP_Init, полет нормальный.
Go to the top of the page
 
+Quote Post
digital
сообщение Dec 17 2015, 09:38
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 229
Регистрация: 3-02-06
Из: Санкт-Петербург
Пользователь №: 13 974



Цитата(Kabdim @ Dec 16 2015, 15:34) *
А разводка какая, демоплата или собственная?


своя плата, демок на stm32l052 с подключенным USB вроде нет

питание от USB через LDO 3.3В, VDD_USB подключено к 3.3В
линии D+ D- подключены через защиту TPD2S017, также были R и С которые убрал

Цитата(Integro @ Dec 16 2015, 16:50) *
Имел подобную проблему на stm32f042, вылечил ее дёрганьем встроенного PULLUP резистора. Но у меня была возможность за детектировать USB_5V!
При обнаружении 5V реинитил всю USB соre HAL'овскими функциями, но это результата не дало. Добавил сброс бита для PULLUP в _MSP_Init, полет нормальный.


не очень понимаю как это поможет мне, у меня питание от USB и при отключение снимается питание и соответствие pullup, который подключается потом при инициализации
у вас наверное питание не от usb было



оказалось на шине USB последовательно были резисторы аж 51 Ом, убрал их, стало существенно лучше, теперь всех компах на linux работает безупречно , но некоторых компьютерах с win также через пень
Go to the top of the page
 
+Quote Post
digital
сообщение Dec 18 2015, 13:20
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 229
Регистрация: 3-02-06
Из: Санкт-Петербург
Пользователь №: 13 974



вроде нашел, вся проблема в описание Дескриптор репорта, и linux при этом инициализирует и и можно посмотреть какие ошибки, а windows молча слетает инициализация (и то через раз)

проблема в в описание Дескриптор репорта в том что он слишком длинный 84 байта нормально, а 103 и больше уже не работает.


чтобы разобраться мне очень помогла статья http://habrahabr.ru/post/254251/
Go to the top of the page
 
+Quote Post

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

 


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


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