Программатор USBTiny не определяется

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
denis5594
Родился
Сообщения: 12
Зарегистрирован: Вс ноя 20, 2011 07:43:49

Программатор USBTiny не определяется

Сообщение denis5594 »

Всем доброго времени суток!

(Модераторам - перенесите пожалуйста в цифровую технику, похоже не там создал)

Помигав светодиодами и помучив ШИМ решил что программатор на LPT - не серьезно и нужно что-то делать. Непродолжительный гугл привел меня на http://www.ladyada.net/make/usbtinyisp/ - меня польстила его простота и доступность, его я и решил собирать. Первая попытка сборки была неудачной - из-за красиво нарисованной схемы на сайте я бездумно развел подтягивающий резистор на землю, комп устройство не видел. Также выяснилось что та схема не соответствует прошивке, из-за чего индикаторный светодиод не горел и я ошибочно полагал что схема не работает. Спустя 3 кружки чая и серфинга по сети прошивка была исправлена, а схема чуть-чуть изменена (в аттаче). Теперь компьютер видит что что-то подключено, но похоже что дальнейшее общение срывается.

При подключении к ноутбуку с linux в debug появляется следующее:

Код: Выделить всё

Dec  8 19:23:07 elf kernel: [329002.734199] hub 2-0:1.0: state 7 ports 6 chg 0000 evt 0002
Dec  8 19:23:07 elf kernel: [329002.734214] ehci_hcd 0000:00:1d.7: GetStatus port 1 status 001403 POWER sig=k CSC CONNECT
Dec  8 19:23:07 elf kernel: [329002.734226] hub 2-0:1.0: port 1, status 0501, change 0001, 480 Mb/s
Dec  8 19:23:07 elf kernel: [329002.838088] hub 2-0:1.0: debounce: port 1: total 100ms stable 100ms status 0x501
Dec  8 19:23:07 elf kernel: [329002.838103] ehci_hcd 0000:00:1d.7: port 1 low speed --> companion
Dec  8 19:23:07 elf kernel: [329002.838139] usb usb6: usb resume
Dec  8 19:23:07 elf kernel: [329002.838147] usb usb6: wakeup_rh
Dec  8 19:23:07 elf kernel: [329002.870329] hub 6-0:1.0: hub_resume
Dec  8 19:23:07 elf kernel: [329002.870346] uhci_hcd 0000:00:1d.0: port 1 portsc 01a3,00
Dec  8 19:23:07 elf kernel: [329002.870352] hub 6-0:1.0: port 1: status 0301 change 0001
Dec  8 19:23:07 elf kernel: [329002.889147] ehci_hcd 0000:00:1d.7: GetStatus port 1 status 003002 POWER OWNER sig=se0 CSC
Dec  8 19:23:07 elf kernel: [329002.889182] hub 2-0:1.0: state 7 ports 6 chg 0000 evt 0002
Dec  8 19:23:07 elf kernel: [329002.971295] hub 6-0:1.0: state 7 ports 2 chg 0002 evt 0000
Dec  8 19:23:07 elf kernel: [329002.971313] hub 6-0:1.0: port 1, status 0301, change 0000, 1.5 Mb/s
Dec  8 19:23:08 elf kernel: [329003.076312] usb 6-1: uhci_result_common: failed with status 440000
(еще 15 строк  usb 6-1: uhci_result_common: failed with status 440000)
Dec  8 19:23:12 elf kernel: [329007.997098] hub 6-0:1.0: hub_suspend
Dec  8 19:23:12 elf kernel: [329007.997108] usb usb6: bus auto-suspend
Dec  8 19:23:12 elf kernel: [329007.997113] usb usb6: suspend_rh

Это происходит только с прошивкой 2.0, с первой версией сообщения "usb 6-1: uhci_result_common: failed with status 440000" не прекращаются пока не отключишь девайс.
На нетбуке с FreeBSD в dmesg следующее:

Код: Выделить всё

usb_alloc_device: set address 2 failed (USB_ERR_STALLED, ignored)
usbd_setup_device_desc: getting device descriptor at addr 2 failed, USB_ERR_STALLED
usbd_req_re_enumerate: addr=2, set address failed! (USB_ERR_STALLED, ignored)
usbd_setup_device_desc: getting device descriptor at addr 2 failed, USB_ERR_STALLED
usbd_req_re_enumerate: addr=2, set address failed! (USB_ERR_STALLED, ignored)
usbd_setup_device_desc: getting device descriptor at addr 2 failed, USB_ERR_STALLED
ugen1.2: <Unknown> at usbus1 (disconnected)
uhub_reattach_port: could not allocate new device

Тоже, только с 2.0, с 1.0 сообщения повторяются.
На Windows - Device not recognized.

Fuse ставил такие:

Код: Выделить всё

(11001111 тоже ставил)
 11101110 are the fuse bits read from an ATtiny2313
 0xxxxxxx - CKDIV8 - divide clock by 8 (page 22)
 x0xxxxxx - CKOUT output clock on pin D2
 xxSUxxxx - start-up time (datasheet page 24)
 xxxxCKSE - CKSEL (datasheet page 22-24)

