USB Initialisierung
Mittwoch, 23. Mai 2012
 
 

PIC Mikrocontroller Forum  |  PIC Mikrocontroller  |  PIC Mikrocontroller Allgemein  |  Schnittstellen (Allgemein)  |  USB Initialisierung « vorheriges nächstes »
Seiten: [1] Nach unten Drucken
Autor Thema: USB Initialisierung  (Gelesen 1642 mal)
 
Michael Schumann
Newbie
*
Offline Offline

Beiträge: 11


Profil anzeigen
« am: Februar 18, 2010, 19:52:14 »

Hallo Leute,

Auch ich will versuchen es mit der USB-Schnittstelle aufzenehmen.

Besonders tiefgehend hab ich mich allerdings noch nicht in die Materie
eingearbeitet und werde die nächsten Tage wohl nicht dazu kommen, nur
Grundlagen bei Sprut.de gelesen, Datasheet und versch. Schaltungen
angeschaut...


Die Schaltung, die ich bauen möchte, soll nicht nur mit
USB-Stromversorgung (wie alle Beispielschaltungen die ich im Internet
finden konnte), sondern auch eigenständig funktionieren. Ich hab also
für den PIC (18F4550) eine eigene Spannungsversorgung.
Im Datasheet (Kap. 17.6.2) steht, _das USB-Modul des PIC sollte erst
eingeschaltet werden, nachdem vom Host eine Spannung anliegt._

*Ist das wichtig?*

Ich meine, Neben dem Text ist eine Beispielschaltung in der ein Pin zu
diesem Zweck abgefragt werden kann. Dummerweise hab ich bereits alle
Pins belegt und kann nur schwer einen dafür abdrücken...



Wenn ich die grundlegenden Vorgänge richtig verstanden habe, fragt der
Host (was wohl der PC sein wird) sowiso erstmal ganz pauschal das Device
(PIC) nach seinen Eigenschaften und vergibt eine Adresse.

Sollte das nicht auch funktionieren, wenn das USB-Modul am PIC bereits
eingeschaltet war?
Wenn nicht, bin ich dankbar für jede Lösung, die keinen zusätzlichen Pin
benötigt.



Grüße, Michael
Gespeichert
Stampede
Globaler Moderator
Hero Member
*****
Offline Offline

Beiträge: 969



Profil anzeigen WWW
« Antworten #1 am: Februar 18, 2010, 23:28:39 »

Hi,

Zitat
Im Datasheet (Kap. 17.6.2) steht, _das USB-Modul des PIC sollte erst
eingeschaltet werden, nachdem vom Host eine Spannung anliegt._
Zitat
Sollte das nicht auch funktionieren, wenn das USB-Modul am PIC bereits
eingeschaltet war?
Ich habe schon mehrere USB Geräte mit 18F4550 gebaut und noch nie einen Pin dafür bereitgestellt.
Ich bin mir ziemlich sicher, dass es auch so gehen wird.
17.6.2. behandelt den Self Power ONLY Mode. Trifft das bei dir denn zu?

Gruß
Stefan
Gespeichert

qwer
Newbie
*
Offline Offline

Beiträge: 15


Profil anzeigen
« Antworten #2 am: Februar 19, 2010, 00:17:23 »

Hallo Michael,
der bus-sense-Pin wird in der Funktion „USBCheckBusStatus“ abgefragt, damit der PIC weiß, ob der UsbStecker angeschlossen ist oder nicht. Die erste Reaktion der usb-Firmware (=Software, die alle usb-Aufgaben erledigt) wenn sie bemerkt dass dieser Pin high ist: sie schaltet das UsbModul ein. Umgekehrt – und das ist wahrscheinlich noch wichtiger – schaltet sie das UsbModul ab, wenn
dieser Pin low wird.
Deine berechtigte Frage ist: was passiert, wenn das UsbModul eingeschaltet ist, obwohl der Bus noch gar nicht angeschlossen ist.
In der Firmware von Microchip gibt es zwei Funktionen, die für diese Frage relevant sind: USBCheckBusStatus und USBDriverService. Sie werden aus einem while(1)-Loop heraus abwechselnd aufgerufen.
Wenn du einen permanent angeschlossenen Bus simulierst ((usb_bus_sense == USB_BUS_ATTACHED) ist immer TRUE), dann wird die Funktion USBCheckBusStatus die „SEO-condition“ abfragen (beide Datenleitungen [D+, D-] sind low). Das ist das Signal für ein Bus-Reset. Das wird bei dir der Fall sein, solange du den UsbStecker nicht einsteckst. Das heißt, dein PIC wird glauben, dass der Host den UsbBus resetet. (ich bin mir jetzt nicht ganz sicher, ob das stimmt: es gibt da noch diesen PIC-internen pullup an einer der Datenleitungen)
Die andere Frage ist die Suspend-condition (= keine Busaktivität über eine Zeitspanne von min 3ms), die von der Funktion „USBDriverService“ gecheckt wird, in dem sie die IDLE-InterruptFlag prüft. Das kann sie allerdings nicht, solange die (vermeintliche) SEO-condition besteht. Falls keine SEO-conditoin besteht (bin da unsicher wegen des internen pullups) und dein PIC in den suspendMode kippt, wäre das aber auch noch nicht schlimm. Dann pollt er solange die  ACTIV-InterruptFlag, bis eine Busaktivität eintritt (bis du den UsbStecker anschließt) und dann müsste die SetupPhase ganz normal einsetzen.
Du siehst: die Sache ist sehr verzwickt. Ich bin mir nicht sicher, was passiert. Es könnte auch sein, dass sich die Firmware hoffnungslos in ihre eigenen, komplizierten Eingeweide verstrickt. Aber du könntest es einfach ausprobieren und dann berichten. Würde mich interessieren. Was du aber – glaube ich - nicht ausprobieren solltest ist, den UsbStecker anzustecken, bevor du die PIC-Versorgungsspannung einschaltest.
Vielleicht hilft dir der PIC-sourcecode aus meinem usb-Oszilloskop-Projekt in diesem Forum. Da ist die  Microchip-Usb-Firmware in ein einzelnes File gepackt und daher (wie ich finde) etwas übersichtlicher, als in dem File-Chaos von Microchip.
Viel glück qwer
Gespeichert
Michael Schumann
Newbie
*
Offline Offline

Beiträge: 11


Profil anzeigen
« Antworten #3 am: Februar 19, 2010, 09:40:39 »

Besten Dank für die Antworten!

Freut mich, dass die Aussicht besteht, das könne funktionieren.

Normalerweise wird der PIC seine eigene Spannung haben, aber ich könnte die doch einfach mit den 5V der USB-Dose verbinden. Dann kann es auch nicht vorkommen, dass der PIC stromlos am Bus hängt.
Sollte keine Probleme verursachen oder?

Da ich noch am Layout entwickeln (entwurschteln) bin und die Teile nichtmal bestellt sind, kann ich es leider noch nicht ausprobieren.
Und dann muss ich mich ja noch in die Firmware einfinden …

Aber wenn es dann soweit ist, werd ich mich wieder melden (oder schon früher mit anderen Problemen Smiley).

Danke noch mal
Grüße, Micha
Gespeichert
Seiten: [1] Nach oben Drucken 
« vorheriges nächstes »
Gehe zu:  

Powered by MySQL Powered by PHP Made for Mozilla (Firefox) Made for Internet Explorer
Seite erstellt in 0.036 Sekunden mit 18 Zugriffen.
 
Top! Top!