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

Добрый день.

Как я обмолвился в соседней теме, хочу создать устройство комбинированного локатора которое взаимодействует с ПК посредством usb.

За основу взял шаблон проекта usb cdc из набора с сайта st. недостающие файлы (usbd_desc.c usbd_desc.h usbd_usr.c ) взял оттуда же, из демонстрации. Функции инициализации не менял.

Но при подключении к ПК в dmesg упоминаний нет. Грешу на то, что конфликтует инициализация, т.к. она от ОС. Подскажите в какую сторону начать отладку?

В отладчике пока не могу посмотреть, st-util не прошивает файл больше 40кб, openocd не работает с eclipse из-за ошибки в тулчейне.

Разъем исправен точно, проверял демонстрационной прошивкой. В проекте есть лишние файлы для host библиотеки, они выключены из сборки в eclipse.

usb.tar.gz

Изменено пользователем Legath

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


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

Добавил обработчик со следующим текстом

void OTG_FS_IRQHandler(void)
{
  USBD_OTG_ISR_Handler (&USB_OTG_dev);
}

 

Шим генерируется, но usb не инициализируется. в dmesg нет упоминания. и в прерывание по usb не уходит.

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


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

Добавил обработчик со следующим текстом

Шим генерируется, но usb не инициализируется. в dmesg нет упоминания. и в прерывание по usb не уходит.

А куда уходит?

Флаги прерывания устанавливаются? Или usb совсем не проинициализирован?

 

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


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

На всякий случай напомню, что в cpp-файлах обработчик прерывания должен быть объявлен как

extern "C" void OTG_FS_IRQHandler(void)
{
...

Сравните процедуры инициализации (init_clocks() в sysinit.cpp и SetSysClock() в system_stm32f4xx.c). Убедитесь, что частоты совпадают (что частота USB правильная).

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


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

На всякий случай напомню, что в cpp-файлах обработчик прерывания должен быть объявлен как

extern "C" void OTG_FS_IRQHandler(void)
{
...

В STM-ских хидерах С++ не поддержан?

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


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

Extern не нужен, обработчик в C файле. Процедуры инициализации почти одинаковые и , насколько вижу, USB не затрагивают.

Не может быть из-за того что USB_OTG_BSP_EnableInterrupt пустая? Прерывание получается не прописано.

 

А слона то я и не заметил, USB_OTG_BSP_Init не перетащил из примера/

 

Но чего то все еще не хватает.

Изменено пользователем Legath

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


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

Получил заветную строку

usb 3-1: new full speed USB device number 11 using ohci_hcd

 

Дело было в void USB_OTG_BSP_Init(USB_OTG_CORE_HANDLE *pdev) , ID pin неправильно инициализировал.

 

Но устройство в /dev не появляется. Буду разбираться дальше.

 

UPD: выставил гарантированно работающие VID/PID - результата нет.

 

П.С. заранее прошу прощения за то что превратил тему в блог

Изменено пользователем Legath

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


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

П.С. заранее прошу прощения за то что превратил тему в блог

Ничего-ничего, нам тоже интересно, мы все за вас болеем:)

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


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

Вновь занялся проблемой, раскопал что ядро отвергает устройство с ошибкой 110 (ETIMEDOUT - Connection timed out ). Посему делаю вывод что при подключении что то не отсылается.

 

upd: что странно, если запускать в отладчике то все работает.

 

разрешил idle hook с телом __NOP() и девайс определился, вечером буду проверять на работу с данными.

Изменено пользователем Legath

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


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

idle hook с телом __NOP() - это даже не шаманство, это чистое плацебо:)

Я в том смысле, что это абсолютно ничего не меняет в работе оси. Вспоминайте, что ещё поменяли вместе с этим хуком.

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


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

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

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

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

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

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

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

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

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

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