реклама на сайте
подробности

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> USB хост флэшки для STM32F105
hd44780
сообщение Mar 21 2014, 15:09
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 202
Регистрация: 26-08-05
Из: Донецк, ДНР
Пользователь №: 7 980



Привет.

Есть ли у кого? Желательно под кокос.
Я попытался переделать в кейле ST-шный пример для платы STM3210C-EVAL, пока глухо.
Ещё и с отладчиком там никак не разберусь. Хотя проц стирается и прошивается ...

Ключ питания USB я проверил отдельно и вольтметром и светодиодиком - он адекватный.

Спасибо.



--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса.
(с) Мария Эдуарда
Go to the top of the page
 
+Quote Post
hd44780
сообщение Mar 22 2014, 16:13
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 202
Регистрация: 26-08-05
Из: Донецк, ДНР
Пользователь №: 7 980



Вот проект под кокос.
Может кто глянет, почему флэшка не определяется.

Подключение ключа питания:
// PA8 - Fault (overcurrent) - IN
// PA10 - USB Power - OUT

Что меня удивляет, что в примерах всё конфигурирование USB - 2 строки:
RCC_OTGFSCLKConfig(RCC_OTGFSCLKSource_PLLVCO_Div3);
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_OTG_FS, ENABLE);

USB пины вообще нигде не конфигурятся, хотя на F4 там есть всё - и настройка порта, и AF - полный боекомплект ....

И ещё.
Под отладчиком в функции

Код
void USB_OTG_BSP_EnableInterrupt(USB_OTG_CORE_HANDLE *pdev)
{
    NVIC_InitTypeDef NVIC_InitStructure;

    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
    NVIC_InitStructure.NVIC_IRQChannel = OTG_FS_IRQn;
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init ( &NVIC_InitStructure );
}


в функции NVIC_Init железно вылетает в DefaultHandler.
Без отладчика нормально проходит (проверял светодиодиками).

Спасибо.
Прикрепленные файлы
Прикрепленный файл  STM32F105_USB_Host_Coocox.rar ( 173.2 килобайт ) Кол-во скачиваний: 20
 


--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса.
(с) Мария Эдуарда
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Mar 23 2014, 03:25
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



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

когда писал свое усб всю отладку внутри пришлось убрать, сбивало обмен...
Go to the top of the page
 
+Quote Post
hd44780
сообщение Mar 23 2014, 04:31
Сообщение #4


Профессионал
*****

Группа: Свой
Сообщений: 1 202
Регистрация: 26-08-05
Из: Донецк, ДНР
Пользователь №: 7 980



Спасибо, но я в курсе об этом sm.gif
В отладке я до обмена просто не дохожу из-за сбоев NVIC.

Уже начинаю жалеть, что не поставил туда старый добрый F407 sad.gif ...

И ещё.
Никак не могу никак понять, что такое нога ID, зачем оно надо? Код хоста смотрел, оно к ней вроде не обращается. У меня в схеме её нет.


--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса.
(с) Мария Эдуарда
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Mar 23 2014, 04:44
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Вывод ID определяет роль OTG. Если не вдаваться в подробности, то 0 = host, 1 = device.
Go to the top of the page
 
+Quote Post
hd44780
сообщение Mar 23 2014, 05:13
Сообщение #6


Профессионал
*****

Группа: Свой
Сообщений: 1 202
Регистрация: 26-08-05
Из: Донецк, ДНР
Пользователь №: 7 980



Спасибо, понял. А я должен на него что-то подавать, либо конфигурить его как-то?

Прошёлся поиском - тьма тьмущая тем с такой же проблемой и все без конкретных решений sad.gif


--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса.
(с) Мария Эдуарда
Go to the top of the page
 
+Quote Post
hd44780
сообщение Mar 23 2014, 12:11
Сообщение #7


Профессионал
*****

Группа: Свой
Сообщений: 1 202
Регистрация: 26-08-05
Из: Донецк, ДНР
Пользователь №: 7 980



Ещё одна муть голубая.

В демо-примерах USB включается командами:

// Select USBCLK source
RCC_OTGFSCLKConfig(RCC_OTGFSCLKSource_PLLVCO_Div3);

// Enable the USB clock
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_OTG_FS, ENABLE) ;

Первого я пока не понял, а второе переводится на язык регистров следующим образом:
RCC->AHBENR |= (uint32_t)0x00001000;
Т.е. бит 12 выставляется единица. Но в рефмане RM0008, в п. 7.3.6 на стр. 108 этот бит находится в числе Reserved.

На самом деле синхронизация влючается здесь:
// APB1ENR
// RCC_APB1Periph_USB = (uint32_t)0x00800000 -- bit 23
RCC_APB1PeriphClockCmd ( RCC_APB1Periph_USB, ENABLE );

т.е.
RCC->APB1ENR |= (uint32_t)0x00800000;

Но и это пока не помогло crying.gif ...

Поставил в начало main

RCC_ClocksTypeDef RCC_Clocks;

RCC_GetClocksFreq ( &RCC_Clocks );

В RCC_Clocks - все поля равны 8*10^6, т.е. ни хрена не настроено.
Компилятор - IAR, где эти вещи всегда делались автоматом до вызова main..

Бред собачий и только. Роюсь дальше ...
Или я уже с катушек съехал и ни хрена не понимаю.

Кста. Прерывание USB не вызывается вообще - проверено светодиодиком.


--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса.
(с) Мария Эдуарда
Go to the top of the page
 
