PowerSwitch mit ATmega1281 (Fehler: D+/D- beide auf High)

General discussions about V-USB, our firmware-only implementation of a low speed USB device on Atmel's AVR microcontrollers
Post Reply
Gast_1281

PowerSwitch mit ATmega1281 (Fehler: D+/D- beide auf High)

Post by Gast_1281 » Tue Sep 23, 2008 11:18 am

Ich versuche den PowerSwitch auf einen ATmega1281V zu portieren ... bin aber leider nicht der SW-Profi fuer all die AVR-USB Details.
---
Benutzte Quellen: PowerSwitch.2008-02-28.zip
WinAvr: "avr-gcc --version" ==> avr-gcc (GCC) 4.1.2 (WinAVR 20070525)
Betriebssystem: Windows XP Home Edition
Ziel-AVR: ATmega1281V mit externen 12MHz Quartz
Hardware:
* STK500+STk501 mit VTG=3.4V & Steckverbinder in EXPAND1
* Den Steckverbinder fuer EXPAND1 an die Widerstaende geloetet und diese dann an das USB-Kabel
* D+ = PB1 & PD2 / D- = PB0 (wie in circuit.pdf, 68 bzw. 1K5 Ohm nach VTG)
* PORTB auf dem STK500 mit Bandkabel an die LED's angeschlossen.
* 12 MHz Quartz auf dem STK500
* FUSEs fuer ext. Oszillator angepasst (andere Fuses Factory-Setting)
Source-Code Test-Compile:
Archiv in ein neues Verzeichniss ausgepackt und dann im Unterverzeichniss ./firmware "make all" gestartet. Das erzeugte HEX-File entspricht leider NICHT dem mitgelieferten HEF-File.
* 28.02.2008 22:39 4.976 main.hex.original
* 23.09.2008 10:24 5.177 main.hex (neues File)

... ich habe mich aber nicht weiter davon beirren lassen. Danach Makefile geoeffnet und DEVICE = atmega1281 fuer meinen AVR angepasst. Ein erneutes Uebersetzen liefert dann
* 28.02.2008 22:39 4.976 main.hex.original
* 23.09.2008 10:32 5.741 main.hex (neues File)

... haette ich nicht erwartet, dass sich die Groesse des HEX-Files so signifikant gegenueber dem TinyAVR aendert.
... aber was soll's. USB-Kabel in den Laptop gesteckt und druecken der Reset Taste auf dem STK-500. Es leuchtet waehrend Programm-Starts kurz die LED an PINB0 fuer 0.5sec auf und der LAPTOP meldet ein USB Ereigniss .... leider aber keine korrekte Anmeldung.

Der Fehler scheint die Signal-Spannung fuer D+ und D- zu sein. Beide liegen dann statisch bei 3.1 ... 3.3V. Das sollte eigentlich nicht so sein - glaube ich.

