NXP i.MX7D
и устройство USB
Пожалуй самый короткий путь знакомства с USB, это девайс.
После того, как вы загрузили прошивку через sb_loader, модуль USB_OTG1 остаётся
настроенным в девайсе.
Генератор на 480 МГц и вся схема тактирования работает.
Ножки настраивать не нужно, они жёстко привязаны к phy.
Сам phy довольно простой и так же не требует настройки.
Я не стал глубоко разбираться с интерфейсом. Но кое-какие сведения есть.
От сеанса загрузки прошивки, остались структуры по адресу ENDPOINTLISTADDR.
Можете поизучать их, для лучшего понимания. И создать аналогичные.
Надеюсь вы помните, что структуры должны располагаться в некешируемой области?
Многие регистры, после загрузки прошивки, остались настроенными так,
что бы обеспечить работу USB1 в режиме device.
Изучите их содержимое. Назначение битов в них предельно простое.
Обратите внимание, что порт вы получаете настроенным при условии, что прошивка
загружалась в камень через USB.
Что будет, если загружать прошивку с флешки?
Будет ли порт настроен? Необходимо проверять..
После загрузки, порт остаётся виден в системе, как некий безымянный девайс.
Можно перехватить функциональность порта. Для этого сбросьте бит 0 в USBCMD.
Девайс отключится от компьютера. Подождите немного и установите бит обратно. Девайс подключится.
Это равносильно передёргиванию кабеля в разъёме.
Ловите протокол обмена! Тут же должен прилететь USB Reset, новый адрес устройства, пакеты SETUP - и понеслась!
Хост не заставит себя долго ждать.
Несколько миллисекунд, и вы уже VCP! Хотите выводить буковки в консоль, со скоростью 50 мегабайт в секунду?
Думаю, эту задачу в 1000 строк можно уложить!
@ Первым делом
@ Передёрните шнурок
MOV32 R0, USB_OTG1_BASE
@ Выдернуть шнурок из компьютера
LDR R9, [R0, USBCMD]
BIC R9, 1 @ Отсоединить
STR R9, [R0, USBCMD]
Пауза 350000
@ Вставить обратно
BIS R9, 1
STR R9, [R0, USBCMD]
@ Заглянуть в остаточные структуры
Дамп 0x00904000, 1024
Пока всё.