ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Пятница
29 марта
833449
Evgeny_CD, Архитектор (20.04.2018 02:04 - 02:06, просмотров: 3604)
[Как сделать USB HS пригодным для RT коммуникации] Набор идей. 1. USB хост, к счастью, реализует только спецификации USB достаточно низкого уровня. Вся остальная кривизна USB - программная. Но она не обязательна - можно взять USB как физический интерфейс и построить свой стек. 2. Современный USB хост программируется через дескрипторы, которые описывают что в каждом фрейме и микрофрейме ему надо сделать. Прерывания он генерит кратно длительности микрофрейма - 125 мкс. 3. Соответственно, нет проблем запрограммировать все жестко на HS, адреса устройств задать статично, и гнать Bulk пакеты с запросами на передачу в Endpoint и на прием из Endpoint. 4. Протокол сделать на датаграммах фиксированной длины, 128-512 байт. 5. В микрофрейме оставить часть полосы для повторных Bulk пакетов - если что-то передалось с ошибкой. 6. Очереди в памяти со стороны хоста и со стороны device. DMA таскает данные для пакетов. И есть таблица, куда складываются результаты передачи. Потом драйвер проверяет результат и помечает успешно переданные пакеты как пустые, и непереданные включает в список на передачу в следующий раз. 7. USB HS PHY ULPI имеет простой интерфейс - 60 МГц 8 бит данных + клок + 3 управляющих сигнала. Стоит от $1 ind. 8. Контроллеры USB device на несколько endpoint синтезируются в FPGA на 1.5...2.5k LE. Но нам нужен толко один тип пакетов, никаких прерываний, управления и прочего, и если сразу складывать принятое и отдавать передаваемое из двухпортовой памяти в FPGA, то контроллер можно ужать до 1к LE - моя наглая оценка. 9. Значит, даже взяв самый дешевый Cyclone 10 LP 10CL006YE144I7G 30 блоков по 9 кбит 88 IO $9 я могу построить "SPI коммутатор" для периферийных процов. Для управления - внешний MCU с быстрой и "малолапой" параллельной шиной. типа EPMP. SPI - 4 пина. ULPI - 13. EPMP пусть 20 в мультиплексированном режиме 16 бит. Получится что-то типа 12 "SPI сопроцессоров", а они нынче мощные и дешевые. 10CL010YE144I7G $12 - это уже 46 блоков памяти. И те же 88IO, дальше IO падает. 11. Можно использовать USB HUB 7 портов USB2517I - $5. Но программного геморроя будет чуть поболее. 12. Описанную идею можно перенести и на ПК Linux. Берем стандартный драйвер для EHCI USB Host, и переписываем его под предложенную идеологию (для системы он исчезает). Берем Xenomai http://caxapa.ru/787424.html и получаем низколатентную обработку в user space. 13. USB есть на всех ПК, и в очень и очень многих микроконтроллерах. 14. USB - это всего 2 пина! Что очень критично, если мы берем мощный MCU типа STM32H7 в TQFP144. 15. в очень и очень многих iMX, SAM5D2 и прочем по 2 USB Host, так что взяв FPGA помощнее, можно и дублирование устроить - для парирования USB глюков. Критика?