+Quote Post
ViKo
сообщение Mar 23 2014, 12:31
Сообщение #8


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(hd44780 @ Mar 23 2014, 15:11) *
Ещё одна муть голубая.
...
Первого я пока не понял, а второе переводится на язык регистров следующим образом:
RCC->AHBENR |= (uint32_t)0x00001000;
Т.е. бит 12 выставляется единица. Но в рефмане RM0008, в п. 7.3.6 на стр. 108 этот бит находится в числе Reserved.

Вам надо смотреть п. 8.3.6. Сочувствую.

Да, и вместо USB читайте про OTG.
Go to the top of the page
 
+Quote Post
hd44780
сообщение Mar 23 2014, 14:23
Сообщение #9


Профессионал
*****

Группа: Свой
Сообщений: 1 202
Регистрация: 26-08-05
Из: Донецк, ДНР
Пользователь №: 7 980



Про регистры понял, спасибо.

SystemInit вызвал руками.
После этого оно слегка чихнуло. Callback USBH_USR_DeviceAttached вызвался. Как я понимаю, хост что-то увидел. Дальше - тишина...
По светодиодикам вижу, что вне отладчика USBH_USR_DeviceAttached не вызывается sad.gif

Та же флэшка на F407 работает с песнями.
Приложил проект на IAR. Посмотрите кто может, или проверьте у себя.
Прикрепленные файлы
Прикрепленный файл  stm32f105_usb_host_lib.zip ( 501.74 килобайт ) Кол-во скачиваний: 22
 


--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса.
(с) Мария Эдуарда
Go to the top of the page
 
+Quote Post
hd44780
сообщение Mar 25 2014, 08:35
Сообщение #10


Профессионал
*****

Группа: Свой
Сообщений: 1 202
Регистрация: 26-08-05
Из: Донецк, ДНР
Пользователь №: 7 980



Косяк нашёл.
На ST-шной плате stm3210c-eval на проце стоит кварц 25МГц, под него сделаны все ихние примеры. А у меня на плате - 8 МГц. Поэтому и не работало.

После соответствующих правок все callback-и успешно вызвались и хост/флэшка вошли в рабочий режим.
Имя производителя, продукта, какой-то серийник тоже нормально считались.
FatFs пока не прикручивал.

Подправленные файлы

Но есть один непонятный и очень неприятный момент - всё это работает только под отладкой. Без отладчика - ни фига не работает.
В прошивке точек останова вообще нет. Просто захожу отладчиком, нажимаю Run - и оно работает.

Никто не сталкивался с этой бедой?
Прикрепленные файлы
Прикрепленный файл  1.zip ( 66.11 килобайт ) Кол-во скачиваний: 17
 


--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса.
(с) Мария Эдуарда
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Mar 25 2014, 08:51
Сообщение #11


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(hd44780 @ Mar 25 2014, 10:35) *
Никто не сталкивался с этой бедой?
Нога BOOT0 не притянута к земле и вместо вашей программы вызывается встроенный загрузчик?


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
hd44780
сообщение Mar 25 2014, 08:59
Сообщение #12


Профессионал
*****

Группа: Свой
Сообщений: 1 202
Регистрация: 26-08-05
Из: Донецк, ДНР
Пользователь №: 7 980



Нога BOOT через 510 ом на земле.

Да и вряд ли это причина. На этом же проце висит дисплей, VS1053, SD карта. Я с ними тестировал вообще без отладчика, никогда подобных проблем не видел.


--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса.
(с) Мария Эдуарда
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Mar 25 2014, 09:02
Сообщение #13


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Значит циклится где-то. Отладчик никаких дополнительных действий не делает? Ну там PLL включает или что-то подобное. На лету подключиться и посмотреть, куда его унесло нельзя?


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
hd44780
сообщение Mar 25 2014, 09:16
Сообщение #14


Профессионал
*****

Группа: Свой
Сообщений: 1 202
Регистрация: 26-08-05
Из: Донецк, ДНР
Пользователь №: 7 980



А кто его знает, делает он что или нет ..

Выключил птичку "Run to main", на лету попробовал, сразу оказался в ResetHandler. Отладчик - STM32F4Discovery.

Сейчас попробую в Coocox перетащить ...


--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса.
(с) Мария Эдуарда
Go to the top of the page
 
+Quote Post
hd44780
сообщение Mar 25 2014, 12:30
Сообщение #15


Профессионал
*****

Группа: Свой
Сообщений: 1 202
Регистрация: 26-08-05
Из: Донецк, ДНР
Пользователь №: 7 980



Перенёс в кокос.

Получил defaultHandler в функции

Код
static NVIC_InitTypeDef NVIC_InitStructure;
void USB_OTG_BSP_EnableInterrupt(void)
{
  /* Enable USB Interrupt */
  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);

  NVIC_InitStructure.NVIC_IRQChannel = OTG_FS_IRQn;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);
}


В последней строчке - на функции NVIC_Init.
Если захожу туда пошагово, DefaltHandlera в ней нет, но он появляется в любой следующей функции, через которую я пытаюсь сделать StepOver.
Стек - 10 кил:

#define STACK_SIZE 0x00002800 /*!< The Stack size suggest using even number - 10KB */

Что за хрень такая? Замахался уже sad.gif ....


--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса.
(с) Мария Эдуарда
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 08:41
Рейтинг@Mail.ru


Страница сгенерированна за 0.01486 секунд с 7
ELECTRONIX ©2004-2016