Easyelectronics.ru

Электроника для всех
Текущее время: 21 окт 2018, 09:01

Часовой пояс: UTC + 5 часов



    • JLCPCB - Прототипы 10 PCBs всего за 2$ (100*100mm, 2-layer)
    • Как мы делаем платы, смотрите на YouTube
    • Крупнейшая китайская фабрика прототипов. 300000+ заказчиков и 10000+ заказов в день!
    • LCSC - Крупнейший китайский онлайн магазин комплектующих.

Начать новую тему Ответить на тему  [ Сообщений: 57 ]  На страницу 1, 2, 3  След.
Автор Сообщение
 Заголовок сообщения: Подключение USB-флешки к МК STM32 на SPL библиотеке
СообщениеДобавлено: 05 июн 2018, 19:06 
Заглядывает иногда

Зарегистрирован: 23 окт 2010, 23:56
Сообщения: 72
Добрый день! Хотелось бы спросить, как подключить USB-флешку к хосту на МК серии STM32F0xx и научиться создавать на ней текстовые файлы(txt). Есть ли стартовые проекты на библиотеке SPL, близкие к этой задаче? В сети встречается много проектов, где в роли хоста выступает ПК, а МК используется как Mass Storage. Но я так понимаю это несколько иная задача. Вот здесь нашел примеры использования, но, видимо, в роли Mass Storage здесь выступает сам МК.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Подключение USB-флешки к МК STM32 на SPL библиотеке
СообщениеДобавлено: 05 июн 2018, 19:56 
Старожил
Аватара пользователя

Зарегистрирован: 22 июл 2017, 11:48
Сообщения: 2381
Фигасе вопросец. Объяснение займет страниц пять текста. Но, пожалуй, начнем с того, что в серии F0 USB не может быть хостом.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Подключение USB-флешки к МК STM32 на SPL библиотеке
СообщениеДобавлено: 05 июн 2018, 19:58 
Старожил

Зарегистрирован: 19 апр 2016, 11:59
Сообщения: 358
Kvanto писал(а):
подключить USB-флешку к хосту на МК серии STM32F0xx
Какой МК из серии STM32F0xx поддерживает режим хоста?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Подключение USB-флешки к МК STM32 на SPL библиотеке
СообщениеДобавлено: 05 июн 2018, 20:10 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 02 июн 2015, 23:00
Сообщения: 122
Откуда: Харьков
Maik писал(а):
Какой МК из серии STM32F0xx поддерживает режим хоста?

Если Вы сами не можете изучить этот вопрос, то очень сомневаюсь что справитесь с otg usb

_________________
saw_tooth


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Подключение USB-флешки к МК STM32 на SPL библиотеке
СообщениеДобавлено: 05 июн 2018, 20:36 
Старожил

Зарегистрирован: 19 апр 2016, 11:59
Сообщения: 358
Saw_Tooth, я у ТС спрашивал, а не интересовался какой МК из STM32F0xx может быть хостом.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Подключение USB-флешки к МК STM32 на SPL библиотеке
СообщениеДобавлено: 05 июн 2018, 22:29 
Заглядывает иногда

Зарегистрирован: 23 окт 2010, 23:56
Сообщения: 72
Maik писал(а):
Kvanto писал(а):
подключить USB-флешку к хосту на МК серии STM32F0xx
Какой МК из серии STM32F0xx поддерживает режим хоста?

Получается для этой серии эта задача не реализуема?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Подключение USB-флешки к МК STM32 на SPL библиотеке
СообщениеДобавлено: 06 июн 2018, 00:28 
Старожил
Аватара пользователя

Зарегистрирован: 22 июл 2017, 11:48
Сообщения: 2381
Получается. Графа USB Type: Device http://www.st.com/content/st_com/en/pro ... tId=SS1574

Нужен МК с USB OTG.
• STM32F105/107 http://www.st.com/en/microcontrollers/s ... tId=SS1031
• STM32F205/215, • STM32F207/217 http://www.st.com/content/st_com/en/pro ... tId=SS1575
• STM32F4хх http://www.st.com/content/st_com/en/pro ... tId=SS1577


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Подключение USB-флешки к МК STM32 на SPL библиотеке
СообщениеДобавлено: 06 июн 2018, 02:21 
Старожил
Аватара пользователя

Зарегистрирован: 18 май 2013, 20:43
Сообщения: 3694
Откуда: Кемеровская область, Киселевск
Вложение:
Screenshot_4.jpg
Screenshot_4.jpg [ 235.81 Кб | Просмотров: 1732 ]

_________________
RADIOWOLF.RU


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Подключение USB-флешки к МК STM32 на SPL библиотеке
СообщениеДобавлено: 06 июн 2018, 11:22 
Заглядывает иногда

Зарегистрирован: 23 окт 2010, 23:56
Сообщения: 72
Получается альтернативным вариантом чтения информации с МК STM32F0xx останется случай, если на стороне флешки будет МК с режимом USB OTG и он сам сможет прочитать данные. А STM32F0xx будет работать как Mass Storage.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Подключение USB-флешки к МК STM32 на SPL библиотеке
СообщениеДобавлено: 06 июн 2018, 11:55 
Старожил
Аватара пользователя

Зарегистрирован: 22 июл 2017, 11:48
Сообщения: 2381
И снова нет. У многих МК только один физический порт USB и "промежуточным передатчиком" они работать не могут. Изобретать какой-то дикий звездолет нет смысла. Надо просто взять хотябы F105 с OTG и не париться. Ну а если вы не знаете, куда прилепить этот ваш F0, то сделайте на нем часы с будильником и термометром.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Подключение USB-флешки к МК STM32 на SPL библиотеке
СообщениеДобавлено: 06 июн 2018, 16:04 
Заглядывает иногда

Зарегистрирован: 23 окт 2010, 23:56
Сообщения: 72
Если выбрать F105, то с какого проекта лучше начать реализацию? Можно ли в данном проекте произвести переход с F4xx на F105?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Подключение USB-флешки к МК STM32 на SPL библиотеке
СообщениеДобавлено: 27 июн 2018, 19:12 
Заглядывает иногда

Зарегистрирован: 23 окт 2010, 23:56
Сообщения: 72
Добрый день! Пробую запускать данный проект. Использую три сигнала USB_OTG_DM, USB_OTG_DP, USB_VBUS_Enable для режима USB_OTG_FS Host only. Сейчас остановился на том, что в основном цикле происходит проверка условия UB_USB_MSC_HOST_Do()==USB_MSC_DEV_CONNECTED. Но пока что условие не выполняется. Прошелся по шагам, это видимо происходит потому, что нет перехода на прерывание по вектору OTG_FS_IRQHandler. Так как именно в нем взводится бит, нужный для установки статуса USB_MSC_DEV_CONNECTED. Вопрос - почему не срабатывает прерывание, и должно ли быть напряжение +5V на USB во время этого опроса. т.к. в коде есть функция(см.ниже), которая сбрасывает VBUS_Enable в 0 и питание на USB отключается.
p.s. в таблице векторов прерывание OTG_FS_IRQHandler прописано.
Код:
void USB_OTG_BSP_DriveVBUS(USB_OTG_CORE_HANDLE *pdev, uint8_t state)
{

  if (0 == state)
  {
    /* DISABLE is needed on output of the Power Switch */
    GPIO_SetBits(HOST_POWERSW_PORT, HOST_POWERSW_VBUS);
  }
  else
  {
    /*ENABLE the Power Switch by driving the Enable LOW */
    GPIO_ResetBits(HOST_POWERSW_PORT, HOST_POWERSW_VBUS);
  }


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Подключение USB-флешки к МК STM32 на SPL библиотеке
СообщениеДобавлено: 28 июн 2018, 09:20 
Старожил
Аватара пользователя

Зарегистрирован: 13 янв 2018, 21:36
Сообщения: 466
Kvanto, вы же хост, это ваша задача включить питание на VBUS, без него порт мёртв. Только после включения питания в нём "жизнь возникает".


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Подключение USB-флешки к МК STM32 на SPL библиотеке
СообщениеДобавлено: 28 июн 2018, 11:22 
Заглядывает иногда

Зарегистрирован: 23 окт 2010, 23:56
Сообщения: 72
VladislavS писал(а):
Kvanto, вы же хост, это ваша задача включить питание на VBUS, без него порт мёртв. Только после включения питания в нём "жизнь возникает".

Закомментировал вызов функции сброса VBUS_Enable, на USB теперь постоянно +5 V. Но даже при этом прерывание не вызывается:
Код:
 
case HOST_IDLE :
   
    if (HCD_IsDeviceConnected(pdev)) 
    {
      /* Wait for USB Connect Interrupt void USBH_ISR_Connected(void) */     
      USBH_DeAllocate_AllChannel(pdev);
      phost->gState = HOST_DEV_ATTACHED;
    }
    break;

Программа заходит в данный Case, проверяет условие HCD_IsDeviceConnected(pdev) и выходит из него. Пока не ясно, кто должен генерировать прерывание по вектору OTG_FS_IRQHandler. Именно через него выполнится вышеупомянутое условие.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Подключение USB-флешки к МК STM32 на SPL библиотеке
СообщениеДобавлено: 28 июн 2018, 18:31 
Старожил

Зарегистрирован: 13 июл 2016, 11:05
Сообщения: 308
у меня USB Host как раз для флэшек.
Используются только USB_OTG_DM, USB_OTG_DP
Через 22 ома на разъем и всё.
Хотя есть еще защита параллельно им ( USBDF02W5 в корпусе SOT23-5)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Подключение USB-флешки к МК STM32 на SPL библиотеке
СообщениеДобавлено: 29 июн 2018, 17:01 
Заглядывает иногда

Зарегистрирован: 23 окт 2010, 23:56
Сообщения: 72
serglg писал(а):
у меня USB Host как раз для флэшек.
Используются только USB_OTG_DM, USB_OTG_DP
Через 22 ома на разъем и всё.
Хотя есть еще защита параллельно им ( USBDF02W5 в корпусе SOT23-5)

Благодарю! Проблема подключения была именно в схеме. DM и DP были подтянуты к питанию. Убрал эти подтяжки и флешка законнектилась, теперь вот надо справиться с монтированием/размонтированием и записью файла.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Подключение USB-флешки к МК STM32 на SPL библиотеке
СообщениеДобавлено: 30 июн 2018, 09:56 
Старожил

Зарегистрирован: 13 июл 2016, 11:05
Сообщения: 308
Kvanto писал(а):
serglg писал(а):
у меня USB Host как раз для флэшек.
Используются только USB_OTG_DM, USB_OTG_DP
Через 22 ома на разъем и всё.
Хотя есть еще защита параллельно им ( USBDF02W5 в корпусе SOT23-5)

Благодарю! Проблема подключения была именно в схеме. DM и DP были подтянуты к питанию. Убрал эти подтяжки и флешка законнектилась, теперь вот надо справиться с монтированием/размонтированием и записью файла.


Скопипастил на просторах сети.
Запись у меня:
Код:
MX_USB_HOST_Process();
if(f_mount(&fileSystem, USBH_Path, 1) == FR_OK)
   {
      uint8_t path[12] = "BAZY.RAR";
      path[11] = '\0';
      res = f_open(&testFile, (char*)path, FA_WRITE | FA_CREATE_ALWAYS);
      res = f_write(&testFile, BUFDISK, 7968, &testBytes);
      res = f_close(&testFile);
      break;
   }



Чтение:

Код:
                                                            MX_USB_HOST_Process();
if(f_mount(&fileSystem, USBH_Path, 1) == FR_OK)
{
uint8_t path[9] = "BAZY.RAR";
path[8] = '\0';
res = f_open(&testFile, (char*)path, FA_OPEN_EXISTING | FA_READ);
if (res == FR_OK)
{
   res = f_read(&testFile, BUFDISK, BYTEFLASH, &testBytes);
   res = f_close(&testFile);
  }
break;
}


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Подключение USB-флешки к МК STM32 на SPL библиотеке
СообщениеДобавлено: 30 июн 2018, 11:43 
Старожил
Аватара пользователя

Зарегистрирован: 04 окт 2011, 10:19
Сообщения: 1506
На просторах есть и более корректные примеры.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Подключение USB-флешки к МК STM32 на SPL библиотеке
СообщениеДобавлено: 30 июн 2018, 20:31 
Старожил

Зарегистрирован: 13 июл 2016, 11:05
Сообщения: 308
x893 писал(а):
На просторах есть и более корректные примеры.


Ну ткните носом в НЕкорректность.
Учту.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Подключение USB-флешки к МК STM32 на SPL библиотеке
СообщениеДобавлено: 30 июн 2018, 21:41 
Старожил
Аватара пользователя

Зарегистрирован: 04 окт 2011, 10:19
Сообщения: 1506
Мелочи.
И так сойдет.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Подключение USB-флешки к МК STM32 на SPL библиотеке
СообщениеДобавлено: 02 июл 2018, 12:13 
Заглядывает иногда

Зарегистрирован: 23 окт 2010, 23:56
Сообщения: 72
После успешного коннекта с флешкой и получения статуса USB_MSC_DEV_CONNECTED столкнулся с проблемой монтирования.
Выполнение доходит до проверки условия if(UB_Fatfs_Mount(USB_0)==FATFS_OK). основного файла

Код:
int main_usb(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,"Write string 1");
            UB_Fatfs_WriteString(&myFile,"Write string 2");
            UB_Fatfs_WriteString(&myFile,"Write string 3");
            // Закрыть файл
            UB_Fatfs_CloseFile(&myFile);
          }
          // Размонтировать флешку
          UB_Fatfs_UnMount(USB_0);      
        }
        //UB_Led_Off(LED_RED);
      }
    }
    else {
      // Если нет доступных USB флешек
      //UB_Led_Off(LED_GREEN);
    }
  }
}


Далее проходит много функций, и крутится в цикле do-while функции USB_disk_read файла usbdisk.c:
Код:
int USB_disk_read(BYTE *buff, DWORD sector, BYTE count)
{
  int ret_wert=-1;
  BYTE status = USBH_MSC_OK;

  if(HCD_IsDeviceConnected(&USB_OTG_Core) && (USB_MSC_HOST_STATUS==USB_MSC_DEV_CONNECTED))
  {     
    do
    {
      status = USBH_MSC_Read10(&USB_OTG_Core, buff, sector, 512*count);
      USBH_MSC_HandleBOTXfer(&USB_OTG_Core ,&USB_Host);
     
      if(!HCD_IsDeviceConnected(&USB_OTG_Core))
      {
        status=USBH_MSC_FAIL;
      }     
    }
    while(status == USBH_MSC_BUSY );
  }
  else {
     status=USBH_MSC_FAIL;
  }
  if(status==USBH_MSC_OK) {
    ret_wert=0;
  }
  else {
    ret_wert=-1;
  }
  return(ret_wert);
}

то есть получается переменная status находится в состоянии USBH_MSC_BUSY. В чем здесь может быть дело?
За основу брал проект: http://mikrocontroller.bplaced.net/word ... age_id=383 Автор пишет что успешно записывал только на 4 Gb флешки, с 8 Gb у него не получалось. Хотя в других источниках говорят, что даже и на 8 и 32 Gb работали с USB. К сожалению нет под рукой флешки на 4, пробовал только на 8 и 16, может в этом дело. Хотелось бы не ограничиваться 4 Gb, они скоро все реже и реже будут встречаться в продаже.
Более подробно проблема расписана еще кем-то вот здесь: http://qaru.site/questions/501444/stm32 ... with-fatfs. Все тоже самое в моем случае. Правда решение которое предлагается в комментарии не пойдет. Проверял - указанные переменные уже имеют тип uint8_t.


Последний раз редактировалось Kvanto 02 июл 2018, 13:43, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Подключение USB-флешки к МК STM32 на SPL библиотеке
СообщениеДобавлено: 02 июл 2018, 13:32 
Заглядывает иногда

Зарегистрирован: 25 сен 2017, 10:57
Сообщения: 71
Откуда: Украина
Kvanto
Пробовал работать в основном с sd картами через кардриадер - работает далеко не со всеми переходниками (было еще - работало а потом перестало с данным кардриадером работать, а на компе продолжал работать ), бывало такое что старая версия fatfs работает а новая нет. По емкости закономерности не заметил, пробовал и 16GB, 8GB, 2GB.
Кардриадер с которым точно работало:
Show


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Подключение USB-флешки к МК STM32 на SPL библиотеке
СообщениеДобавлено: 02 июл 2018, 13:42 
Заглядывает иногда

Зарегистрирован: 23 окт 2010, 23:56
Сообщения: 72
AlexTA писал(а):
Kvanto
Пробовал работать в основном с sd картами через кардриадер - работает далеко не со всеми переходниками (было еще - работало а потом перестало с данным кардриадером работать, а на компе продолжал работать ), бывало такое что старая версия fatfs работает а новая нет. По емкости закономерности не заметил, пробовал и 16GB, 8GB, 2GB.
Кардриадер с которым точно работало:

нет, SD карты не пойдут, нужно использование именно USB Flash. Что еще примечательно, при входе в функцию USBH_MSC_HandleBOTXfer опрашивается значение параметра USBH_MSC_BOTXferParam.BOTState, который, как и все остальные параметры структуры равны 0:

Код:
typedef struct _BOTXfer
{
uint8_t MSCState;
uint8_t MSCStateBkp;
uint8_t MSCStateCurrent;
uint8_t CmdStateMachine;
uint8_t BOTState;
uint8_t BOTStateBkp;
uint8_t* pRxTxBuff;
uint16_t DataLength;
uint8_t BOTXferErrorCount;
uint8_t BOTXferStatus;
} USBH_BOTXfer_TypeDef;


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Подключение USB-флешки к МК STM32 на SPL библиотеке
СообщениеДобавлено: 02 июл 2018, 18:48 
Заглядывает иногда

Зарегистрирован: 25 сен 2017, 10:57
Сообщения: 71
Откуда: Украина
Kvanto
Может еще размер сектора играть роль, должен быть от 512 до 4096 байт. У меня вот с 8Кб сектором не хочет писать, хотя читает резво и бодро рапортует что сектор 512 байт. Могу выложить свой проект, но он под DiscoF4.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Подключение USB-флешки к МК STM32 на SPL библиотеке
СообщениеДобавлено: 02 июл 2018, 18:52 
Заглядывает иногда

Зарегистрирован: 23 окт 2010, 23:56
Сообщения: 72
AlexTA писал(а):
Kvanto
Может еще размер сектора играть роль, должен быть от 512 до 4096 байт. У меня вот с 8Кб сектором не хочет писать, хотя читает резво и бодро рапортует что сектор 512 байт. Могу выложить свой проект, но он под DiscoF4.

выложите, если не затруднит, лишним не будет. Сектора к слову стояли 4096 байт. В чем-то видимо в другом дело.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 57 ]  На страницу 1, 2, 3  След.

Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: alex_k, VladislavS


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB