USBN9604 an ATmega16: Problem bei der Kommunikation mit Host

Gast #319596
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
Gast #319598
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]
Gast #471909
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
Gast #471918
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
Gast #471941
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
(Firma: embedded projects GmbH) #472031
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
Gast #473384
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren