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 и отдельная библиотека для использования в других проектах. Автор оригинала статьи просит задавать вопросы на его сайте на немецком или английских языках.

Оригинал статьи

Прикрепленные файлы:

Добавить комментарий

Ваш адрес email не будет опубликован.