Реклама на сайте DatasheetsDatasheets

KAZUS.RUN - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Книги и журналы
FAQ по электронике

  Datasheets
Поиск SMD
Онлайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Схемы и проекты
Принципиальные схемы
  Программы
Каталог сайтов
Калькуляторы
  Форумы по электронике
Помощь проекту

AVR Раздел по микроконтроллерам компании Atmel - AVR / ATtiny / ATmega / ATMega128 / ATxmega, вопросы по программированию в AVR studio и все, относящееся к AVR...

 
Опции темы

Не могу запустить USB контроллер ATMega32U4

Непрочитано 28.01.2013, 13:26  
Slava1355
Прописка
 
Аватар для Slava1355
 
Регистрация: 13.06.2004
Адрес: Москва
Сообщений: 193
Сказал спасибо: 12
Сказали Спасибо 32 раз(а) в 18 сообщении(ях)
Slava1355 на пути к лучшему
По умолчанию Не могу запустить USB контроллер ATMega32U4

Коллеги!
Нужна помощь в программировании USB контроллера микропроцессора ATMega32U4.
В моем проекте нужно обеспечить связь по USB между PC (хостом) и прибором на базе ATMega32U4.
Решил запрограммировать встроенный USB контроллер самостоятельно, благо что материалов по программированию USB достаточно. Проект делается на ассемблере.
Но встал в тупик при попытке запустить встроенный контроллер USB. Задаю все параметры, все регистры и переменные, но при подключении к PC не происходит процесс обмена (энумерации), вообще отсутствуют прерывания от конечной точки и передача какой либо информации.
Макетная плата проверена, в начале работы со встроенным USB загрузчиком работала. Поэтому вариант ошибок в макетной плате исключается.
USB PLL сконфигурирована и работает корректно, проверялось с использованием быстрого встроенного Timer4.
Фрагмент кода с конфигурацией USB контроллера:
Код:
		;----------------- Set PLL ----------------------------
		ldi		r16,0x4A		;Set PLL Frequency
		out		PLLFRQ,r16		;	PLLFRQ

		ldi		r16,0x02		;Switch On PLL 
		out		PLLCSR,r16		;	PLLCSR

PLL_Lc:in		r16,PLLCSR		;
		sbrs	r16,PLOCK		;Wait PLL Lock
		rjmp	PLL_Lc			;
		;---------------- Init USB conroller -------------------
		ldi		r16,0x01		;Set to enable the USB pad regulator
		sts		UHWCON,r16		;	UHWCON

		ldi		r16,0x90		;
		sts		USBCON,r16		;Swich on USB controller
		sts		USBCON,r16		;Swich on USBclk (0=›FRZCLK)

		ldi		r16,0x00		;Clear USB Device INT Flags
		sts		UDINT,r16		;	UDINT

		ldi		r16,0x10		;Set USB Device INT Enable (WAKEUPI)
		sts		UDIEN,r16		;	UDIEN
		;--------------------------------------------------------

		;================= Init USB Endpoints ===================
		;-------------- Init Ep0 (Control) ----------------------
		ldi		r16,0x00		;Select Endpoint #0
		sts		UENUM,r16		;	UENUM

		ldi		r16,0x01		;Enable Endpoint #0
		sts		UECONX,r16		;	UECONX

Cfg:	ldi		r16,0x00		;Configure Endpoint #0
		sts		UECFG0x,r16		;Set Ep0 - "Control", bidirectional

		ldi		r16,0x32		;Configure Endpoint #0
		sts		UECFG1x,r16		;Set Ep0 Size=64 bit, One bank, Memory Allocate enable
		
		lds		r16,UESTA0X		;Read Endpoint Status Regiser
		sbrs	r16,CFGOK		;EP Configuration OK?
		rjmp	Cfg				;If NOT then GoTo Repeat

		ldi		r16,0x00		;Clear Endpoints INT Flags
		sts		UEINTx,r16		;	UEINTX

		ldi		r16,0x0C		;Set Control Endpoint INT Enable
		sts		UEIENx,r16		;	UEIENX

		ldi		r16,0x00		;Set USB device general registers Set 00/04 High/Low speed 
		sts		UDCON,r16		;	UDCON Connect Device (0=›DETACH)
		;--------------------------------------------------------
		sei
loop:	rjmp	loop
Дамп регистров контроллера после появления сигнала WAKEUP в приложенном рисунке.
Прибор проверяется подключением к PC. Ожидалось увидеть в контроллере пакеты SETUP с запросами дескрипторов и т.д.
В программе все выглядит в соответствии с мануалами и описаниями, но ничего не работает.
В чем засада?
Миниатюры:
Нажмите на изображение для увеличения
Название: ExtIO_registers.jpg
Просмотров: 75
Размер:	87.8 Кб
ID:	42834  
Реклама:

Последний раз редактировалось Slava1355; 28.01.2013 в 14:03. Причина: Правка кода
Slava1355 вне форума  
Непрочитано 28.01.2013, 13:58  
Wiza_
Гражданин KAZUS.RUN
 
Регистрация: 29.12.2012
Адрес: Питер
Сообщений: 980
Сказал спасибо: 131
Сказали Спасибо 230 раз(а) в 157 сообщении(ях)
Wiza_ на пути к лучшему
По умолчанию Re: Не могу запустить USB контроллер ATMega32U4

sei есть ?
Wiza_ вне форума  
Непрочитано 28.01.2013, 14:08  
Slava1355
Прописка
 
Аватар для Slava1355
 
Регистрация: 13.06.2004
Адрес: Москва
Сообщений: 193
Сказал спасибо: 12
Сказали Спасибо 32 раз(а) в 18 сообщении(ях)
Slava1355 на пути к лучшему
По умолчанию Re: Не могу запустить USB контроллер ATMega32U4

Сообщение от Wiza_ Посмотреть сообщение
sei есть ?
Да, конечно. Я дополнил код в исходном сообщении чтобы была видна программная "заглушка".
Кроме того, дамп регистров был снят в коде программы обслуживания прерывания устройства.
При включении и активации USB контроллера, он через 3 мс неактивности USB линии засыпает.
При появлении активности на линии, вырабатывается прерывание WAKEUPI, по которому я пробуждаю контроллер и делаю дамп всех регистров.
Но, после этого, никаких прерываний от конечных точек (о приеме информации или setup пакетов) не появляется.

Последний раз редактировалось Slava1355; 28.01.2013 в 14:10.
Slava1355 вне форума  
Непрочитано 28.01.2013, 14:26  
Wiza_
Гражданин KAZUS.RUN
 
Регистрация: 29.12.2012
Адрес: Питер
Сообщений: 980
Сказал спасибо: 131
Сказали Спасибо 230 раз(а) в 157 сообщении(ях)
Wiza_ на пути к лучшему
По умолчанию Re: Не могу запустить USB контроллер ATMega32U4

Power On the USB interface
• Power-On USB pads regulator
• Configure PLL interface
• Enable PLL
• Check PLL lock
• Enable USB interface
• Configure USB interface (USB speed, Endpoints configuration...)
• Wait for USB VBUS information connection
• Attach USB device

Последовательность немного отличается от вашей
Wiza_ вне форума  
Непрочитано 28.01.2013, 23:30  
Slava1355
Прописка
 
Аватар для Slava1355
 
Регистрация: 13.06.2004
Адрес: Москва
Сообщений: 193
Сказал спасибо: 12
Сказали Спасибо 32 раз(а) в 18 сообщении(ях)
Slava1355 на пути к лучшему
По умолчанию Re: Не могу запустить USB контроллер ATMega32U4

Сообщение от Wiza_ Посмотреть сообщение
Power On the USB interface
• Power-On USB pads regulator
• Configure PLL interface
• Enable PLL
• Check PLL lock
• Enable USB interface
• Configure USB interface (USB speed, Endpoints configuration...)
• Wait for USB VBUS information connection
• Attach USB device

Последовательность немного отличается от вашей
У меня сначала запускается PLL. Не думаю, что это существенный момент, так как это отдельный узел, который используется не только для USB контроллера, но и для комплексного таймера4.
Сама PLL работает с правильной частотой, это проверялось подключением к ней делителя на базе Timer4 и контроля частоты на выходе OC4A.
Ожидания VBUS у меня нет, так как у меня Bus powered устройство и VBUS присутствует на входе сразу после включения.
Для пробуждения контроллера USB из suspend mode я использую прерывание WAKEUPI, которое появляется сразу после любой активности на шине.
В остальном все соответствует этой последовательности.

После подключения устройства, PC на него реагирует (на экране компьютера в итоге появляется надпись что USB устройство не опознано), но контроллер не принимает ни одного сообщения. Прерываний по событиям конечной точки (IN, OUT, Control) никаких нет. В FIFO какое-то случайное значение, в разных экземплярах макетов разное.
Ожидалось что я увижу в памяти контроллера какие либо данные - запросы от хоста, но там ничего нет!?
Slava1355 вне форума  
Непрочитано 29.01.2013, 10:53  
Wiza_
Гражданин KAZUS.RUN
 
Регистрация: 29.12.2012
Адрес: Питер
Сообщений: 980
Сказал спасибо: 131
Сказали Спасибо 230 раз(а) в 157 сообщении(ях)
Wiza_ на пути к лучшему
По умолчанию Re: Не могу запустить USB контроллер ATMega32U4

Более точный порядок отследить сложно, но примерно так.

Код:
[device] - USB_connect
[host]   - USB_suspend 
[host]   - USB_reset
[host]   - USB_resume
[host]   - USB_GET_DESCRIPTOR [target - ep0]
Для начала - попробуйте поймать SOF. Он есть всегда.
Wiza_ вне форума  
Непрочитано 29.01.2013, 22:28  
Slava1355
Прописка
 
Аватар для Slava1355
 
Регистрация: 13.06.2004
Адрес: Москва
Сообщений: 193
Сказал спасибо: 12
Сказали Спасибо 32 раз(а) в 18 сообщении(ях)
Slava1355 на пути к лучшему
По умолчанию Re: Не могу запустить USB контроллер ATMega32U4

Сообщение от Wiza_ Посмотреть сообщение
Более точный порядок отследить сложно, но примерно так.

Код:
[device] - USB_connect
[host]   - USB_suspend 
[host]   - USB_reset
[host]   - USB_resume
[host]   - USB_GET_DESCRIPTOR [target - ep0]
Для начала - попробуйте поймать SOF. Он есть всегда.
Проконтролировал попытки PC подключить мое устройство.
PC делает три попытки подключения. В процессе подключения мое устройство принимает 3 запроса WAKEUPI и 1677 прерываний по SOF.

Кстати, а есть ли где нибудь описание того, ЧТО должен делать контроллер USB в ATMega32U4, а то во всей документации есть описание только того КАК НАСТРОИТЬ регистры контроллера. А без четкого понимания какие функции он должен выполнять очень трудно с ним работать, все приходится додумывать.

Например, цикл обмена по шине USB в общем случае состоит из 3-х транзакций:
- Token Packet
- Data Packet
- Status Packet.
Я правильно понимаю, что контроллер USB автоматически проделывает все три операции (с NRZ декодированием, контролем CRC) и выдает/принимает данные в/из FIFO?
Кроме этого есть еще ряд вопросов из серии "чего ждать от контроллера".
Slava1355 вне форума  
Непрочитано 29.01.2013, 22:50  
Wiza_
Гражданин KAZUS.RUN
 
Регистрация: 29.12.2012
Адрес: Питер
Сообщений: 980
Сказал спасибо: 131
Сказали Спасибо 230 раз(а) в 157 сообщении(ях)
Wiza_ на пути к лучшему
По умолчанию Re: Не могу запустить USB контроллер ATMega32U4

А не проще ли взять на том же сайте атмела экземплы, например, класса CDC и распилить их ? USB сам-по себе имеет довольно сложный протокол. В экземплах сократить удастся немногое.

Так же имейте ввиду: в Windows 7 после заливки новой прошивки в МК - необходимо удалять драйвера с вашего USB устройства, даже если оно не опознано. Сам потерял 4 дня из-за этого.
Wiza_ вне форума  
Непрочитано 31.01.2013, 21:16  
Slava1355
Прописка
 
Аватар для Slava1355
 
Регистрация: 13.06.2004
Адрес: Москва
Сообщений: 193
Сказал спасибо: 12
Сказали Спасибо 32 раз(а) в 18 сообщении(ях)
Slava1355 на пути к лучшему
По умолчанию Re: Не могу запустить USB контроллер ATMega32U4

Проблему решил. Для этого пришлось с www.usb.org скачать спецификацию USB шины: Universal Serial Bus Specification Revision 2.0. Там, среди 650 страниц текста, на странице 150 нашлась диаграмма состояний при подключении USB устройства к шине. По ней следует, что после подключения устройства и появления активности на шине, через 100 мс хост сбрасывает устройство и, затем, снова начинает процесс общения с ним. Поэтому для начала работы с контроллером нужно использовать не прерывание по появлению активности на шине - WAKEUPI, а прерывание по окончании Reset на шине - EORSTI.
В моем случае я инициализировал конечные точки устройства по появлению активности на шине, но хост через 100 мс после этого сбрасывал контроллер (и всю мою инициализацию) и контроллер, естественно, после этого уже не принимал никаких сообщений с линии.
После того, как я провел инициализацию конечных точек по прерыванию EORSTI, все заработало штатно, контроллер начал обмен сообщениями в соответствии с протоколом USB.
Тему можно закрывать.
Миниатюры:
Нажмите на изображение для увеличения
Название: USB_Start.jpg
Просмотров: 177
Размер:	67.7 Кб
ID:	42994  
Slava1355 вне форума  
Сказали "Спасибо" Slava1355
Godzilla82 (31.01.2013)
Непрочитано 24.09.2014, 21:32  
Эдуард1978
Частый гость
 
