Forum: Mikrocontroller und Digitale Elektronik USBN9604 an ATmega16: Problem bei der Kommunikation mit Host


von Markus (Gast)


Lesenswert?

Hallo,

Ich steuere einen USBN9604 mit einem ATmega16 an. Lesen und schreiben
der Register vom USBN geht soweit ganz gut, nur die Kommunikation mit
dem Host klappt nicht. Zur Zeit lese ich in einer Schleife das
MAEV-Register aus. Nach dem Anschließen an den Bus wird nach kurzer
Zeit ein Reset vom Host erkannt (RST-Bit in MAEV gesetzt +
entsprechende ALTEV-Bits gesetzt), nach dem Reset kommen aber keine
Setup-Pakete an. Nur das FRAME-Bit (MAEV) ist ständig gesetzt.

Weiß da vielleicht jemand weiter? Ich sitze seit mehreren Tagen davor
und kann absolut keinen Fehler finden.

Gruß,
Markus

von Benedikt Sauter (Gast)


Lesenswert?

Hallo Markus,

ich habe eine dynamische Schnittstelle für den USBN9604 geschrieben.
Schau doch mal rein vielleicht hilfts was.

http://developer.berlios.de/projects/usbn2mc/

Gruss Bene

von bluppdidupp (Gast)


Lesenswert?

Kriegst du RESET vom Host oder setzt du deinen Controller in NodeReset
?

"This bit is set when 2.5 µS of SEO is detected on the upstream port.
In response, the functional state should be reset (NFS
in the NFSR register is set to RESET), where it must remain for at
least 100 µS. The functional state can then return to Op-
erational state. This bit is cleared when the register is read."

Sprich: Wenn Du Reset vom Host bekommst und Reset in ALTEV gesetzt ist,
musst du:
1) Im NFSR-Register NodeReset setzen
2) Mindestens 100 µS warten
3) Die "Function Adress" auf 0 setzen (FAR-Register)  und Address
Enable (auch FAR-Register) setzen.
4) Wieder nach NodeOperational wechseln (NFSR-Register)

So hab ich das in nem anderen Source gesehen, allerdings wartet der
Schreiber da 200ms statt 100 µS...

Ein wenig Source, den man zum schlau werden verwenden kann, findet man
hier bei den Weblinks und dem Projekt:
[url=http://www.mikrocontroller.net/articles/USBN960x]http://www.mikrocontroller.net/articles/USBN960x[/url]

von Markus (Gast)


Lesenswert?

Hallo,

Nach langer Zeit hab ich das Projekt mal wieder reaktiviert und dabei 
ist mir auch das usbn2mc-Projekt über den Weg gelaufen (hatte die 
Antworten damals gar nicht mehr bemerkt).
Wie zu erwarten war, funktioniert meine Firmware immer noch nicht. Jetzt 
hab ich aber in einem anderen Thread etwas über die Geschichte mit den 
Quarzen gelesen. Der USBN9604 will ja bekanntlich einen 
Grundwellenquarz. Da ich meinen Quarz damals bei Reichelt gekauft habe 
(in der Annahme, einen Grundwellenquarz zu erhalten), muss ich wohl 
davon ausgehen, dass ich zur Zeit einen Oberwellenquarz in meiner 
Schaltung habe. Das werde ich wohl ändern müssen.
Was mich aber sehr wundert ist, dass der Host mit meiner Firmware 
zumindest ein neues USB-Gerät erkennt (er versucht dann, die Adresse zu 
setzen, was fehlschlägt), wenn ich die Firmware des von usbn2mc 
verwende, bemerkt der PC aber überhaupt nichts. Kann sich das jemand 
erklären?

Gruß,
Markus

von Stefan Salewski (Gast)


Lesenswert?

Was hast Du denn am Taktausgang des USBN.
Wenn Du dort 4 MHz hast sollte alles ok sein.
Ich hatte dort 1,33 MHz und vermute daher, dass ich
einen Oberwellenquarz habe. Habe die Platine daher erstmal weggelegt.

Der Host merkt schon, dass ein neues Gerät am Bus hängt, wenn D+ bzw. D-
auf 3,3 V liegt -- also auch ohne funktionierende Kommunikation.

Gruß

Stefan Salewski

von Markus (Gast)


Lesenswert?

Die Frequenz am Taktausgang kann ich zur Zeit leider nicht messen, 
deshalb konzentriere ich mich momentan auf die Geschichte mit usbn2mc. 
Und da hab ich eben das Problem, dass der Host überhaupt nichts merkt, 
also der 3,3V-Spannungsregler anscheinend nicht eingeschaltet wird. Und 
was wundert mich etwas.

Gruß,
Markus

von Stefan Salewski (Gast)


Lesenswert?

Ist die Pinzuordnung Deiner Platine denn exakt so wie bei
der von Benedikt? Wenn nicht musst Du eventuell einige Dateien
anpassen. Du kannst ja mal mit meiner Platine vergleichen -- ich
hatte zwar versucht Benedikts Platine nachzubauen, aber so ganz sicher
war ich mir bei der Pinzuordnung auch nicht.
http://www.ssalewski.de/AVR_USB_gEDA.html.de

von Benedikt S. (Firma: embedded projects GmbH) (flopper)


Lesenswert?

Hallo Markus,

das beste ist du baust mal eine UART Verbindung vom Recher zum AVR auf. 
Dann klemmst du den USBN9604 dran und fragst mal die Version oder so ab 
ist Register 0x02 oder 0x03.

Im Datenblatt steht was du da genau kriegst. Es gibt in usbn2mc auch ein 
"Terminal" bei dem muss du nur UARTWrite und die USBN lese und schreib 
funktion anpassen.

Lauft den AVR schnell gennung? Ich arbeite meist mit 16 MHz. Es kann 
sein wenn du langsamer drauf zugreifst, dass die Timings in meiner Lese 
und Schreibfunktion nicht stimmen.


Gruss Bene

von Markus (Gast)


Lesenswert?

Mein AVR läuft zur Zeit mit dem internen RC-Oszillator bei 4MHz, Was das 
Timing betrifft, habe ich in deinen Schreib- und Lesefunktionen nichts 
gefunden, was über ein asm("nop") hinausgeht. Ich habe auch mal meine 
funktionierenden Schreib-/Leseroutinen da eingesetzt und es hat sich 
nichts geändert.

Ich sollte aber erst mal die Sache mit dem Quarz vernünftig hinbekommen 
- der schwingt nämlich nur mit 8MHz.


Gruß,
Markus

von Benedikt S. (Firma: embedded projects GmbH) (flopper)


Lesenswert?

Ah ok, dass ist natuerlich das erste mal was du schaffen musst. Ich hab 
meine bei csd-electronic gekauft. Die haben normale Grundton Quarze da. 
Beim bestellen sollte 24.000 MHz in der Artikel beschreibung stehen.

Gruss Bene

von Rupplyn (Gast)


Lesenswert?

Bei Reichelt gibt's nen smd-quarz als 24mhz grundton...
den verwend ich zumindest.
die von segor gehen auch...

bei national kriegst du übrigens nach ner registrierung democode 
dafür...

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.