Перейти к содержанию
    

USB хост флэшки для STM32F105

Привет.

 

Есть ли у кого? Желательно под кокос.

Я попытался переделать в кейле ST-шный пример для платы STM3210C-EVAL, пока глухо.

Ещё и с отладчиком там никак не разберусь. Хотя проц стирается и прошивается ...

 

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

 

Спасибо.

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вот проект под кокос.

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

 

Подключение ключа питания:

// 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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

когда писал свое усб всю отладку внутри пришлось убрать, сбивало обмен...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо, но я в курсе об этом :)

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

 

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

 

И ещё.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

В демо-примерах 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: ...

 

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

 

RCC_ClocksTypeDef RCC_Clocks;

 

RCC_GetClocksFreq ( &RCC_Clocks );

 

В RCC_Clocks - все поля равны 8*10^6, т.е. ни хрена не настроено.

Компилятор - IAR, где эти вещи всегда делались автоматом до вызова main..

 

Бред собачий и только. Роюсь дальше ...

Или я уже с катушек съехал и ни хрена не понимаю.

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

...

Первого я пока не понял, а второе переводится на язык регистров следующим образом:

RCC->AHBENR |= (uint32_t)0x00001000;

Т.е. бит 12 выставляется единица. Но в рефмане RM0008, в п. 7.3.6 на стр. 108 этот бит находится в числе Reserved.

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

 

Да, и вместо USB читайте про OTG.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

SystemInit вызвал руками.

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

По светодиодикам вижу, что вне отладчика USBH_USR_DeviceAttached не вызывается :(

 

Та же флэшка на F407 работает с песнями.

Приложил проект на IAR. Посмотрите кто может, или проверьте у себя.

stm32f105_usb_host_lib.zip

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Косяк нашёл.

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

 

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

Имя производителя, продукта, какой-то серийник тоже нормально считались.

FatFs пока не прикручивал.

 

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

 

Но есть один непонятный и очень неприятный момент - всё это работает только под отладкой. Без отладчика - ни фига не работает.

В прошивке точек останова вообще нет. Просто захожу отладчиком, нажимаю Run - и оно работает.

 

Никто не сталкивался с этой бедой?

1.zip

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Никто не сталкивался с этой бедой?
Нога BOOT0 не притянута к земле и вместо вашей программы вызывается встроенный загрузчик?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

Получил 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 */

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...