11011111 are the high fuse bits read from an ATtiny2313
xx0xxxxx - serial programming enabled


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

Заранее спасибо.
Вложения
brd1.gif
(26.97 КБ) 816 скачиваний
Последний раз редактировалось denis5594 Пт дек 09, 2011 14:32:35, всего редактировалось 1 раз.
DARKMAVR
Встал на лапы
Сообщения: 81
Зарегистрирован: Пт июл 09, 2010 17:44:34
Откуда: Татарстан, г. Казань

Re: Программатор USBTiny не определяется

Сообщение DARKMAVR »

Здесь посмотрите http://www.getchip.net/posts/056-usb-programmator-legko-usbtiny/
думаю, ответ найдется сам.
denis5594
Родился
Сообщения: 12
Зарегистрирован: Вс ноя 20, 2011 07:43:49

Re: Программатор USBTiny не определяется

Сообщение denis5594 »

DARKMAVR писал(а):Здесь посмотрите http://www.getchip.net/posts/056-usb-programmator-legko-usbtiny/

Спасибо, но это я уже читал. Статью и все 6 страниц комментариев - кажется именно там я и понял, что подтягивающий резистор не туда припаял.

DARKMAVR писал(а):думаю, ответ найдется сам.

Не могли бы вы быть немного поконкретнее?
DARKMAVR
Встал на лапы
Сообщения: 81
Зарегистрирован: Пт июл 09, 2010 17:44:34
Откуда: Татарстан, г. Казань

Re: Программатор USBTiny не определяется

Сообщение DARKMAVR »

Код:
(11001111 тоже ставил)
11101110 are the fuse bits read from an ATtiny2313
0xxxxxxx - CKDIV8 - divide clock by 8 (page 22)
x0xxxxxx - CKOUT output clock on pin D2
xxSUxxxx - start-up time (datasheet page 24)
xxxxCKSE - CKSEL (datasheet page 22-24)

11011111 are the high fuse bits read from an ATtiny2313
xx0xxxxx - serial programming enabled


Для начала определитесь с фьюзами
CKSEL=1110 SUT=10 SPIEN=0 CKDIV8=1 CKOUT=1

лишь в этом случае у вас будет тактирование от внешнего кварца

и верните стабилитроны на место - это нужно для согласования уровней D- и D+, а именно 3-3,6 вольта
Последний раз редактировалось DARKMAVR Пт дек 09, 2011 10:12:42, всего редактировалось 1 раз.
denis5594
Родился
Сообщения: 12
Зарегистрирован: Вс ноя 20, 2011 07:43:49

Re: Программатор USBTiny не определяется

Сообщение denis5594 »

DARKMAVR писал(а):Для начала определитесь с фьюзами
CKSEL=1110 SUT=0 SPIEN=0 CKDIV8=1 CKOUT=1

лишь в этом случае у вас будет тактирование от внешнего кварца

и верните стабилитроны на место - это нужно для согласования уровней D- и D+, а именно 3-3,6 вольта

Вернул стабилитроны, выставил фьюзы 11001110, ничего не изменилось. Кстати, может я ошибся с порядком бит - в даташите на 2313 на стр 25 сказано, что младший бит CKSEL == 0 для керамического резонатора, а у меня же кварцевый.
Но все равно спасибо за помощь.
DARKMAVR
Встал на лапы
Сообщения: 81
Зарегистрирован: Пт июл 09, 2010 17:44:34
Откуда: Татарстан, г. Казань

Re: Программатор USBTiny не определяется

Сообщение DARKMAVR »

собирал сей программатор с сайта getchip.net заработал с первого раза без проблем, где-то вы все-таки намудрили:
либо со схемой, либо не те дрова драйвера используете.
Минус этого программатора в том, что он работает только в дудке.
Советую обратить внимание на программатор PROTOSSа - симулятор AVR910, в авр-студии прошивает на раз, в CVAVR тоже
работает, но гораздо медленней.
denis5594
Родился
Сообщения: 12
Зарегистрирован: Вс ноя 20, 2011 07:43:49

Re: Программатор USBTiny не определяется

Сообщение denis5594 »

DARKMAVR писал(а):собирал сей программатор с сайта getchip.net заработал с первого раза без проблем, где-то вы все-таки намудрили:
либо со схемой, либо не те дрова драйвера используете.
Минус этого программатора в том, что он работает только в дудке.
Советую обратить внимание на программатор PROTOSSа - симулятор AVR910, в авр-студии прошивает на раз, в CVAVR тоже
работает, но гораздо медленней.

Мне пожалуй будет даже удобнее avrdude, а всякие авр-студии и CVAVR под линуксом всё равно не работают.

При подключении через внешний usb-хаб в debug начинается вот это http://pastebin.com/kjs5TeTC.
Кстати, с фьюзами и кварцем всё в порядке.

Код: Выделить всё

#define F_CPU   12000000UL      //12 MHz
#include <avr/io.h>
#include <util/delay.h>

int main()
{
        unsigned char i = 0xFB;
        DDRD = DDRB = 0xff;
        while (1) {
                PORTD = PORTB = i;
                i = ~i;
                _delay_ms(2000);
        }
        return 0;
}

Уровни изменяются каждые 2 секунды, все порты проверил, рабочие. Значит проблема точно в прошивке - если конкретно то я подозреваю обработчик прерывания (потому что asm не знаю), всё остальное (что на С) вроде в порядке. Кто-нибудь хорошо знающий ассемблер, посмотрите пожалуйста в архиве usbtiny/int.S, всё ли там соответствует моей схеме (D+ на PD2, D- на PD3, подт. для D- на PD5).

Еще забыл упомянуть - у меня ATTiny2313A - может в этом проблема?
Вложения
usbtinyisp.zip
(143.81 КБ) 213 скачиваний
denis5594
Родился
Сообщения: 12
Зарегистрирован: Вс ноя 20, 2011 07:43:49

Re: Программатор USBTiny не определяется

Сообщение denis5594 »

Похоже я разобрался в чем проблема - кажется обработчик прерывания не установлен.

Код: Выделить всё

#define F_CPU   12000000UL      //12 MHz
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>

int main()
{
        unsigned char i = 0xFF;
        DDRD = 0xFB, DDRB = 0xFF;

        PCMSK |= 1 << PIND2;
        MCUCR = (1 << ISC01) | (1 << ISC00);
        GIMSK |= (1 << INT0);

        sei();

        while (1) {
                PORTD = i & ~(_BV(2));
                i = ~i;
                _delay_ms(1000);
        }
        return 0;
}

ISR(INT0_vect)
{
        PORTB = (~(PINB & _BV(0))) & _BV(0);
}

Эта программа мигает на PORTD (кроме D2) с частотой 1 сек и на B0 по прерыванию. При подключении к ноуту B0 мигает как раз вместе с ошибками в консоли.
Если залить прошивку то постоянно горит D4, изредка подмигивая. По программе D4 должен зажигаться при включении, гаснуть при RESET(SE0) и снова зажечься после получения адреса usb. Действие при прерывании без обработчика - сброс контроллера, поэтому D4 и горит постоянно.
Вопрос к знатокам асма - подскажите, куда копать и на что обратить внимание?
Я приведу кусочек листинга где ставиться прерывание и некоторые макросы, весь код в аттаче.

Код: Выделить всё

__attribute__((naked))      // suppress redundant SP initialization
extern   int   main ( void )
{
  PORTD = 0;
  DDRD = _BV(4) | _BV(3) | _BV(5);

  PCMSK |= 1 << PIND2;
  MCUCR = (1 << ISC01) | (1 << ISC00);
  GIMSK |= (1 << INT0);
  sei();

  PORTD = _BV(5) | _BV(4) | _BV(3);
  while(1) usb_poll();
  return 0;
}

usbtiny.h:
#define   USBTINY_INT         0

def.h:
#define   CAT2(a,b)      CAT2EXP(a, b)
#define   CAT2EXP(a,b)      a ## b
#if   defined SIG_INT0
#  define USB_INT_VECTOR   CAT2(SIG_INT, USBTINY_INT)
#else
#  define USB_INT_VECTOR   CAT2(SIG_INTERRUPT, USBTINY_INT)
#endif

int.S:
..........................
#define   tmp      fixup
#define   nop2      rjmp   .+0   // not .+2 for some strange reason

   .text
   .global   USB_INT_VECTOR
   .type   USB_INT_VECTOR, @function

USB_INT_VECTOR:
   ; save registers
   push   count
   push   usbmask
  ...........................
Вложения
usbtinyisp.zip
(143.28 КБ) 198 скачиваний
denis5594
Родился
Сообщения: 12
Зарегистрирован: Вс ноя 20, 2011 07:43:49

Re: Программатор USBTiny не определяется

Сообщение denis5594 »

Всем спасибо, разобрался - проблема была в новом определении обработчика прерывания и в каком-то странном баге gcc 3.6. Если кому еще понадобится - обязательно собирайте с avr-libc-1.4.4 binutils-2.16.1 gcc-3.4.6.
уткодроз
Потрогал лапой паяльник
Сообщения: 330
Зарегистрирован: Вс апр 17, 2011 12:09:57

Re: Программатор USBTiny не определяется

Сообщение уткодроз »

denis5594

А можете выложить правильную скомпилированную прошивку для USBTiny
программатора ver 2.0?
denis5594
Родился
Сообщения: 12
Зарегистрирован: Вс ноя 20, 2011 07:43:49

Re: Программатор USBTiny не определяется

Сообщение denis5594 »

уткодроз писал(а):denis5594

А можете выложить правильную скомпилированную прошивку для USBTiny
программатора ver 2.0?

Вообще-то я пересобирал прошивку из-за того, что переставил некоторые функции на другие пины МК. Если вы все собрали по авторской схеме, то вам подойдет обычная прошивка, которая уже скомпилирована автором и находиться в архиве с исходниками USBTiny (spi/main.hex).
Вложения
main.hex.zip
(2.34 КБ) 221 скачивание
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»