Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: USB + mass storage on stm32f107vc
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
batisto4ka
Помогите разобраться с usb. Имеется отладочная плата sk-mstm32f107. На ней есть 2 разъема USB. B для питания платы. А хочу использовтаь для связи контроллера с обычной флэшкой, например для загрузки бута. Вобщем, задача такая, подключить флэшку к плате и прочитать с нее файл. Но возникло куча вопросов:
1. Я так понимаю, что флэшка может быть только слэйвом? Значит необходимо конфигурировать юсб на плате как мастер (хост)?
2. Как настроить юсб?
3. Как настроить ноги МК??
4. Как настроить прерывания?
5. В каком виде приход кадр и где его можно прочитать? Как узнать, пришел ли кадр?
6. Как мой хост узнает, что к нему подключена флэшка?

Ну и далее, вопросы, касающиеся того, как можно прочитать файл с флэшки, как можно найти нужный файл и т.д.

Если кто-то может, разложить по полочкам, пжлст, обьясните новичку. Читаю от википедии до даташита, туговато идет. Буду благодарна за примеры.
kovigor
Цитата(batisto4ka @ Jun 26 2012, 14:33) *

1. Да.
2 ... 6 и все прочее. Ищите примеры проектов для USB (и не только) на ваш МК (на сайте ST и на диске, который шел с отладочной платой), читайте спецификацию USB, а также книжку Гука "Шины PCI, USB и FireWire" и книгу Jan Axelson про Mass-Storage, после чего пробуйте разобраться в примерах.

Если ранее не работали с МК - разбирайтесь сначала в простейших вещах, потом беритесь за USB (тем более - за хост (!!!!!)). Сразу скажу, что задача очень сложная, так что на быстрый результат не надейтесь ...
P.S. Альтернатива - купить отладочную плату с Linux, там все необходимое уже написано. Останется только разобраться, как это применить в своем проекте. Возможно, этот путь окажется для вас подходящим. Естественно, на вашем МК Linux не запустится, посему плату нужно покупать на другом МК. Например, на ARM9:
http://www.starterkit.ru
batisto4ka
Цитата(kovigor @ Jun 26 2012, 14:58) *
1. Да.
2 ... 6 и все прочее. Ищите примеры проектов для USB (и не только) на ваш МК (на сайте ST и на диске, который шел с отладочной платой), читайте спецификацию USB, а также книжку Гука "Шины PCI, USB и FireWire" и книгу Jan Axelson про Mass-Storage, после чего пробуйте разобраться в примерах.

Если ранее не работали с МК - разбирайтесь сначала в простейших вещах, потом беритесь за USB (тем более - за хост (!!!!!)). Сразу скажу, что задача очень сложная, так что на быстрый результат не надейтесь ...

С МК работаю года 3. Работала с простыми интерфейсами USART,CAN,SPI. Вот добралась до USB.
Mareng
ST все уже сделал за нас.
Достаточно скачать stm32_f105-07_f2xx_usb-host-device_lib.zip и внимательно изучить.
Там есть примеры, в т.ч. и host
brag
Мой совет - начните с usb device. хост гораздо сложнее и без опыта реализации девайса хост не сделаете.
загляните в соседнюю ветку про аналогичную задачу, там я еще немного писал про усб.
batisto4ka
Цитата(brag @ Jun 27 2012, 13:54) *
Мой совет - начните с usb device. хост гораздо сложнее и без опыта реализации девайса хост не сделаете.
загляните в соседнюю ветку про аналогичную задачу, там я еще немного писал про усб.

Прошу помочь примером. Я не прошу скидывать все описание юсб для хоста.мне просто нужно понять хотя бы настройку в данный режим стшки.
1. Настройка тактового генератора для юсб.
2. Настройка GPIO.
3. Настройка перрываний.
Хотя бы чтобы можно было к плате sk-mstm32f107 подсключить флэшку и просто послать запрос и получить ответ, что за устройство подключено.

Вот в примерах ничего не понятно. Наример настройка портов ввода/вывода:
Код
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;

1.Что это за GPIO_OType,GPIO_PuPd. В стандартной библиотеке периферии версии 3,5 этих полей структуры инициализации портов ввода/вывода нет.
2.Далее вопрос по поводу выводов. Непонятно, как настраивать питание шины юсб. линии питания должны быть поднянуты к 5 вольтам или устанавливаться на ногах стшки? Питает хост или дэвайс?
3.Как обратиться к буфферу памяти, куда считываются данные?
4.По каким признакам можно настроить прерывания?
5. Как определить, подключено ли устройство к шине или нет? По какому-то прерыванию? Или периодически как-то опрашивать шину, посілая куакую-то команду и ожидая ответа?
kovigor
Цитата(batisto4ka @ Jul 2 2012, 10:04) *
1.Что это за GPIO_OType,GPIO_PuPd. В стандартной библиотеке периферии версии 3,5 этих полей структуры инициализации портов ввода/вывода нет.
2.Далее вопрос по поводу выводов. Непонятно, как настраивать питание шины юсб. линии питания должны быть поднянуты к 5 вольтам или устанавливаться на ногах стшки? Питает хост или дэвайс?
3.Как обратиться к буфферу памяти, куда считываются данные?
4.По каким признакам можно настроить прерывания?
5. Как определить, подключено ли устройство к шине или нет? По какому-то прерыванию? Или периодически как-то опрашивать шину, посілая куакую-то команду и ожидая ответа?


1. Просмотрите .h - файлы, имеющиеся в скачанном вами архиве, а также .c - исходники на предмет обнаружения этих имен.
2. Придется глубоко вникать в исходники и в документацию на ваш МК. Другого пути нет. Кстати, почему вы именно ST выбрали ? Неужели не было ничего попроще ?
batisto4ka
Цитата(kovigor @ Jul 2 2012, 10:58) *
1. Просмотрите .h - файлы, имеющиеся в скачанном вами архиве, а также .c - исходники на предмет обнаружения этих имен.
2. Придется глубоко вникать в исходники и в документацию на ваш МК. Другого пути нет. Кстати, почему вы именно ST выбрали ? Неужели не было ничего попроще ?

1.Пример компилируется с ошибками
2. Нужно разобраться с юсб только для stm32f107 и проверить на отладочной плате.
kovigor
Цитата(batisto4ka @ Jul 2 2012, 11:20) *
1.Пример компилируется с ошибками


А другие примеры тоже компилируются с ошибками ? И вообще, неплохо бы увидеть сообщения об ошибках ...
011119xx
GPIO_OType, GPIO_PuPd - это из STM32F4xx_DSP_StdPeriph_Lib_V1.0.0
batisto4ka
Цитата(011119xx @ Jul 2 2012, 12:36) *
GPIO_OType, GPIO_PuPd - это из STM32F4xx_DSP_StdPeriph_Lib_V1.0.0

В том то и дело, что нет описания в мануалах, как настроить порты для юсб, и в примере тоже.

Сообщения об ошибках
..\..\..\..\Libraries\STM32_USB_OTG_Driver\inc\usb_regs.h(85): error: #20: identifier "__IO" is undefined
011119xx
Ошибка потому что не подключен заголовочный файл с описанием __IO, core_cm4.h или core_cm3.h
brag
Цитата
1. Настройка тактового генератора для юсб.
2. Настройка GPIO.
3. Настройка перрываний.

Это самое простое, что может быть, и без примера чтения даташита должно хватить

Цитата
Хотя бы чтобы можно было к плате sk-mstm32f107 подсключить флэшку и просто послать запрос и получить ответ, что за устройство подключено.

а вот это 80% работы sm.gif если это(device-дескриптор от флешки) получите, то все вопросы отпадут сами sm.gif