Регистрация: 04.09.2014
Сообщений: 23
Сказал спасибо: 10
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Эдуард1978 на пути к лучшему
По умолчанию Re: Не могу запустить USB контроллер ATMega32U4

Сообщение от Slava1355 Посмотреть сообщение
Коллеги!
Нужна помощь в программировании USB контроллера микропроцессора ATMega32U4.
В моем проекте нужно обеспечить связь по USB между PC (хостом) и прибором на базе ATMega32U4.
Решил запрограммировать встроенный USB контроллер самостоятельно, благо что материалов по программированию USB достаточно. Проект делается на ассемблере.
Но встал в тупик при попытке запустить встроенный контроллер USB. Задаю все параметры, все регистры и переменные, но при подключении к PC не происходит процесс обмена (энумерации), вообще отсутствуют прерывания от конечной точки и передача какой либо информации.
Макетная плата проверена, в начале работы со встроенным USB загрузчиком работала. Поэтому вариант ошибок в макетной плате исключается.
USB PLL сконфигурирована и работает корректно, проверялось с использованием быстрого встроенного Timer4.
Фрагмент кода с конфигурацией USB контроллера:
Код:
		;----------------- Set PLL ----------------------------
		ldi		r16,0x4A		;Set PLL Frequency
		out		PLLFRQ,r16		;	PLLFRQ

		ldi		r16,0x02		;Switch On PLL 
		out		PLLCSR,r16		;	PLLCSR

PLL_Lc:in		r16,PLLCSR		;
		sbrs	r16,PLOCK		;Wait PLL Lock
		rjmp	PLL_Lc			;
		;---------------- Init USB conroller -------------------
		ldi		r16,0x01		;Set to enable the USB pad regulator
		sts		UHWCON,r16		;	UHWCON

		ldi		r16,0x90		;
		sts		USBCON,r16		;Swich on USB controller
		sts		USBCON,r16		;Swich on USBclk (0=›FRZCLK)

		ldi		r16,0x00		;Clear USB Device INT Flags
		sts		UDINT,r16		;	UDINT

		ldi		r16,0x10		;Set USB Device INT Enable (WAKEUPI)
		sts		UDIEN,r16		;	UDIEN
		;--------------------------------------------------------

		;================= Init USB Endpoints ===================
		;-------------- Init Ep0 (Control) ----------------------
		ldi		r16,0x00		;Select Endpoint #0
		sts		UENUM,r16		;	UENUM

		ldi		r16,0x01		;Enable Endpoint #0
		sts		UECONX,r16		;	UECONX

Cfg:	ldi		r16,0x00		;Configure Endpoint #0
		sts		UECFG0x,r16		;Set Ep0 - "Control", bidirectional

		ldi		r16,0x32		;Configure Endpoint #0
		sts		UECFG1x,r16		;Set Ep0 Size=64 bit, One bank, Memory Allocate enable
		
		lds		r16,UESTA0X		;Read Endpoint Status Regiser
		sbrs	r16,CFGOK		;EP Configuration OK?
		rjmp	Cfg				;If NOT then GoTo Repeat

		ldi		r16,0x00		;Clear Endpoints INT Flags
		sts		UEINTx,r16		;	UEINTX

		ldi		r16,0x0C		;Set Control Endpoint INT Enable
		sts		UEIENx,r16		;	UEIENX

		ldi		r16,0x00		;Set USB device general registers Set 00/04 High/Low speed 
		sts		UDCON,r16		;	UDCON Connect Device (0=›DETACH)
		;--------------------------------------------------------
		sei
loop:	rjmp	loop
Дамп регистров контроллера после появления сигнала WAKEUP в приложенном рисунке.
Прибор проверяется подключением к PC. Ожидалось увидеть в контроллере пакеты SETUP с запросами дескрипторов и т.д.
В программе все выглядит в соответствии с мануалами и описаниями, но ничего не работает.
В чем засада?

по сигналу end of reset все точки сбрасываются ригистр адреса тоже 0 контрольная точка конфигурируется заново
Эдуард1978 вне форума  
 
Опции темы

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не могу запустить IR2128S putmannn Электроника - это просто 3 04.03.2011 23:24
Не могу запустить Tape Recorder Livas Proteus 0 03.06.2010 12:03
Не могу запустить XPort Beduin Микроконтроллеры, АЦП, память и т.д 7 23.01.2009 17:42
не могу запустить генератор ra0wbj Электроника - это просто 1 02.08.2005 16:48


Часовой пояс GMT +4, время: 00:04.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.