Перейти к содержанию
    

Помогите сконфигурировать usb на at90usb1287 в режим device

Доброго времени суток всем! изучаю работу USB. Выбор остановил на at90usb1287, т.к.раньше собирал устройства на attiny 26 и atmega16. Для винды пишу на VB. Для атмелов пишу на Atmel assembler(AVR Studio).

Столкнулся со следующей проблемой - не получается сконфигурировать usb на контроллере. Не происходит даже обнаружения устройства.

Согласно даташиту, контроллер имеет внутренний подтягивающий резистор для выбора скорости передачи данных. Но при сбросе бита detach ничего не происходит :(. вот кусок программы:

***********************************************

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? если есть пришлите, пожалуйста, на [email protected]. попробую прошить - проверить работоспособность.

Изменено пользователем Timoha

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

PLLCSR = (1<<PLLP2) | (1<<PLLP0) | (1<<PLLE);

UHWCON = (1<<UIMOD) | (1<<UVREGE);

USBCON = (1<<USBE) | (1<<OTGPADE) | (1<<VBUSTE);

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

PLLCSR = (1<<PLLP2) | (1<<PLLP0) | (1<<PLLE);

UHWCON = (1<<UIMOD) | (1<<UVREGE);

USBCON = (1<<USBE) | (1<<OTGPADE) | (1<<VBUSTE);

 

Xenia, попробовал ваш пример, но не помогло. А по какой схеме вы собирали? Регулировка скорости с использованием внутреннего или внешнего резистора?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

У меня всё в кучку соединено, как в даташите изображено тут:

Figure 21-3. Typical Bus powered application with 5V I/O.

 

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

Изменено пользователем Xenia

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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)));

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не совсем корректный код так как не ожидается когда ФАПЧ выйдет в рабочий режим. По документации это примерно 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) ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

т.е. пока PLOCK не поднимется - ни чего не заработает?

 

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

 

еще вопрос что делать с выводом UID(схема Figure 21-3. Typical Bus powered application with 5V I/O) ?

 

Так как вы хотите работать как device, а не как host, то можно ничего не делать. Оставить висящим в воздухе(внутренней подтяжкой он затянется к питанию).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Так как вы хотите работать как device, а не как host, то можно ничего не делать. Оставить висящим в воздухе(внутренней подтяжкой он затянется к питанию).

uid так и оставил, но сомневался что это правильно. тогда такой вопрос если не сконфигурирован PLLCSR и конечная точка, будет ли работать "внутренняя подтяжка"?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

uid так и оставил, но сомневался что это правильно. тогда такой вопрос если не сконфигурирован PLLCSR и конечная точка, будет ли работать "внутренняя подтяжка"?

 

ФАПЧ необходима для формирования частоты для USB, на подтяжки и прочее это навряд ли повлияет.

А вот какой-нибудь Descriptor request от host'а скорее всего не пройдёт до того как стабилизируется частота.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

У меня всё в кучку соединено, как в даташите изображено тут:

Figure 21-3. Typical Bus powered application with 5V I/O.

 

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

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

 

написал ожидание PLOCK, как говорил xelax. все без изменений. может, все-таки, есть у кого-нибудь готовая рабочая прошивка? хотя бы проверить - работает порт на контроллере или нет. хотя, с чего бы ему не работать? сейчас подвесил индикатор, на который вывожу содержимое регистров контроллера, думал может какие-нибуть биты не выставляются, но все в точности, как в коде.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

может, все-таки, есть у кого-нибудь готовая рабочая прошивка?

 

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

Изменено пользователем Xenia

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Во-первых, эту тему я уже читал(как и еще много чего ) , во-вторых, где это там рабочий проект? в третьих, в том проекте, ссылка на который не рабоает, устройство хотя бы определяется, как "неизвестное", а у меня нет даже этого. Не надо нападать на меня, я за помощью обратился.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Во-первых, эту тему я уже читал(как и еще много чего ) , во-вторых, где это там рабочий проект? в третьих, в том проекте, ссылка на который не рабоает

Atmel обновила примеры, поэтому ссылка устарела, теперь это:

http://www.atmel.com/dyn/resources/prod_do...c-2_0_3-doc.zip

Вы раз связались с Atmel, то с их сайта всё должны были выгрести полезное. ;)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для того, чтобы устройство в PC определилось как неизвестное, достаточно, чтобы появилась подтяжка D+ к 3В. Так что проверяйте хоть тестером.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

в том проекте, ссылка на который не рабоает, устройство хотя бы определяется, как "неизвестное", а у меня нет даже этого. Не надо нападать на меня, я за помощью обратился.

 

Снимите флаг DETACH и устройство обнаружится как "новое". Вот так:

UDCON &= ~(1<<DETACH); // Attach

Это и есть включение подтяжки D+.

Только сразу это делать неположено, а положено делать тогда, когда появляется напряжение на шине VBUS. Обычно изменение VBUS генерит general usb interrupt, при обработке которого флаг DETACH либо устанавливают, либо снимают. Т.е. опасаются подавать напряжение на обесточенный USB-разъем.

Но если ваша схема питается прямо от USB, т.е. именно от этого VBUS, то Attach можно делать сразу.

В проекте, который рекомендовал Visor, все это есть.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...