Die Registersettings fuer PORTB bzgl. Pull-up wurden kontrolliert (AVR-Studio) und sollten inaktiv sein (aber noch nicht direkt gemessen). Die Suchmaschine ist leider sehr sparsam mit Information zu AVR-USB & ATmega1281 :-(

Wer hat Ideen, wo das Problem liegen koennte ???

Grendel
Rank 4
Rank 4
Posts: 167
Joined: Sat Dec 16, 2006 9:53 pm
Location: Oregon, USA
Contact:

Post by Grendel » Tue Sep 23, 2008 8:39 pm

Kann Dir leider nicht sagen was dass Problem ist. :( Klingt nach einem Takt Problem, ueberprueff Deine Fuse-Bit Einstellungen.

Der Groessenunterschied der HEX images liegt vmtl. am GCC. Christian benutzt meist V3.X.X, V4.X.X erzeugt deutlich groesseren Code..

Gast_1281

PowerSwitch mit ATmega1281 (Fehler: D+/D- beide auf High)

Post by Gast_1281 » Wed Sep 24, 2008 12:31 am

FEHLER_1: INT0 ist fuer den ATmega1281 das Pin PD0 (geht immer noch nicht)
==> Steckverbinder korrigiert (EXPAND1/Pin38)
==> in firmware/main.c Einstellung fuer DDRB korrigiert (DDRD = ~(1 << 0); /* all outputs except PD0 = INT0 */)

Gast_1281

PowerSwitch mit ATmega1281 (Fehler: D+/D- beide auf High)

Post by Gast_1281 » Wed Sep 24, 2008 10:25 pm

Kontrolle: PE7 als CLKO konfiguriert - 12MHz korrekt messbar (und danach Fuse wieder zurueckgesetzt)

FEHLER_2: ISP-Verbindung (6-polig) vom STK501 zum STK500 aendert D+ auf High-Pegel
==> IPS-Verbindung entfernt

FEHLER_3: Kabel (10-polig) auf dem STK500 von PORTB zu LEDS aendert D+ auf High-Pegel Ausserdem hat der AVR dann Problem ein korrekten Low-Pegel zu liefern (Vmin ca. 1V anstatt <0.3V)
==> Kabel entfernt

Im Ergebniss ist der Anschluss D+ auf Logic-Low und D- auf Logic-High. Auf D- ist das 500msec dauernde Reset klar nachzuvollziehen. Das 500msec Reset-Signal wird alle 2.04sec immer wieder ausgegeben. Auf der Leitung D- passiert aber ueberhaupt nichts - konstanter Low-Pegel.

Trotzdem kommt immer noch "USB Geraet nicht erkannt" ... Grrrrrhhhhhhh.

Experiment:
Wenn ich trotzdem mit angeschlossenen LEDs arbeite (siehe FEHLER_3), kommt zwar auch die Meldung "USB Geraet nicht erkannt", aber nach einem Doppel-Click laesst sich im anschliessenden Dialog das System soweit starten, dass mit usbview.exe () fuer den RootHub[Port2] die Meldung DeviceFailedEnumeration: Unbekanntes Geraet auftaucht.

Ausserdem kommen jetzt weitere Details bei Nutzung von usbview.exe:
* Device Bus Speed: Low (Juhu - dir richtige Geschwindigkeit)
* Device Descriptor / bcdUSB: 0x0000
* Device Descriptor / bDeviceClass: 0x00
* Device Descriptor / bDeviceSubCloss: 0x00
...
und alle weiteren Angaben haben die Werte 0x00 bzw. 0x0000

... und es geht immer noch nicht ... Grrrrrhhhhh ... wie bekomme ich nur leben in die D+ Leitung und nicht nur konstant Low-Pegel?

christian
Objective Development
Objective Development
Posts: 1443
Joined: Thu Nov 09, 2006 11:46 am

Post by christian » Thu Oct 09, 2008 4:34 pm

Hast Du ein scope? Im Prinzip MUSS sich auf der D+ Leitung was tun, sonst koennte er nicht behaupten, dass die enumeration schief gegangen ist.

Wenn Du ein Speicherscope hast, trigger auf D+ und schau' nach, ob das device auf ein request antwortet. Meistens kann man die Antwort am leicht anderen Pegel erkennen.

Sonst check' noch die Pegel, wenn das device sendet. Die meisten designs verwenden Zener Dioden um die Pegel zu limitieren.

Gast_1281

Post by Gast_1281 » Sat Oct 11, 2008 9:37 pm

(1) Nachdem die Draehte des USB-Kabel abgerissen sind alles noch mal nachgeloetet und ordentliche Zugentlastung drangebaut.
(2) Compile Strategie geaendert - verwende jeztzt das mitgeliefert Makefile, statt des AVR-Studio.

... HURRA - es meldet sich der PowerSwitch am PC :-)

Die Einbindung der Assemblerfiles im AVR-Studio war nicht korrekt. Es wurden immer die alten Object-Files vom Tiny-AVR verwendet und nicht neu erzeugt. Jetzt geht es auch mit dem AVR-Studio, nachdem das Assembler-File mit als Quell-File eingetragen wurde.

(3) Dann den Treiber aus dem Verzeichnis ./commandline/windows-driver fuer die Installation verwendet.
(4) powerSwitch.exe status liefert dann eine ordentlich Meldung ueber die Portleitung.

Gast_1281

Post by Gast_1281 » Sat Oct 11, 2008 10:19 pm

Eigentlich wollte ich ein paar Oszi-Screendumps dranhaengen - weiss aber nicht wohin hochladen :-(


Gast_1281

Re: PowerSwitch mit ATmega1281 (Fehler: D+/D- beide auf High)

Post by Gast_1281 » Sat Jan 09, 2010 11:55 am

Bild 1 und Bild 2 sind leider vertauscht .... also zuerst "...vergroessert" anschauen.

Post Reply