Вообще пример использования otg в режиме device есть в соседней ветке кидал свой где-то, no без бибкиотек, чисто работа с регистрами.
batisto4ka
Цитата(brag @ Jul 2 2012, 14:32) *
Это самое простое, что может быть, и без примера чтения даташита должно хватить


а вот это 80% работы sm.gif если это(device-дескриптор от флешки) получите, то все вопросы отпадут сами sm.gif

Вообще пример использования otg в режиме device есть в соседней ветке кидал свой где-то, no без бибкиотек, чисто работа с регистрами.

Кто-то может обьяснить или ткнуть носом. где в документации описаны назначения выводов ID,DP,DM, и как настраивать линии порта ввода-вывода?
011119xx
В Reference Manual, глава 27.
batisto4ka
Наконец-то нашла пример для stm32f107 от ст.Там идет как раз прошивка с флэшки. Контроллер настраивается в режим хоста. Прошиваю примером плату sk-mstm32f107. В примере закоментированы настройки ЖКИ. Оставила только инициализацию юсб и обработку. Подключаю флэшку - не работает. Почему-то всегдафункция USBH_Process входит в состояния то host_idle, то host_usr_input. С первым состоянием понятно, а вот почему обрабатывается второе и проскакиваются остальные-непонятно. В приложении прикрепленный пример.
alx125
Цитата(batisto4ka @ Jul 3 2012, 12:03) *
Наконец-то нашла пример для stm32f107 от ст.Там идет как раз прошивка с флэшки. Контроллер настраивается в режим хоста. Прошиваю примером плату sk-mstm32f107. В примере закоментированы настройки ЖКИ. Оставила только инициализацию юсб и обработку. Подключаю флэшку - не работает. Почему-то всегдафункция USBH_Process входит в состояния то host_idle, то host_usr_input. С первым состоянием понятно, а вот почему обрабатывается второе и проскакиваются остальные-непонятно. В приложении прикрепленный пример.


При вызове ф-ции пользовательского ввода в состоянии host_usr_input необходимо вернуть значение, что-то типа USBH_OK (уточните)
Даже , если у Вас нет ввода с клавиатуры!
batisto4ka
Цитата(alx125 @ Jul 3 2012, 11:23) *
При вызове ф-ции пользовательского ввода в состоянии host_usr_input необходимо вернуть значение, что-то типа USBH_OK (уточните)
Даже , если у Вас нет ввода с клавиатуры!

Непонятно. Причем сдесь клавиатура?
kovigor
Цитата(batisto4ka @ Jul 3 2012, 13:29) *
Непонятно. Причем сдесь клавиатура?

А еще этот пример может быть рассчитан на МК в другом корпусе, в результате линии, используемые USB, попадают на совсем другие линии GPIO. Это нужно проверить и исправить. Почти наверняка ваш проект не работает именно из-за этого. И еще. Ничего из проекта пока не выбрасывайте, закомментируйте только работу с ЖКИ ...
batisto4ka
Цитата(kovigor @ Jul 3 2012, 14:31) *
А еще этот пример может быть рассчитан на МК в другом корпусе, в результате линии, используемые USB, попадают на совсем другие линии GPIO. Это нужно проверить и исправить. Почти наверняка ваш проект не работает именно из-за этого. И еще. Ничего из проекта пока не выбрасывайте, закомментируйте только работу с ЖКИ ...

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

Разбираюсь с файловой ситемой efsl, представленной в примере stm32f105_107_usb_fw. Насколько я понимаю, эта библиотека поддерживает fat12,fat16, fat32, но имена только 8.3 символьные. Подлючаю флэшку на 16 гб - флэшка инициализируется, а файловая система нет (функция fs_verifySanity возвращает 0, количество байт в секторе не равно 512). Подлючаю телефон через юсб, на нем сд карта на 2 гб, на ней пример работает. Разбиваю обычную флэшки на разделы, один из которых делаю 2 гб, форматирую в fat(16). Опять не инициализируется файловая система (на этот раз количество секторов на кластер равно 128, а поддерживаются только 1,2,4,8,16,32,64). Еще раз переразбила флэшку на этот раз размером на 1 гб и отформатировала в fat, и на этот раз все работает.
Теперь вопрос, как сделать так, чтобы можно было работать с флэшки любого размера. Дело в файловой системе? Или в библиотеке?
batisto4ka
Кто-нибудь подскажет?
Basilij
Видимо так никто и не подсказал...

