Legath 0 2 ноября, 2012 Опубликовано 2 ноября, 2012 (изменено) · Жалоба Добрый день. Как я обмолвился в соседней теме, хочу создать устройство комбинированного локатора которое взаимодействует с ПК посредством usb. За основу взял шаблон проекта usb cdc из набора с сайта st. недостающие файлы (usbd_desc.c usbd_desc.h usbd_usr.c ) взял оттуда же, из демонстрации. Функции инициализации не менял. Но при подключении к ПК в dmesg упоминаний нет. Грешу на то, что конфликтует инициализация, т.к. она от ОС. Подскажите в какую сторону начать отладку? В отладчике пока не могу посмотреть, st-util не прошивает файл больше 40кб, openocd не работает с eclipse из-за ошибки в тулчейне. Разъем исправен точно, проверял демонстрационной прошивкой. В проекте есть лишние файлы для host библиотеки, они выключены из сборки в eclipse. usb.tar.gz Изменено 2 ноября, 2012 пользователем Legath Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AHTOXA 14 2 ноября, 2012 Опубликовано 2 ноября, 2012 · Жалоба А программа-то работает вообще? Лампочкой, например, мигает? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Legath 0 2 ноября, 2012 Опубликовано 2 ноября, 2012 · Жалоба Нет, шим не генерируется Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AHTOXA 14 2 ноября, 2012 Опубликовано 2 ноября, 2012 · Жалоба Что-то я не вижу обработчика прерывания USB (OTG_FS_IRQHandler()). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Legath 0 5 ноября, 2012 Опубликовано 5 ноября, 2012 · Жалоба Добавил обработчик со следующим текстом void OTG_FS_IRQHandler(void) { USBD_OTG_ISR_Handler (&USB_OTG_dev); } Шим генерируется, но usb не инициализируется. в dmesg нет упоминания. и в прерывание по usb не уходит. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Артём__ 0 5 ноября, 2012 Опубликовано 5 ноября, 2012 · Жалоба Добавил обработчик со следующим текстом Шим генерируется, но usb не инициализируется. в dmesg нет упоминания. и в прерывание по usb не уходит. А куда уходит? Флаги прерывания устанавливаются? Или usb совсем не проинициализирован? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AHTOXA 14 5 ноября, 2012 Опубликовано 5 ноября, 2012 · Жалоба На всякий случай напомню, что в cpp-файлах обработчик прерывания должен быть объявлен как extern "C" void OTG_FS_IRQHandler(void) { ... Сравните процедуры инициализации (init_clocks() в sysinit.cpp и SetSysClock() в system_stm32f4xx.c). Убедитесь, что частоты совпадают (что частота USB правильная). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Артём__ 0 5 ноября, 2012 Опубликовано 5 ноября, 2012 · Жалоба На всякий случай напомню, что в cpp-файлах обработчик прерывания должен быть объявлен как extern "C" void OTG_FS_IRQHandler(void) { ... В STM-ских хидерах С++ не поддержан? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AHTOXA 14 5 ноября, 2012 Опубликовано 5 ноября, 2012 · Жалоба Нет, не поддержан. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Legath 0 5 ноября, 2012 Опубликовано 5 ноября, 2012 (изменено) · Жалоба Extern не нужен, обработчик в C файле. Процедуры инициализации почти одинаковые и , насколько вижу, USB не затрагивают. Не может быть из-за того что USB_OTG_BSP_EnableInterrupt пустая? Прерывание получается не прописано. А слона то я и не заметил, USB_OTG_BSP_Init не перетащил из примера/ Но чего то все еще не хватает. Изменено 5 ноября, 2012 пользователем Legath Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Legath 0 6 ноября, 2012 Опубликовано 6 ноября, 2012 (изменено) · Жалоба Получил заветную строку 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 - результата нет. П.С. заранее прошу прощения за то что превратил тему в блог Изменено 6 ноября, 2012 пользователем Legath Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AHTOXA 14 6 ноября, 2012 Опубликовано 6 ноября, 2012 · Жалоба П.С. заранее прошу прощения за то что превратил тему в блог Ничего-ничего, нам тоже интересно, мы все за вас болеем:) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Legath 0 19 ноября, 2012 Опубликовано 19 ноября, 2012 (изменено) · Жалоба Вновь занялся проблемой, раскопал что ядро отвергает устройство с ошибкой 110 (ETIMEDOUT - Connection timed out ). Посему делаю вывод что при подключении что то не отсылается. upd: что странно, если запускать в отладчике то все работает. разрешил idle hook с телом __NOP() и девайс определился, вечером буду проверять на работу с данными. Изменено 19 ноября, 2012 пользователем Legath Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AHTOXA 14 19 ноября, 2012 Опубликовано 19 ноября, 2012 · Жалоба idle hook с телом __NOP() - это даже не шаманство, это чистое плацебо:) Я в том смысле, что это абсолютно ничего не меняет в работе оси. Вспоминайте, что ещё поменяли вместе с этим хуком. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Legath 0 20 ноября, 2012 Опубликовано 20 ноября, 2012 · Жалоба так без него то не работает. сам в шоке был когда заметил. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться