Миландр

Ключевым подразделением нашей компании
является Центр Проектирования интегральных микросхем
Текущее время: 2021-окт-23 16:51

Часовой пояс: UTC+03:00




Начать новую тему  Ответить на тему  [ 5 сообщений ] 
Автор Сообщение
СообщениеДобавлено: 2021-сен-27 09:55 
Не в сети

Зарегистрирован: 2021-сен-27 09:19
Сообщения: 2
Организация: ОАО "ЛЕНПОЛИГРАФМАШ"
Здравствуйте, пытаюсь разобраться с usb. В общем, написал простенькую программу для передачи по usb, используя стандартные usb библиотеки идущие с keil. Переделал пример с CDC под свой класс.
В main.c 2 обработчика один на прием (2 OUT), другой на передачу (83 IN). Для приемопередачи на ПК использую libusbK + Qt. Сперва отправляю команду 0x1B 0x92 получаю статус. Потом отправляю 0x1B 0xE1 (команду на прием данных). После чего отправляю в цикле IN запросы. Цель - принять тестовый массив, состоящий из много раз повторяющихся кусков (чтобы передать большой массив, сделал его просто из кусков, чтобы не занимать ram). В какой то момент передачи массива программа на МК улетает в hardFault, причину пока так и не могу найти. Ставил брэкпоинты в разных местах и на отправках stall и на обработчиках ошибок. stall только при попытке получить device qualifier ну при full speed это норма. В обработчик ошибок никогда не попадаю. hard fault валится почти в начале отправки массива, но каждый раз при разном количестве переданных байт.
Прилагаю проект для keil.


Вложения:
mdr.zip [883.96 КБ]
28 скачиваний
Вернуться к началу
 Заголовок сообщения: Re: USB hardFault не могу найти причину
СообщениеДобавлено: 2021-сен-27 10:22 
Не в сети
Support
Аватара пользователя

Зарегистрирован: 2018-авг-10 23:14
Сообщения: 448
Организация: АО «ПКК Миландр»
Откуда: Зеленоград
meykj писал(а): *
Здравствуйте, пытаюсь разобраться с usb. В общем, написал простенькую программу для передачи по usb, используя стандартные usb библиотеки идущие с keil. Переделал пример с CDC под свой класс.
В main.c 2 обработчика один на прием (2 OUT), другой на передачу (83 IN). Для приемопередачи на ПК использую libusbK + Qt. Сперва отправляю команду 0x1B 0x92 получаю статус. Потом отправляю 0x1B 0xE1 (команду на прием данных). После чего отправляю в цикле IN запросы. Цель - принять тестовый массив, состоящий из много раз повторяющихся кусков (чтобы передать большой массив, сделал его просто из кусков, чтобы не занимать ram). В какой то момент передачи массива программа на МК улетает в hardFault, причину пока так и не могу найти. Ставил брэкпоинты в разных местах и на отправках stall и на обработчиках ошибок. stall только при попытке получить device qualifier ну при full speed это норма. В обработчик ошибок никогда не попадаю. hard fault валится почти в начале отправки массива, но каждый раз при разном количестве переданных байт.
Прилагаю проект для keil.
Здравствуйте!

Сообщите, пожалуйста, все действия по контролю обмена выполняются исключительно в режиме отладочной сессии? Если работа с микроконтроллером 1986ВЕ1Т ведется в режиме отладки, убедитесь, пожалуйста, что закрыты окна "Memory" и любые окна с открытыми состояниями регистров согласно файлу .SVD (не лишним будет закрыть и окна "Watch", дополнительно выставив опцию во View > "Periodic Window Update"). Это связано с ошибкой 0014 "Возникновение Hard Fault в режиме run time при отображении содержимого периферии" из файла errata на микросхему. Соответственно, просьба учитывать это и парировать данную ошибку рекомендациями выше на момент выполнения кода (в момент остановки программы окна с содержанием регистров и областью памяти микроконтроллера можно открыть). Спасибо за обращение

_________________
Отдел технической поддержки support@milandr.ru


Вернуться к началу
 Заголовок сообщения: Re: USB hardFault не могу найти причину
СообщениеДобавлено: 2021-сен-27 10:37 
Не в сети

Зарегистрирован: 2021-сен-27 09:19
Сообщения: 2
Организация: ОАО "ЛЕНПОЛИГРАФМАШ"
Спасибо, помогло!


Вернуться к началу
 Заголовок сообщения: Re: USB hardFault не могу найти причину
СообщениеДобавлено: 2021-сен-28 19:48 
Не в сети

Зарегистрирован: 2009-июл-21 14:13
Сообщения: 1588
Откуда: Тула
meykj писал(а): *
Спасибо, помогло!
У Вас по коду
	usb_clock.USB_USBC1_Source = USB_C1HSEdiv2;
	usb_clock.USB_PLLUSBMUL = USB_PLLUSBMUL12;
по документации на PLL можно подавать минимум 6 МГц.

_________________
сочувствующий…


Вернуться к началу
 Заголовок сообщения: Re: USB hardFault не могу найти причину
СообщениеДобавлено: 2021-сен-29 15:18 
Не в сети
Support
Аватара пользователя

Зарегистрирован: 2018-авг-10 23:14
Сообщения: 448
Организация: АО «ПКК Миландр»
Откуда: Зеленоград
prostoRoman писал(а): *
meykj писал(а): *
Спасибо, помогло!
У Вас по коду
	usb_clock.USB_USBC1_Source = USB_C1HSEdiv2;
	usb_clock.USB_PLLUSBMUL = USB_PLLUSBMUL12;
по документации на PLL можно подавать минимум 6 МГц.
Здравствуйте!

Спасибо за информацию, вероятно, пользователь взял этот фрагмент кода напрямую из поставляемых примеров в составе установочного пака для IDE Keil, в коде по настройке тактирования для USB там также на вход PLL подаётся частота 4 МГц, когда как частота следования импульсов тактовых сигналов PLL должна быть не менее 6 МГц. Это работает, но это является нарушением предельно-допустимых и предельных режимов эксплуатации микросхем (ошибка вытекает из старых проектов документации, где параметры PLL еще уточнялись, и 4 МГц были допустимы на бумаге, но на практике для стабильной работы важна подача частоты не менее 6 МГц). Ошибка зафиксирована, пример будет исправлен, в свою очередь, остальных пользователей прошу обратить внимание на важность подачи на блок PLL в 1986ВЕ1Т (1986ВЕ9х аналогично) частоты не менее 6 МГц и не более 16 МГц.

_________________
Отдел технической поддержки support@milandr.ru


Вернуться к началу
Показать сообщения за:  Поле сортировки  
Начать новую тему  Ответить на тему  [ 5 сообщений ] 

Часовой пояс: UTC+03:00


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 2 гостя


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Перейти: 

Создано на основе phpBB® Forum Software © phpBB Limited
Русская поддержка phpBB