Timoha 0 20 декабря, 2008 Опубликовано 20 декабря, 2008 (изменено) · Жалоба Доброго времени суток всем! изучаю работу 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]. попробую прошить - проверить работоспособность. Изменено 20 декабря, 2008 пользователем Timoha Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Xenia 45 20 декабря, 2008 Опубликовано 20 декабря, 2008 · Жалоба У меня вот так и вроде работает: PLLCSR = (1<<PLLP2) | (1<<PLLP0) | (1<<PLLE); UHWCON = (1<<UIMOD) | (1<<UVREGE); USBCON = (1<<USBE) | (1<<OTGPADE) | (1<<VBUSTE); Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Timoha 0 21 декабря, 2008 Опубликовано 21 декабря, 2008 · Жалоба У меня вот так и вроде работает: PLLCSR = (1<<PLLP2) | (1<<PLLP0) | (1<<PLLE); UHWCON = (1<<UIMOD) | (1<<UVREGE); USBCON = (1<<USBE) | (1<<OTGPADE) | (1<<VBUSTE); Xenia, попробовал ваш пример, но не помогло. А по какой схеме вы собирали? Регулировка скорости с использованием внутреннего или внешнего резистора? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Xenia 45 21 декабря, 2008 Опубликовано 21 декабря, 2008 (изменено) · Жалоба У меня всё в кучку соединено, как в даташите изображено тут: Figure 21-3. Typical Bus powered application with 5V I/O. А вы проверьте, как у вас фуза CKDIV8 стоит. Фабрично ее устанавливают, из-за чего МК работает в 8 раз медленнее кварца - вот частота PLL и получается не такая, как нужно. Я тоже мучалась, пока не поняла, что на кварце предустановлен делитель. Его надо либо фузой погасить или программно (CLKPR=0x80, а потом сразу CLKPR=0). Изменено 21 декабря, 2008 пользователем Xenia Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
xelax 0 22 декабря, 2008 Опубликовано 22 декабря, 2008 · Жалоба У меня вот так и вроде работает: 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))); так было бы корректней. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Timoha 0 22 декабря, 2008 Опубликовано 22 декабря, 2008 · Жалоба Не совсем корректный код так как не ожидается когда ФАПЧ выйдет в рабочий режим. По документации это примерно 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) ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
xelax 0 22 декабря, 2008 Опубликовано 22 декабря, 2008 · Жалоба т.е. пока PLOCK не поднимется - ни чего не заработает? Я бы по другому выразился. Что-то заработает, что-то нет :) еще вопрос что делать с выводом UID(схема Figure 21-3. Typical Bus powered application with 5V I/O) ? Так как вы хотите работать как device, а не как host, то можно ничего не делать. Оставить висящим в воздухе(внутренней подтяжкой он затянется к питанию). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Timoha 0 22 декабря, 2008 Опубликовано 22 декабря, 2008 · Жалоба Я бы по другому выразился. Что-то заработает, что-то нет :) Так как вы хотите работать как device, а не как host, то можно ничего не делать. Оставить висящим в воздухе(внутренней подтяжкой он затянется к питанию). uid так и оставил, но сомневался что это правильно. тогда такой вопрос если не сконфигурирован PLLCSR и конечная точка, будет ли работать "внутренняя подтяжка"? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
xelax 0 22 декабря, 2008 Опубликовано 22 декабря, 2008 · Жалоба uid так и оставил, но сомневался что это правильно. тогда такой вопрос если не сконфигурирован PLLCSR и конечная точка, будет ли работать "внутренняя подтяжка"? ФАПЧ необходима для формирования частоты для USB, на подтяжки и прочее это навряд ли повлияет. А вот какой-нибудь Descriptor request от host'а скорее всего не пройдёт до того как стабилизируется частота. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Timoha 0 22 декабря, 2008 Опубликовано 22 декабря, 2008 · Жалоба У меня всё в кучку соединено, как в даташите изображено тут: Figure 21-3. Typical Bus powered application with 5V I/O. А вы проверьте, как у вас фуза CKDIV8 стоит. Фабрично ее устанавливают, из-за чего МК работает в 8 раз медленнее кварца - вот частота PLL и получается не такая, как нужно. Я тоже мучалась, пока не поняла, что на кварце предустановлен делитель. Его надо либо фузой погасить или программно (CLKPR=0x80, а потом сразу CLKPR=0). Спасибо, за совет. Предделитель действительно был включен. Но его отключение все-равно не помогло :( написал ожидание PLOCK, как говорил xelax. все без изменений. может, все-таки, есть у кого-нибудь готовая рабочая прошивка? хотя бы проверить - работает порт на контроллере или нет. хотя, с чего бы ему не работать? сейчас подвесил индикатор, на который вывожу содержимое регистров контроллера, думал может какие-нибуть биты не выставляются, но все в точности, как в коде. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Xenia 45 22 декабря, 2008 Опубликовано 22 декабря, 2008 (изменено) · Жалоба может, все-таки, есть у кого-нибудь готовая рабочая прошивка? А может, все-таки, будет проще, если вы сами прочтете тему "AT90USB1286, виртуальный COM-порт"? Там и на рабочий проект есть ссылки и еще много чего. Изменено 22 декабря, 2008 пользователем Xenia Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Timoha 0 22 декабря, 2008 Опубликовано 22 декабря, 2008 · Жалоба А может, все-таки, будет проще, если вы сами прочтете тему "AT90USB1286, виртуальный COM-порт"? Там и на рабочий проект есть ссылки и еще много чего. Во-первых, эту тему я уже читал(как и еще много чего ) , во-вторых, где это там рабочий проект? в третьих, в том проекте, ссылка на который не рабоает, устройство хотя бы определяется, как "неизвестное", а у меня нет даже этого. Не надо нападать на меня, я за помощью обратился. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Visor 0 23 декабря, 2008 Опубликовано 23 декабря, 2008 · Жалоба Во-первых, эту тему я уже читал(как и еще много чего ) , во-вторых, где это там рабочий проект? в третьих, в том проекте, ссылка на который не рабоает Atmel обновила примеры, поэтому ссылка устарела, теперь это: http://www.atmel.com/dyn/resources/prod_do...c-2_0_3-doc.zip Вы раз связались с Atmel, то с их сайта всё должны были выгрести полезное. ;) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alex11 6 23 декабря, 2008 Опубликовано 23 декабря, 2008 · Жалоба Для того, чтобы устройство в PC определилось как неизвестное, достаточно, чтобы появилась подтяжка D+ к 3В. Так что проверяйте хоть тестером. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Xenia 45 23 декабря, 2008 Опубликовано 23 декабря, 2008 · Жалоба в том проекте, ссылка на который не рабоает, устройство хотя бы определяется, как "неизвестное", а у меня нет даже этого. Не надо нападать на меня, я за помощью обратился. Снимите флаг DETACH и устройство обнаружится как "новое". Вот так: UDCON &= ~(1<<DETACH); // Attach Это и есть включение подтяжки D+. Только сразу это делать неположено, а положено делать тогда, когда появляется напряжение на шине VBUS. Обычно изменение VBUS генерит general usb interrupt, при обработке которого флаг DETACH либо устанавливают, либо снимают. Т.е. опасаются подавать напряжение на обесточенный USB-разъем. Но если ваша схема питается прямо от USB, т.е. именно от этого VBUS, то Attach можно делать сразу. В проекте, который рекомендовал Visor, все это есть. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться