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

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

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

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

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

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

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

 
Опции темы
Непрочитано 28.01.2013, 13:26  
Slava1355
Прописка
 
Аватар для Slava1355
 
Регистрация: 13.06.2004
Адрес: Москва
Сообщений: 193
Сказал спасибо: 11
Сказали Спасибо 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.RU
 
Регистрация: 29.12.2012
Адрес: Питер
Сообщений: 982
Сказал спасибо: 131
Сказали Спасибо 230 раз(а) в 157 сообщении(ях)
Wiza_ на пути к лучшему
По умолчанию Re: Не могу запустить USB контроллер ATMega32U4

sei есть ?
Wiza_ вне форума  
Непрочитано 28.01.2013, 14:08  
Slava1355
Прописка
 
Аватар для Slava1355
 
Регистрация: 13.06.2004
Адрес: Москва
Сообщений: 193
Сказал спасибо: 11
Сказали Спасибо 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.RU
 
Регистрация: 29.12.2012
Адрес: Питер
Сообщений: 982
Сказал спасибо: 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
Сказал спасибо: 11
Сказали Спасибо 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.RU
 
Регистрация: 29.12.2012
Адрес: Питер
Сообщений: 982
Сказал спасибо: 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
Сказал спасибо: 11
Сказали Спасибо 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.RU
 
Регистрация: 29.12.2012
Адрес: Питер
Сообщений: 982
Сказал спасибо: 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
Сказал спасибо: 11
Сказали Спасибо 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
[Решено] Не могу запустить ЖКИ Ingerner119 Делимся опытом 1 09.01.2004 14:34


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


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot