Hey Ich habe ein großes Problem und zwar hab ich 3 sensoren die ich mit meinem uC (LPC935) auswerte. Das mache ich über die AD eingänge. Ich muss diese dann auf einen PC übertragen und mein Professor gab mir die aufgabenstellung dies über einen LANCHIP (ENC28J60) mit einer UDP übertragung zu realisieren. Ich hab mir hier schon einige Threads durchgelesen und auch das Datenblatt des ENC28J60 nur hab ich das Problem das ich es einfach nicht verstehe. Ich schicke über SPI daten an den Lanchip und die will ich dann mit UDP auf den PC übertragen. Funktionert da die ganze Initialisierung und das setzten aller Register auch über SPI ? Die Projekte von Ullrich Radig hab ich auch schon gelesen aber die sind auf einem Webserver ausgelegt und sehr schwer zu verstehen. Ich hoffe ihr könnt mir die Grundsätze ein bisschen näher bringen. mfg Stefan
Das war nicht sehr nett von deinem Prof... bischen mehr RAM könntest du schon gebrauchen denn UDP mit dem ENC/LPC zu realisieren ist alles andere als trivial. Wieviel Wissen hast du ? stehst du völlig am Anfang ?
Hallo, Hier ist was für BASCOM-AVR aber sehr ausführlich (auch für UDP). Evtl. ist ja der Controller noch austauschbar. Here you can find a step-by-step tutorial about the Bascom-AVR code to drive an AVR and an ENC28J60 ethernetcontroller: http://members.home.nl/bzijlstra/software/examples/enc28j60.htm Markus
Hey Danke für die schnellen Antworten. Sag ma mal so .. ich kann ziemlich gut uC Programmieren und bei der C++ und Windows Programmierung eher Standard (paar Stunden in der Schule gehabt). Ich werd mir mal die Seite von Markus ansehen und versuchen den Code zu verstehen. Das Problem ist, dass ich von so einer Bausteinprogrammierung nicht viel Ahnung habe und das Datenblatt nicht so richtig verstanden habe. Ich versuch jedenfalls weiter die Projekte hier im Forum durchzuforsten um zu schauen was ich verweten kann usw. mfg Stefan
Grundsätzlich: Der ENC28J60 wird komplett über SPI gesteuert, d.h. sowohl die Konfiguration als auch die Nutzdaten schiebst Du im Endeffekt da durch. Aber: Der Chip ist ein Ethernet-Controller, will heissen er kann Ethernet-Frames senden und empfangen. Nicht mehr und nicht weniger. Die ganzen höheren Protokolle die Du noch brauchst um eine Kommunikation über UDP aufzubauen muss der ansteuernde Mikrocontroller in Software implementieren. Falls du z.B. UDP über IPv4 verwenden willst bräuchtest Du also mindestens ARP, IP und eben UDP. Ein bisschen ICMP (Echo Requests beantworten) ist auch sehr hilfreich, dann kann man das Teil sogar anpingen ;) Frei verfügbare IP-Stacks die man mit dem ENC einsetzen kann gibts einige, allein hier im Forum lässt sich genug finden.
Hey Danke für deine Antwort, dass hat mir beim Verständnis schon mal viel gebracht. Ich wollt aber fragen "Die ganzen höheren Protokolle die Du noch brauchst um eine Kommunikation über UDP aufzubauen muss der ansteuernde Mikrocontroller in Software implementieren." Heißt das die Software muss ich auf meinem uC aufbauen oder auf dem PC-Programm? Und meine 2te Frage ist : "Frei verfügbare IP-Stacks die man mit dem ENC einsetzen kann gibts einige, allein hier im Forum lässt sich genug finden." IP-Stacks sind also quasi die Softwareimplementierung des Protokolls IP ? Und ist dieser IP-Stack auf dem uC oder auf dem Computer zu verwenden ? mfg Stefan
Als "billig-Test", wenn man die MAC Addresse des Ziels kennt, kann man auch ein Packet zusammenfriemelen: <-MAC FRAME-><IP-HEADER><UDP-HEADER><DATEN> und dieses auf die Reise schicken. Peinlich ist nur, daß man falls sich die <DATEN> verändern auch dann die Checksum in den übergeordneten Header korrigieren muss und/oder die Längenangaben. Der Algorithmus ist billig. Dann geht aber kein anpingen, kein Ändern der Ziel-IP Adresse und das Ziel muss im selben SUBNET sein. Auch keine Rückmeldung und keine ICMP Fehlermeldungen anderer Art. Sogar einen SNMP Trap könnte man auf diese Weise loswerden. (Auch UDP, Aufbau des Telegramms aber ein wenig aufwändiger). Problematisch ist wie erwähnt die Korrektur der Checksums, falls die Länge der Daten brav gleichbleibt. Dann kann man sich das Übernehmen eines "Mini-Stacks" evtl. sparen. Andererseits: Solche Stacks gibt es inzwischen an allen Ecken und Enden zum nutzen, also warum nicht den ganzen Weg gehen und den ENC gleich gescheit anbinden: Zu wenig RAM! Tja. Dann baue eben die Telegramme selbst etc. etc. wie oben angedeutet. Bedeutet aber ein wenig Einarbeitung in IP, UDP Formate. Grüße, Mike
Noch ein Hinweis: UDP hat die nette Eigenschaft, lediglich zu "senden, forget the rest" oder zu "empfangen, never mind acknowledging". TCP, anstelle von UDP, würde ich niemals ohne Stack implementieren. UDP Pakete (Telegramme) einfach zusammen bauen und weg damit. Aber: ETHERNET kennt keine IP Addressen, also ab an die MAC Addressen der Schnittstelle direkt. Für die Umsetzung in IP Adressen wäre ja wieder das interaktive ARP Protokoll nötig zum programmieren, mit ARP Cache und all dem Glumpatsch. Aber von Hand ein ETHERNET Paket "aufbauen" und absenden, no Problem. Das Paket muss nur stimmig sein, also ob es ein Stack für Dich aufgebaut hätte. Grüße, Mike
Hey Danke wieder für die Antwort :) Also verstehe ich das richtig .. ich konfiguriere den Lan Chip über SPI, dann mach ich mir ein Packet <-MAC FRAME-><IP-HEADER><UDP-HEADER><DATEN> und schick das dann über SPI vom Stick? Mal so überspitzt ausgedrückt .. ich werd mich natürlich jetzt reinlesen in die Formate und so weiter, nur dass ich die Grundzüge verstehe. Du sagst wenn sich die Daten ändern stimmen die Checksummen nicht mehr. Nunja ich schick ja Messwerte von 3 Sensoren, die ändern sich schon aber ich glaub du meinst die Datenlänge nehm ich mal an oder? Die würde ja gleichbleiben. Also XX von den 1500 Byte möglichen Daten. Und die Verbindung beruht direkt auf einem Kabel also Lanchip -> Buchse -> Lankabel -> PC des heißt, es bleibt auch immer die gleiche MAC adresse. mfg Stefan
Die Verkapselung der Daten läuft grundsätzlich so ab wie Du das dargestellt hast. Wenn Du dir den Aufbau der IP- und UDP-Pakete mal genauer anschaust wird auch sicher noch einiges klar. das IP-Paket ist die "Nutzlast" des Ethernet-Frames, das UDP-Paket ist wiederrum die Nutzlast des IP-Pakets. Ansonsten: -Wenn Du dein Board direkt an den PC anschließt müsste das mit der festen MAC im Prinip funktionieren. Schön ist es aber nicht. Z.B. musst Du in dem Fall immer darauf achten das auf der PC-Seite die MAC-Adresse deines uC-Boards im ARP-Cache vorhanden ist. Sonst sendet Windows fröhlich ARP-Anfragen, die niemand beantwortet. Ich würde zumindest mal darüber nachdenken ARP zu implementieren, so kompliziert ist das eigentlich auch wieder nicht sobald man etwas Durchblick im Netzwerkprotokoll-Dschungel hat. -Die Checksumme der Pakete ändert sich sobald sich Daten innerhalb des Paketes ändern, auch wenn die Paketlänge gleich gleibt. Der Algorithmus für die CRC-Berechnung ist aber nicht sehr umfangreich, die Funktion kann man sich sicher sehr gut aus einem der vielen freien IP-Stacks rausziehen. Davon abgesehen verwenden IP und UDP die gleiche CRC, d.h. es ist auch nur eine einzige Funktion die man braucht. Ethernet wiederrum verwendet zwar eine andere CRC, um die kann sich der ENC28J60 aber praktisch komplett selbst kümmern wenn man es so einstellt (automatische Berechnung beim Senden und genauso automatische Überprüfung beim Empfangen).
Hör nicht auf Bernd... ...was du machen möchtest, geht einfach, es gibt auch genug Kram im Netz. Nimm dir die Software von U. Radig, ziehe die Treiber-Schicht und die Initialisierungs-Routinen raus und fertig. LPC: Chip resetten MAC setzen Senden PC: UDP socket aufmachen und auf Daten warten fertig
ARP Cache im PC egal. Der will nix zurücksenden. Sender des empfangen Pakets entnimmt er aus dem IP Header. Dennoch bissi Speicher braucht man um das Paket zusammenzustellen und an den ENC zu übermitteln. Das ganze ist natürlich eine erste totale Primitiv-Lösung. Wenn die Längen der Daten sich nicht ändern muss man nur die CHKDSUM neu berechnen. Achso, besser ist es auch, die evtl. im IP header die ID jeweils im 1 hochzuzählen per Sendung. Schau mal im WWW ein ETHERNAT Paket an... Bleibt natürlich: INIT des ENC, wie sendet man was, wie übergibt man das Paket Byte für Byte per SPI, etc.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.