Как в USB контроллере в STM32F4x реализовать отправку >1 изохронных пакетов за микрофрейм?
В спецификации протокола USB HS есть возможность отправлять до 3-х изохронных пакетов за микрофрейм.
Это определяется
1. дескриптором. ендпоинта
2. Самим актом передачи
В контроллере USB STM32F4xx
В регистрах есть настройки как разбивать передаваемый буфер на пакеты.
По крайней мере я это так понял, почитав документ RM0090
В регистре OTG_HS_DIEPTSIZx есть поля MCNT и PKTCNT ,которые, как я понимаю, отвечают за разбиение.
Драйвер их ставит как-то неверно.
У меня вместо 3-х пакетов по 1024 байта отправляется один 3072 байта.
А это как-то не соответствует спецификации USB.
При этом, в регистре OTG_HS_DIEPCTLx - установлен максимальный размер пакета 1024.
Это я что-то делаю неправильно, или в STM32 контроллер USB не поддерживает такой режим?
если найдете ответ на поставленный вопрос, было бы интересно почитать.Будет удобнее со ссылками на упоминаемые документы. Как я понял, данные которые вы передаете, отправляются одним пакетом вместо трех. С точки зрения спецификации в изохронном юсб нет "мощного контроля" за целостностью передаваемой информации в угоду скорости (к примеру отсутствует отбрасывание пакета и повторный его запрос при несовпадении контрольной суммы) поэтому не совсем понятно назначение функции описанной вами. Возможно неправильное поведение (как я понимаю в роли usbхоста-пк) зависит от драйвера операционной системы или "современности" программного/софтварного юсб-хоста. Вы можете попытаться установить не 3 пакета по 1024, а больше 3072 байт одним пакетом?
Isochronous Transfers are also subject to timing jitters as described for Interrupt Transfers.
The maximum packet size for the interrupt endpoint data is:
64 or less bytes for full-speed
1024 or less bytes for high-speed
The developer can define how often the host can request a data transfer from the device.
а как вы поняли, что это один пакет, а не 3 пакета по 1024?
а как вы поняли, что это один пакет, а не 3 пакета по 1024?
Использую под линуксом usbmon
Он, конечно, глючный, но разбиение по пакетам как-то даёт
Глюки usbmon я заметил с помощью прибора Ellisys USB Explorer 280
Его я взял у знакомого, попользоваться.
Но стоит эта штука дорого. Поискал в инете, нашёл 2 альтернативы.
Одна из них, подешевле - такая: