Можно ли перенести libusb на микроконтроллер?

Я с нетерпением жду возможности реализовать некоторые файловые операции на USB-устройстве, которое будет подключено к настольному устройству на базе микроконтроллера. Устройство не имеет ОС / ОСРВ и работает только с кодом прошивки, который я планирую разработать. Прошивка будет иметь все необходимые функции (UART, таймер, SPI, I2C, контроллер внешней памяти и т. Д.), Которые обычно имеют встроенное устройство.

Мои вопросы:

  1. Можно ли включить библиотеку libusb в прошивку, которую я планирую разработать?
  2. Работает ли libusb в среде, отличной от операционной системы? Или мне придется выбрать ОС, которую я могу перенести на микроконтроллер, а затем использовать библиотеку libusb в пользовательском пространстве?

person Community    schedule 03.03.2014    source источник
comment
Всегда лучше задать открытый вопрос Как мне решить эту проблему?, чем думать о собственном решении, а затем спросить Как мне заставить это решение работать?. Вероятно, вам следует задать вопрос: Как мне поддерживать устройство файловой системы USB на микроконтроллере xxxx. usblib, вероятно, не подходит из-за зависимостей, недоступных для вашей системы (например, POSIX API и модель драйвера), но если бы вы были менее осторожны в том, какой микроконтроллер вы использовали, вы бы получили более полезный ответ.   -  person Clifford    schedule 03.03.2014
comment
@Clifford - вопрос не в том, как это сделать, а в том, можно ли это сделать просто   -  person Chris Stratton    schedule 03.03.2014
comment
Да, при достаточном объеме памяти это можно сделать даже без операционной системы. Однако более интересный вопрос заключается в том, является ли это правильным решением вашей проблемы, даже если вы нацеливались на настольный ПК. Вы упоминаете файловые операции, и это обычно не то, что нужно делать с libusb, а скорее с использованием драйвера массовой памяти и файловой системы. Многие встроенные микросхемы с USB-хостом или портами OTG уже имеют образец кода для установки и доступа к USB-накопителю.   -  person Chris Stratton    schedule 03.03.2014
comment
@ChrisStratton: Это правда. И как таковой, вероятно, даже менее продуктивен. Если вопрос будет ли это решение работать? вызовет ответ нет, дальше вперед не будет.   -  person Clifford    schedule 04.03.2014
comment
Нет, с хорошо продуманной причиной, может спасти кого-то от нескольких недель ударов головой о проблеме и постепенного обнаружения препятствий, о которых уже знают более опытные инженеры.   -  person Chris Stratton    schedule 04.03.2014
comment
@ChrisStratton: Спасибо за предложения.   -  person    schedule 04.03.2014
comment
@Clifford: Я понимаю, что вы имели в виду, но я все еще нахожусь на этапе, когда я выберу микроконтроллер для использования в зависимости от того, что он будет поддерживать, поэтому этот вопрос был размещен таким образом. Если бы я уже выбрал микроконтроллер, вопрос мог бы заключаться просто в том, как мне это сделать на этом конкретном микроконтроллере. Но я понимаю вашу точку зрения, доволен.   -  person    schedule 04.03.2014
comment
@WedaPashi: Тогда я предлагаю, если вы не собираетесь встраивать Linux, использовать поддержку USB без операционной системы как часть ваших критериев выбора. Даже если вы используете ядро ​​RTOS, большинство из них не требует обязательной модели устройства, поэтому требуется интеграция «голого железа». Например, STM32 имеет USB-хост на ходу. и библиотеку устройств (UM1021), которую я успешно использовал без операционной системы и с Keil RTX, FreeRTOS и Segger embOS.   -  person Clifford    schedule 04.03.2014
comment
@ChrisStratton: Конечно, это уже было дано в существующих ответах. Мое намерение состояло в том, чтобы помочь в преодолении следующего препятствия, но узкий характер вопроса не позволяет опубликовать такой совет в качестве ответа на законных основаниях. Я хочу сказать, что у меня и, возможно, у вас есть, возможно, полезный совет, и этот вопрос усложняет задачу. Раздел комментариев - это место для предложений по улучшению вопросов; Мне трудно понять, почему вы так возражаете. В конце концов, мое предложение состоит в том, чтобы добраться до желаемой конечной точки (без каламбура) напрямую, а не через серию шагов.   -  person Clifford    schedule 04.03.2014


Ответы (1)


libusb в настоящее время поддерживается только в Linux, OS X, Windows, Windows CE, Android и OpenBSD / NetBSD. Так что да, для этого требуется базовая ОС. Если ваш микроконтроллер не является ARM, который может запускать Linux, было бы невозможно запустить libusb без переноса низкоуровневого кода на ваше оборудование микроконтроллера и его работы без ОС, что было бы огромным объемом работы.

Если у вас есть микроконтроллер с возможностью USB, весьма вероятно, что у производителя уже есть библиотека для доступа к функциям USB, и / или доступны сторонние библиотеки.

person tcrosley    schedule 03.03.2014
comment
Хорошо. Спасибо за информацию. Еще один вопрос: как вы сказали, он поддерживает только Linux, Windows и несколько других платформ ОС, поддерживает ли он какую-либо RTOS? Потому что я видел очень мало сценариев, в которых мы использовали бы ОСРВ вместе с USB-драйвером. - person ; 03.03.2014
comment
Этот список ОС взят из здесь, что согласуется с другой документацией, которую я видел для libusb. Я нигде не видел, чтобы libusb поддерживала какие-либо встроенные RTOS. - person tcrosley; 03.03.2014
comment
Я использовал FreeRTOS с интегрированным в него классом VCP. Это было взятие кода ST USB и его использование. Как говорит tc, производители поставляют USB-код для своих процессоров. Я был бы удивлен, если бы не было нескольких реализаций FreeRTOS, в которых работал бы USB. - person DiBosco; 03.03.2014
comment
Это не совсем точно в его выводах - учтите, что для эффективного портирования это может быть так же просто, как обертывание любых нативных API-интерфейсов в стиле libusb. И данное приложение, вероятно, использует только подмножество API libusb. И нет, операционная система особенно необходима - скорее всего, асинхронные части (при необходимости) могут быть запущены по прерыванию USB. - person Chris Stratton; 03.03.2014