реклама на сайте
подробности

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Помогите сконфигурировать usb на at90usb1287 в режим device
Timoha
сообщение Dec 20 2008, 17:15
Сообщение #1





Группа: Новичок
Сообщений: 8
Регистрация: 9-07-07
Пользователь №: 28 981



Доброго времени суток всем! изучаю работу USB. Выбор остановил на at90usb1287, т.к.раньше собирал устройства на attiny 26 и atmega16. Для винды пишу на VB. Для атмелов пишу на Atmel assembler(AVR Studio).
Столкнулся со следующей проблемой - не получается сконфигурировать usb на контроллере. Не происходит даже обнаружения устройства.
Согласно даташиту, контроллер имеет внутренний подтягивающий резистор для выбора скорости передачи данных. Но при сбросе бита detach ничего не происходит sad.gif. вот кусок программы:
***********************************************
ldi tmp, (1<<pllp2)+(1<<pllp0)+(1<<plle)
out pllcsr,tmp ;выбираем коэфт деления 8 (частота конроллера=16MHz, внешний кварц)
ldi tmp, (1<<uimod)
sts uhwcon,tmp ; выбираем режим device
ldi tmp, (1<<USBE)
sts USBCON,tmp ; включаем usb контроллер
********************************************
где ошибка? что-то не дописал? уже возникают подозрения, что спалил USB порт на контроллере. у кого-нибудь есть любой рабочий hex или asm на 16 МГц с использованием USB? если есть пришлите, пожалуйста, на timofeysoft@mail.ru. попробую прошить - проверить работоспособность.

Сообщение отредактировал Timoha - Dec 20 2008, 17:29
Go to the top of the page
 
+Quote Post
Xenia
сообщение Dec 20 2008, 23:53
Сообщение #2


Гуру
******

Группа: Модератор FTP
Сообщений: 4 479
Регистрация: 20-02-08
Из: Москва
Пользователь №: 35 237



У меня вот так и вроде работает:

PLLCSR = (1<<PLLP2) | (1<<PLLP0) | (1<<PLLE);
UHWCON = (1<<UIMOD) | (1<<UVREGE);
USBCON = (1<<USBE) | (1<<OTGPADE) | (1<<VBUSTE);
Go to the top of the page
 
+Quote Post
Timoha
сообщение Dec 21 2008, 08:27
Сообщение #3





Группа: Новичок
Сообщений: 8
Регистрация: 9-07-07
Пользователь №: 28 981



Цитата(Xenia @ Dec 21 2008, 02:53) *
У меня вот так и вроде работает:

PLLCSR = (1<<PLLP2) | (1<<PLLP0) | (1<<PLLE);
UHWCON = (1<<UIMOD) | (1<<UVREGE);
USBCON = (1<<USBE) | (1<<OTGPADE) | (1<<VBUSTE);


Xenia, попробовал ваш пример, но не помогло. А по какой схеме вы собирали? Регулировка скорости с использованием внутреннего или внешнего резистора?
Go to the top of the page
 
+Quote Post
Xenia
сообщение Dec 21 2008, 19:11
Сообщение #4


Гуру
******

Группа: Модератор FTP
Сообщений: 4 479
Регистрация: 20-02-08
Из: Москва
Пользователь №: 35 237



У меня всё в кучку соединено, как в даташите изображено тут:
Figure 21-3. Typical Bus powered application with 5V I/O.

А вы проверьте, как у вас фуза CKDIV8 стоит. Фабрично ее устанавливают, из-за чего МК работает в 8 раз медленнее кварца - вот частота PLL и получается не такая, как нужно. Я тоже мучалась, пока не поняла, что на кварце предустановлен делитель. Его надо либо фузой погасить или программно (CLKPR=0x80, а потом сразу CLKPR=0).

Сообщение отредактировал Xenia - Dec 21 2008, 19:13
Go to the top of the page
 
+Quote Post
xelax
сообщение Dec 22 2008, 07:05
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 370
Регистрация: 7-11-06
Пользователь №: 22 035



Цитата(Xenia @ Dec 21 2008, 02:53) *
У меня вот так и вроде работает:

PLLCSR = (1<<PLLP2) | (1<<PLLP0) | (1<<PLLE);
UHWCON = (1<<UIMOD) | (1<<UVREGE);
USBCON = (1<<USBE) | (1<<OTGPADE) | (1<<VBUSTE);


Не совсем корректный код так как не ожидается когда ФАПЧ выйдет в рабочий режим. По документации это примерно 100 мс.
Код
// sets prescaler 4
  PLLCSR = (1 << PLLP1) | (1 << PLLP0) | (1 << PLLE);
  // waits for when pll is locked reference clock (about 100 ms)
  while (!(PLLCSR & (1 << PLOCK)));

так было бы корректней.
Go to the top of the page
 
+Quote Post
Timoha
сообщение Dec 22 2008, 10:03
Сообщение #6





Группа: Новичок
Сообщений: 8
Регистрация: 9-07-07
Пользователь №: 28 981



Цитата(xelax @ Dec 22 2008, 10:05) *
Не совсем корректный код так как не ожидается когда ФАПЧ выйдет в рабочий режим. По документации это примерно 100 мс.
Код
// sets prescaler 4
  PLLCSR = (1 << PLLP1) | (1 << PLLP0) | (1 << PLLE);
  // waits for when pll is locked reference clock (about 100 ms)
  while (!(PLLCSR & (1 << PLOCK)));

так было бы корректней.


т.е. пока PLOCK не поднимется - ни чего не заработает?
еще вопрос что делать с выводом UID(схема Figure 21-3. Typical Bus powered application with 5V I/O) ?
Go to the top of the page
 
+Quote Post
xelax
сообщение Dec 22 2008, 10:21
Сообщение #7


Местный
***

Группа: Свой
Сообщений: 370
Регистрация: 7-11-06
Пользователь №: 22 035



Цитата(Timoha @ Dec 22 2008, 13:03) *
т.е. пока PLOCK не поднимется - ни чего не заработает?


Я бы по другому выразился. Что-то заработает, что-то нет smile.gif

Цитата(Timoha @ Dec 22 2008, 13:03) *
еще вопрос что делать с выводом UID(схема Figure 21-3. Typical Bus powered application with 5V I/O) ?


Так как вы хотите работать как device, а не как host, то можно ничего не делать. Оставить висящим в воздухе(внутренней подтяжкой он затянется к питанию).
Go to the top of the page
 
+Quote Post
Timoha
сообщение Dec 22 2008, 10:52
Сообщение #8





Группа: Новичок
Сообщений: 8
Регистрация: 9-07-07
Пользователь №: 28 981



Цитата(xelax @ Dec 22 2008, 13:21) *
Я бы по другому выразился. Что-то заработает, что-то нет smile.gif
Так как вы хотите работать как device, а не как host, то можно ничего не делать. Оставить висящим в воздухе(внутренней подтяжкой он затянется к питанию).

uid так и оставил, но сомневался что это правильно. тогда такой вопрос если не сконфигурирован PLLCSR и конечная точка, будет ли работать "внутренняя подтяжка"?
Go to the top of the page
 
+Quote Post
xelax
сообщение Dec 22 2008, 15:11
Сообщение #9


Местный
***

Группа: Свой
Сообщений: 370
Регистрация: 7-11-06
Пользователь №: 22 035



Цитата(Timoha @ Dec 22 2008, 13:52) *
uid так и оставил, но сомневался что это правильно. тогда такой вопрос если не сконфигурирован PLLCSR и конечная точка, будет ли работать "внутренняя подтяжка"?


ФАПЧ необходима для формирования частоты для USB, на подтяжки и прочее это навряд ли повлияет.
А вот какой-нибудь Descriptor request от host'а скорее всего не пройдёт до того как стабилизируется частота.
Go to the top of the page
 
+Quote Post
Timoha
сообщение Dec 22 2008, 18:54
Сообщение #10





Группа: Новичок
Сообщений: 8
Регистрация: 9-07-07
Пользователь №: 28 981



Цитата(Xenia @ Dec 21 2008, 22:11) *
У меня всё в кучку соединено, как в даташите изображено тут:
Figure 21-3. Typical Bus powered application with 5V I/O.

А вы проверьте, как у вас фуза CKDIV8 стоит. Фабрично ее устанавливают, из-за чего МК работает в 8 раз медленнее кварца - вот частота PLL и получается не такая, как нужно. Я тоже мучалась, пока не поняла, что на кварце предустановлен делитель. Его надо либо фузой погасить или программно (CLKPR=0x80, а потом сразу CLKPR=0).

Спасибо, за совет. Предделитель действительно был включен. Но его отключение все-равно не помогло sad.gif

написал ожидание PLOCK, как говорил xelax. все без изменений. может, все-таки, есть у кого-нибудь готовая рабочая прошивка? хотя бы проверить - работает порт на контроллере или нет. хотя, с чего бы ему не работать? сейчас подвесил индикатор, на который вывожу содержимое регистров контроллера, думал может какие-нибуть биты не выставляются, но все в точности, как в коде.
Go to the top of the page
 
+Quote Post
Xenia
сообщение Dec 22 2008, 20:43
Сообщение #11


Гуру
******

Группа: Модератор FTP
Сообщений: 4 479
Регистрация: 20-02-08
Из: Москва
Пользователь №: 35 237



Цитата(Timoha @ Dec 22 2008, 21:54) *
может, все-таки, есть у кого-нибудь готовая рабочая прошивка?


А может, все-таки, будет проще, если вы сами прочтете тему "AT90USB1286, виртуальный COM-порт"? Там и на рабочий проект есть ссылки и еще много чего.

Сообщение отредактировал Xenia - Dec 22 2008, 20:45
Go to the top of the page
 
+Quote Post
Timoha
сообщение Dec 22 2008, 21:25
Сообщение #12





Группа: Новичок
Сообщений: 8
Регистрация: 9-07-07
Пользователь №: 28 981



Цитата(Xenia @ Dec 22 2008, 23:43) *
А может, все-таки, будет проще, если вы сами прочтете тему "AT90USB1286, виртуальный COM-порт"? Там и на рабочий проект есть ссылки и еще много чего.

Во-первых, эту тему я уже читал(как и еще много чего ) , во-вторых, где это там рабочий проект? в третьих, в том проекте, ссылка на который не рабоает, устройство хотя бы определяется, как "неизвестное", а у меня нет даже этого. Не надо нападать на меня, я за помощью обратился.
Go to the top of the page
 
+Quote Post
Visor
сообщение Dec 23 2008, 06:04
Сообщение #13


Местный
***

Группа: Свой
Сообщений: 240
Регистрация: 23-03-07
Пользователь №: 26 428



Цитата(Timoha @ Dec 23 2008, 04:25) *
Во-первых, эту тему я уже читал(как и еще много чего ) , во-вторых, где это там рабочий проект? в третьих, в том проекте, ссылка на который не рабоает

Atmel обновила примеры, поэтому ссылка устарела, теперь это:
http://www.atmel.com/dyn/resources/prod_do...c-2_0_3-doc.zip
Вы раз связались с Atmel, то с их сайта всё должны были выгрести полезное. wink.gif
Go to the top of the page
 
+Quote Post
Alex11
сообщение Dec 23 2008, 09:12
Сообщение #14


Гуру
******

Группа: Свой
Сообщений: 2 106
Регистрация: 23-10-04
Из: С-Петербург
Пользователь №: 965



Для того, чтобы устройство в PC определилось как неизвестное, достаточно, чтобы появилась подтяжка D+ к 3В. Так что проверяйте хоть тестером.
Go to the top of the page
 
+Quote Post
Xenia
сообщение Dec 23 2008, 15:13
Сообщение #15


Гуру
******

Группа: Модератор FTP
Сообщений: 4 479
Регистрация: 20-02-08
Из: Москва
Пользователь №: 35 237



Цитата(Timoha @ Dec 23 2008, 00:25) *
в том проекте, ссылка на который не рабоает, устройство хотя бы определяется, как "неизвестное", а у меня нет даже этого. Не надо нападать на меня, я за помощью обратился.


Снимите флаг DETACH и устройство обнаружится как "новое". Вот так:
UDCON &= ~(1<<DETACH); // Attach
Это и есть включение подтяжки D+.
Только сразу это делать неположено, а положено делать тогда, когда появляется напряжение на шине VBUS. Обычно изменение VBUS генерит general usb interrupt, при обработке которого флаг DETACH либо устанавливают, либо снимают. Т.е. опасаются подавать напряжение на обесточенный USB-разъем.
Но если ваша схема питается прямо от USB, т.е. именно от этого VBUS, то Attach можно делать сразу.
В проекте, который рекомендовал Visor, все это есть.
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 15:07
Рейтинг@Mail.ru


Страница сгенерированна за 0.01653 секунд с 7
ELECTRONIX ©2004-2016