[uquote="jcxz",url="/forum/viewtopic.php?p=4658953#p4658953"]} usbMem @ ".usb";[/code]Получается - максимальный размер эндпоинта == (512-2*4*4-8*2)/2 = 232 байта. Если ничего не напутал.
Таблица размещения у меня = 2*4*4 = 32 байта (64 - это занимает в адресном пространстве).[/uquote]
Да, пожалуй, соглашусь. У меня структура сделана непрерывной - похоже, нечетные полуслова и правда игнорируются.
Плюс, наверное, если используются не все точки, можно пару байтов сэкономить.
[uquote="jcxz",url="/forum/viewtopic.php?p=4658953#p4658953"]Для изохронных точек в USB-FS это невозможно. Там только один кадр на каждую точку за один фрейм (1 мсек).
В STM32L даже переключение буферов происходит аппаратно. По SOF-у.[/uquote]
Не по SOF, а по запросам хоста, как и любые другие точки. На IN он посылает единственный запрос на фрейм. А на OUT - может несколько. Если настроить битрейт динамика так, чтобы не помещался в одну точку, хост прекрасно разбивает поток на несколько транзакций. wireshark-ом это прекрасно видно. Я пытался и на IN что-то сделать (размер точки, скорость опроса, даже в сторону синхронизации смотрел) но, похоже, не выйдет.
[uquote="jcxz",url="/forum/viewtopic.php?p=4658953#p4658953"]Изохронные - это не только для аудио. Нам например нужно было более 600 КБ/сек (размер точки более 600 байт). С гарантированной полосой пропускания.[/uquote]
Тут да, ограничение. Хотя я бы поставил какой-нибудь CDC-ACM и не мучился. Полоса пропускания современных хостов настолько больше предела USB-FS, что уж с этим проблем быть не должно.
jcxz писал(а):Она же кратна целому количеству SOF. А значит логично её стартовать от счётчика, декрементируемого по SOF.
Всего лишь "совпадает". А начинать новое преобразование логично когда завершилось предыдущее. Или когда предыдущее послано. Интервал между interrupt-IN и interrupt-IN кажется более стабильным, чем между SOF и interrupt-IN.
Не надо лепить SOF куда попало.