USB поведение не так, как ожидалось - PullRequest
0 голосов
/ 18 марта 2019

Я портирую драйвер USB с устройства STM32F4 на устройство STM32L4. Это почти работает. Во время перечисления он отправляет и получает информацию, но данные не совсем такие же, как в «простом» проекте, созданном STM Cube. Я имею одинаковые настройки в обоих проектах, но получаю странные результаты.

Я потерял неделю, пытаясь найти решение, возможно, у кого-то здесь была похожая проблема, и он может мне помочь. Извините за изображения, но нет никакой другой информации о размещении на SO

enter image description here

Как видите, пакеты практически одинаковы, но не идентичны. После 25-го перехода плата останавливается и принимает только очень ограниченное количество запросов

Оба файла из wireshark (в формате wireshark и текстовом формате) находятся здесь:

https://gitlab.com/diymat/usb-problem/tree/master

Файлы ep * создаются из моего порта, stmcdc * - генерируется STM Cube. Оба работали на одном и том же оборудовании.

Ответы [ 2 ]

0 голосов
/ 26 марта 2019

Так что я хотел бы быть немного лучше, но мне определенно понадобится больше информации, чтобы дать вам правильное направление. При этом, может быть, что-то не так, поэтому я постараюсьпокрыть то, что я могу придумать.Давайте начнем с некоторых из наиболее очевидных.

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

Если вы используете сгенерированное промежуточное программное обеспечение FATFS из ST, небольшой размер стека внутри конфигурации L4 может вызвать именно эту проблему.он может работать до тех пор, пока регистр ПК не получит ошибочную ошибку, которая может привести к некоторой неисправности или, в некоторых случаях, просто к плохому результату, возвращенному внутри FATFS, или к периферийному коду USB от ST, и он вернет грязный сектор наОкно USB считывается из FATFS, что приводит к завершению операций на периферийном устройстве.

Я вижу, что вы используете STM32Cube, поэтому вы можете редактировать размер стека и кучи, открыв файл startup_stm32l475xx.s

и отредактируйте их, как считаете нужным для вашего приложения.

; Amount of memory (in bytes) allocated for Stack
; Tailor this value to your application needs
; <h> Stack Configuration
;   <o> Stack Size (in Bytes) <0x0-0xFFFFFFFF:8>
; </h>

Stack_Size      EQU     0x400

                AREA    STACK, NOINIT, READWRITE, ALIGN=3
Stack_Mem       SPACE   Stack_Size
__initial_sp


; <h> Heap Configuration
;   <o>  Heap Size (in Bytes) <0x0-0xFFFFFFFF:8>
; </h>

Heap_Size      EQU     0x200

Попробуйте увеличить размер стека и посмотрите, что произойдет.Удачи в поиске вашего решения!

0 голосов
/ 20 марта 2019

Это тот же конфиг часов?48 МГц USb clk нормально?Использование non crystal или ext osc для получения 48 МГц USB обычно приводит к проблемам при большом xfer Даже на F4 не может сказать для l4 Так что может показаться, что он работает с hid и довольно коротким пакетом, но начинает плохо себя вести для большего xfer

...