Цитата(011119xx @ Jul 3 2012, 09:07) *
В Reference Manual, глава 27.

Уточню, глава 28. Но лично мне так и не ясно, если я хочу подключать обычную флешку обязательно ли мне ставить микросхему STMPS2141STR.
Шина Vbus получаеться ничего не выдаёт?

Цитата(batisto4ka @ Jul 3 2012, 19:30) *
проблемма была в отладочной плате, нужно было переставить перемычки... добилась связи с юсб, разбираю работу с файловой системой.


А если быть точнее перемыка J1 не была установлена и на флешку не шло питание 5 вольт?? Не подскажите а если нет у меня 5 вольт в схеме, могу ли от трёх вольт запитать USB флешку и будет ли работать? Полагаю вот схема вашей отладочной платы http://www.starterkit.ru/html/doc/SK_MSTM32F107.pdf ?
Basilij
Продолжаю разбираться.
Нашёл два противоречия, может растолкует кто:
На плате sk-mstm32f107 когда подключаем USB-флешку она запитываеться блока питания. Линия Vbus МК и Vbus USB флешки не соеденены.
Хотя в RM0008 на схеме 304 указано что Vbus МК как хоста, и USB-флешки как девайса, должны быть соеденены, также сказано:
Цитата
VBUS valid
The VBUS input ensures that valid VBUS levels are supplied by the charge pump during USB
operations.
Any unforeseen VBUS voltage drop below the VBUS valid threshold (4.25 V) leads to an OTG
interrupt triggered by the session end detected bit (SEDET bit in OTG_FS_GOTGINT). The
application is then required to remove the VBUS power and clear the port power bit. The
charge pump overcurrent flag can also be used to prevent electrical damage. Connect the
overcurrent flag output from the charge pump to any GPIO input and configure it to generate
a port interrupt on the active level. The overcurrent ISR must promptly disable the VBUS
generation and clear the port power bit.

Т.е. Vbus МК в режиме хоста мониторит состояние на линии Vbus, и если оно ниже 4.25 он генерит прерывание.
Получаеться что на плате sk-mstm32f107 просто обошли боком этот момент.

2) Определение факта подключения USB-флешки:
Сказано
Host detection of a peripheral connection
Even if USB peripherals or B-devices can be attached at any time, the OTG_FS will not detect any bus connection until the end of the VBUS sensing (VBUS over 4.75 V).
When VBUS is at a valid level and a remote B-device is attached, the OTG_FS core issues a host port interrupt triggered by the device connected bit in the host port control and status register (PCDET bit in OTG_FS_HPRT).

Я правильно понял при подключении USB-флешки напряжение на линии Vbus МК должно опуститься ниже 4.75 чтобы сгенерировалось прерывание на Хосте? Или я читаю не так...


Господа истолкуйте кто ведает истину!
alx125
Цитата(Basilij @ Sep 6 2012, 12:55) *
Продолжаю разбираться.
Нашёл два противоречия, может растолкует кто:

2) Определение факта подключения USB-флешки:
Сказано
Host detection of a peripheral connection
Even if USB peripherals or B-devices can be attached at any time, the OTG_FS will not detect any bus connection until the end of the VBUS sensing (VBUS over 4.75 V).
When VBUS is at a valid level and a remote B-device is attached, the OTG_FS core issues a host port interrupt triggered by the device connected bit in the host port control and status register (PCDET bit in OTG_FS_HPRT).


Смысл простой: детекция подключения переферии не сработает, если напряжение Vbus <=4,75V

Ekka
А что за библиотеку Вы брали? Мне тоже надо(((
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.