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
	
Пока всё.