Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: USB хост флэшки для STM32F105
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
hd44780
Привет.

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

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

Спасибо.

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

Подключение ключа питания:
// 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.
Без отладчика нормально проходит (проверял светодиодиками).

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

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

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

И ещё.
Никак не могу никак понять, что такое нога ID, зачем оно надо? Код хоста смотрел, оно к ней вроде не обращается. У меня в схеме её нет.
aaarrr
Вывод ID определяет роль OTG. Если не вдаваться в подробности, то 0 = host, 1 = device.
hd44780
Спасибо, понял. А я должен на него что-то подавать, либо конфигурить его как-то?

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

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

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

Да, и вместо USB читайте про OTG.
hd44780
Про регистры понял, спасибо.

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

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

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

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

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

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

Да и вряд ли это причина. На этом же проце висит дисплей, VS1053, SD карта. Я с ними тестировал вообще без отладчика, никогда подобных проблем не видел.
Сергей Борщ
Значит циклится где-то. Отладчик никаких дополнительных действий не делает? Ну там PLL включает или что-то подобное. На лету подключиться и посмотреть, куда его унесло нельзя?
hd44780
А кто его знает, делает он что или нет ..

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

Сейчас попробую в Coocox перетащить ...
hd44780
Перенёс в кокос.

Получил 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 ....
Сергей Борщ
Цитата(hd44780 @ Mar 25 2014, 14:30) *
Если захожу туда пошагово, DefaltHandlera в ней нет, но он появляется в любой следующей функции, через которую я пытаюсь сделать StepOver.
Что-то не нравится ему. Может частота ГУНа PLL выходит за допустимые пределы 36...144 МГц?
hd44780
Ошибка в настройке NVIC. Вот так надо:

NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;

Разбираюсь дальше.
hd44780
Ни хрена не выходит. Без отладчика не виснет, но и не работает, не находит флэшку.
В отладчике вылетает на NVIC_init sad.gif

Есть errata для ревизии Z:

In order to guarantee correct operation of the USB OTG FS peripheral, the AHB frequency should be configured to be not less than 14.2 MHz.

ST-Link utility показывает, что у меня Rev Z. Надо смотреть, где этот AHB настраивается ...
hd44780
Плюнул я на всё это, поменял на плате кварц на 25MHz (такой же как на ST-шных и прочих платах).
На иаровской прошивке с родными конфигами от ST флэшка завелась с пол-пинка как в отладке, так и без неё.

FatFs и кокос пока не делал.

Честно говоря, даже не ожидал таких граблей .. Может я рефман плохо читал ...
ViKo
Цитата(hd44780 @ Mar 26 2014, 08:22) *
Честно говоря, даже не ожидал таких граблей .. Может я рефман плохо читал ...

Если не знаете, где настраивается AHB, значит, вы его не читали вообще.
hd44780
Да, наверное sad.gif ... Либо не нашёл, где оно описано.

Под кокос сделал, работает. Ещё FatFs прикручу и всё sm.gif .
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.