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

 
 
 
Reply to this topicStart new topic
> stm32f4 usb fs - непойму как работает bulkIN, затыкается передача после отправки пакета в фифо
AlexRayne
сообщение May 23 2017, 09:46
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 275
Регистрация: 27-09-07
Пользователь №: 30 877



Привет всем!
уже довольно долго мучаюсь с попыткой поднять стек MSD на unicore-mx. портит все дело внезапные остановы отправки пакетов в bulkIN точке. (почемуто на точке0 никаких проблем нету)
вот последний анамнез ставящий меня в тупик:

Код
        cm_disable_interrupts();
        REBASE(DWC_OTG_DIEPxTSIZ, ep_num) =     mc_from_flags(transfer->flags) |     DWC_OTG_DIEPTSIZ_PKTCNT(pktcnt) |DWC_OTG_DIEPTSIZ_XFRSIZ(transfer->length);
//* вот тут вот установлен NACK - чтобы точка не вела активность пока в ее ФИФО чтото кидается
        REBASE(DWC_OTG_DIEPxCTL, ep_num) = DWC_OTG_DIEPCTL_EPENA |    DWC_OTG_DIEPCTL_MPSIZ(transfer->ep_size) |    DWC_OTG_DIEPCTL_SNAK | DWC_OTG_DIEPCTL_TXFNUM(ep_num) | ptyp_map[transfer->ep_type] | DWC_OTG_DIEPCTL_USBAEP;

        USBD_LOGF_LN(USB_VIO, "USBD:submit urb%"PRIurb" on ep8%"PRIx8" DIEPxTSIZ=%x"
                , view_urbid(urb->id), ep_num, REBASE(DWC_OTG_DIEPxTSIZ, ep_num) );

        /* Push first packet to memory! */
        if (transfer->length) {
            /* Enable empty interrupt mask */
            REBASE(DWC_OTG_DIEPEMPMSK) |= DWC_OTG_DIEPEMPMSK_INEPTXFEM(ep_num);

            urb_to_fifo_1pkt(dev, urb);
        }
//* вот тут вот установлен ACK - чтобы точка начала отправку
        REBASE(DWC_OTG_DIEPxCTL, ep_num) |= DWC_OTG_DIEPCTL_CNAK;
        cm_enable_interrupts();

        /* Enable Interrupt */
        REBASE(DWC_OTG_DAINTMSK) |= DWC_OTG_DAINTMSK_IEPM(ep_num);

останов на последнем операторе - включение прерываний, показывает изумительную картину:
флаг XFRC - установлен, что и понятно, вссь пакет ушел в фифо.
флаг TXFE - чист, а DTXFSTSx - показывает что в фифо завис мой пакет, и никуда не отправляется. при этом DIEPCTL показывает флаг NACKSTS = 0

на этом месте обмен с хостом останавливается, и спустя таймаут хоста требует ресета.

Кто боролся с ФИФО в стмах - расскажите что я нетак курю? как правильно работать с отправкой балк-пакетов?
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 26th September 2017 - 05:32
Рейтинг@Mail.ru


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