STM32F4. Урок 32 — Использование USB-OTG в режиме MSC_HOST

Данная библиотека позволяет подключить USB флешку и работать с ней через OTG порт платы Discovery. Библиотека FatFs (USB версия) дает функции, позволяющие работать с файлами на флешке.
Примечание: существует библиотека FatFs для работы с SD картами, а также библиотека SD + USB (Урок 87).

Библиотека имеет только две функции:
1. Функция инициализации, которая должна вызываться только в начале.
2. HOST_Do-функция, которая запускается циклически и возвращает статус USB порта. Статус меняется, как только будет обнаружен ключ USB флешки, доступной для работы с FatFs.
Примечание: автор проверил две флешки. После попытки работы с флешкой объемом 8GB от компании SanDisk, программа выдала ошибку «DEVICE_NOT_SUPPORTED». С второй флешкой, 4 Гб Intenso ошибки нет, без проблем можно читать и записывать файлы.
Для подключения к плате необходим переходник с USB на microUSB. (Его можно купить на eBay или Amazon).

Пример работы:

Используемые выводы:

 PA9   -> USB_OTG_VBUS PA10  -> USB_OTG_ID PA11  -> USB_OTG_DM PA12  -> USB_OTG_DP PC0   -> USB_VBUS_Enable

Требуемые библиотеки:

Подключаемые модули CooCox-IDE: GPIO, MISC
Поддерживаемые библиотеки: STM32_UB_FATFS (USB-Version)

Перечисления:

 typedef enum {   USB_MSC_HOST_NO_INIT =0,   // интерфейс USB не инициализирован    USB_MSC_DEV_DETACHED,      // нет подключенного устройства   USB_MSC_SPEED_ERROR,       // Скорость USB не поддерживается   USB_MSC_DEV_NOT_SUPPORTED, // Устройство не поддерживается   USB_MSC_DEV_WRITE_PROTECT, // Устройство защищено от записи   USB_MSC_OVER_CURRENT,      // Перегрузка по току   USB_MSC_DEV_CONNECTED      // Устройство подключено и готово }USB_MSC_HOST_STATUS_t;

Функции:

 void UB_USB_MSC_HOST_Init(void);                 // инициализировать USB-Host USB_MSC_HOST_STATUS_t UB_USB_MSC_HOST_Do(void);  // проверить состояние устройства

Пример использования:

 //-------------------------------------------------------------- // File     : main.c // Datum    : 13.04.2013 // Version  : 1.0 // Autor    : UB // EMail    : mc-4u(@)t-online.de // Web      : www.mikrocontroller-4u.de // CPU      : STM32F4 // IDE      : CooCox CoIDE 1.7.0 // Module   : CMSIS_BOOT, M4_CMSIS_CORE // Funktion : Demo der USB-MSC-HOST-Library // Hinweis  : Diese zwei Files muessen auf 8MHz stehen //              "cmsis_boot/stm32f4xx.h" //              "cmsis_boot/system_stm32f4xx.c" //--------------------------------------------------------------  #include "main.h" #include "stm32_ub_led.h" #include "stm32_ub_usb_msc_host.h"  int main(void) {   FIL myFile;   // обработчик файлов   uint8_t write_ok=0;    SystemInit(); // Инициализация настроек кварца    // Инициализация светодиодов   UB_Led_Init();    // Инициализация USB-OTG-порта как MSC-HOST   // (для чтения / записи на USB флешку)   UB_USB_MSC_HOST_Init();    while(1)   {     // Данные о статусе USB     if(UB_USB_MSC_HOST_Do()==USB_MSC_DEV_CONNECTED) {       // если USB-флешка обнаружена       UB_Led_On(LED_GREEN);        // Если файл еще не записан       if(write_ok==0) {        	write_ok=1;        	UB_Led_On(LED_RED); 		//Монтировать флешку        	if(UB_Fatfs_Mount(USB_0)==FATFS_OK) {           // Редактировать файл, записанный в корень флешки           if(UB_Fatfs_OpenFile(&myFile, "USB_File.txt", F_WR_CLEAR)==FATFS_OK) {             // Написать несколько строк текста в файле             UB_Fatfs_WriteString(&myFile,"Test der WriteString-Funktion");             UB_Fatfs_WriteString(&myFile,"hier Zeile zwei");             UB_Fatfs_WriteString(&myFile,"ENDE");             // Закрыть файл             UB_Fatfs_CloseFile(&myFile);           }           // Размонтировать флешку           UB_Fatfs_UnMount(USB_0);         }         UB_Led_Off(LED_RED);       }     }     else {       // Если нет доступных USB флешек       UB_Led_Off(LED_GREEN);     }   } } 

В приложении проект CooCox и отдельная библиотека для использования в других проектах. Автор оригинала статьи просит задавать вопросы на его сайте на немецком или английских языках.