Можно ли реализовать хост на stm32 (без аппаратной поддержки) только программным кодом для записи данных на флешку? [закрыто]

Можно ли реализовать хост на stm32 (без аппаратной поддержки) только программным кодом для записи данных на флешку? В интернете информации по этому вопросу не нашел. Есть устройство реализации, но нет хоста. Изучаю спецификацию usb для ответа, но пока плохо в ней разбираюсь.

Существуют сотни различных STM32.
Вы имеете в виду USB-хост? и вы хотите загрузить это без специальной прошивки на STM32?
@ЕвгенийШ. Да, но у меня есть тот, у которого нет аппаратной поддержки
что такое "аппаратная поддержка"?
@Jasen Да, я имею в виду USB-хост. Возможно, с ограниченными возможностями, так как мне нужно только записать на USB-накопитель.
«аппаратной поддержкой» будет периферийный блок USB OTG (или, по крайней мере, USB-устройства). И нет, это неразумный проект — просто возьмите STM32 с портом OTG; эта функция предлагается во всем, вплоть до M0, включая пакеты TQFP, с которыми легко работать. Или использовать SDCARD в режиме SPI или bit-bang даже на самом примитивном, вместо USB.
@MarcusMüller Я имею в виду, что функция обмена уже существует внутри микроконтроллера на логическом уровне, а регистры
@ChrisStratton Я понимаю, что это неразумно, потому что я не видел, чтобы кто-то это делал. Но ответ на вопрос "почему?" Не был найден.
Потому что побитовый USB находится на переднем крае возможностей; и обычно реализация на стороне устройства зависит от того, является ли хост обычным, пока он срезает углы. Я слышал, что кто-то делал это на пропеллере, но это странная штука. В конечном счете, самый большой аргумент заключается в том, что вам придется производить огромные объемы продукции, прежде чем это будет стоить попыток.
@ChrisStratton полностью согласен; будет практически невозможно также обрабатывать полную файловую систему при выполнении fahrplan.events.ccc.de/congress/2016/Fahrplan/events/8031.html
Файловая система, вероятно, вообще не проблема - эта часть может быть выполнена настолько медленно, насколько это необходимо, на самом деле это просто сохранение и продвижение состояния.
@ChrisStratton Хорошо, если вам нужно настроить всю свою прошивку только для того, чтобы едва соответствовать времени автобуса, которым вы управляете, как вы все еще обмениваетесь данными? (Мой выбор формулировки был неудачным: я имел в виду не файловую систему как структуру данных, а тот факт, что кто-то должен обрабатывать данные, все еще имея дело с USB)

Ответы (1)

Почему функция хоста не может быть реализована с аппаратным обеспечением только для устройства? Потому что USB не симметричен относительно хоста и устройств.

На стороне устройства функция USB заключается в поддержке основного протокола USB, называемого «SIE», Serial Interface Engine. Этот механизм включает в себя способность устройства ПОЛУЧАТЬ запросы хоста, начиная с «канала по умолчанию», и правильно отвечать, получая данные с ответом ACK или отправляя данные и ожидая подтверждения хостом ACK для завершения транзакций. Из-за временных ограничений USB (время отклика 1,7 мкс) заключительный этап управляющей транзакции не может быть реализован программными средствами, и большинство частей механизмов SIE устройств кодируются аппаратно. Другие функции SIE заключаются в том, чтобы принять назначение адреса и принять/включить конфигурацию, которая завершает фазу перечисления протокола подключения USB. Затем SIE поддерживает базовые входные/выходные/другие каналы в рамках тех же ограничений протокола. Короче говоря, функция устройства - ОТВЕЧАТЬ.

Из-за этих аппаратных ограничений невозможно использовать механизм устройства для функции хоста, главным образом потому, что функции хоста полностью противоположны функциям устройства. Обработка шины следует за очень разными конечными автоматами. Хост должен ГЕНЕРИРОВАТЬ периодические пакеты кадров и ИНИЦИАТИРОВАТЬ все транзакции. А затем обеспечить плавный поток данных, и все это обычно делается с использованием аппаратного обеспечения прямого доступа к памяти. Хост должен обеспечивать функцию питания порта и функцию сброса порта, которой нет в реализациях устройства.

Это основные причины, по которым MCU разработаны с отдельными аппаратными контроллерами хоста и устройства.

Не говоря уже о том, что я действительно был бы в восторге, если бы кто-то хотя бы на физическом уровне смог вывести FS USB с помощью дешевого STM32 — ведь вы не можете использовать LS для разговора с запоминающим устройством, не так ли? И сделать LS (устройство) на Cortex-M едва ли возможно в программном обеспечении, даже при большой доброй воле со стороны хоста.
@MarcusMüller, если у вас есть внешний USB PHY через UTMI / ULPI, можно создать хост FS с использованием BYTE-banging, если у вас есть прямой доступ к порту UTMI. Которого у тебя обычно нет. Однако вы можете сделать некоторую оболочку FPGA. И да, на скоростях LS нет запоминающего устройства.
да, но добавление FPGA только для того, чтобы вам не пришлось покупать MCU, который поставляется либо с доступом к UTMI, либо с фактическим аппаратным выделенным хост-контроллером, было бы ... по меньшей мере неожиданным шагом. Не говоря уже о том, что объем чистого интеллекта, необходимого для обработки потенциально 2 7 -устройство шины смешанных устройств может быть немного более интенсивным, чем то, что должно быть в состоянии сделать «тупое» устройство.