Перейти к содержанию
    

Пропуск прерывания в CherryUSB на STM32F722

Использую библиотеку CherryUSB на stm32f405 и stm32f722 чтобы сделать CDC ACM устройство. На F4 все работает стабильно, а на F7 обнаруживаются проблемы. Если давать достаточно плотный поток данных от устройства к хосту, то работа быстро прерывается. Прерывание по завершению передачи не приходит, бит XFRC в регистре DIEPINT. Отлаживаю с помощью записи логов в кольцевой буфер в RAM.

По коду, делается вызов usbd_ep_start_write() из моих модулей, дальше случается прерывание DIEPINT_TXFE и в обработчике вызывается dwc2_tx_fifo_empty_process(). После чего обычно происходит прерывание DIEPINT_XFRC и в обработчике вызывается callback в котором я снова делаю usbd_ep_start_write() либо не делаю в зависимости от наличия данных на отправку. Но на F7 иногда все заканчивается на вызове dwc2_tx_fifo_empty_process(), дальше прерывания нет.

https://github.com/sakumisu/CherryUSB/blob/master/port/dwc2/usb_dc_dwc2.c

Проблем возникает непредсказуемо, никаких зависимостей выявить не удалось. Обычно передаётся несколько Кб текста и все останавливается, если передавать небольшие порции и редко то проблема возникает с меньшей вероятностью. Проявляется на F7, от DCache не зависит. Собирал с помощью GCC и Clang с разными настройками оптимизации, не зависит. При отладке, когда ставил точки останова на код обработчика прерывания OTG_FS то были случаи разлипания и продолжения передачи.

В моем коде нет обработки случая неприхода callback после вызова usbd_ep_start_write(), разлипнуть можно только если вызов callback все таки случится.

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Оказалось все просто. У меня на F7 частота для usb формировалась с большой ошибкой (~6%) из-за округлений при расчете делителей. Исправил и теперь работает стабильно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...