Hallo, ich plane auf Basis des Atmel NGW100 eine intelligente Schnittstellenkarte zwischen I2C Bus und Ethernet zu realsieren. Auf dem AVR32 läuft embeded Linux und genau da fängt das Problem an. Ich habe von Linux nur miminale, eher gar keine Ahnung! Allerdings habe ich einige Erfahrungen mit den einfachen AVR 8Bitern gemacht und hatte daher dazu tendiert das Linux direkt runter zu schmeißen und von Begin an alles selber zu schreiben. Da ich jedoch ebensowenig Erfahrung mit Ethernet oder I2C Programmierung habe, ist wohl doch geschickter auf die von Atmel zur Verfügung gestellten Treiber zurück zu greifen. Ich habe nun einige Stunden auf der Suche in Google und diversen Foren verbraucht, um Code Beispiele für I2C btw. Ethernet zu bekommen. Aber bin da leider kein Stück schlauer geworden. Vom Prinzip her möchte ich: Sensoren -> I2C -> Sensor Vorverarbeitung -> Ethernet/UDP -> PC Meine anfängliche Hoffnung, dass ich unter Linux nur ein Device "I2C" und ein weiteres für "Ethernet" mittels meinem eigenen Programm für die Sensor Vorverarbeitung ansprechen brauche, war wohl zu naiv gedacht? ALso wie bekomme ich den I2C Bus gelesen / beschrieben, btw den Netzwerkcontroller? Benutzt Linux automatisch den DMA Controller, oder muss ich das explizit programmieren? Ich würde auch auf ein 8Biter (Atmega32 oder größer) wechseln, allerdings reicht mir die Performance nicht aus. Es ist erforderlich, dass die Ethernet Verbinung einen Datendurchsatz von 20-30Mbit/s schafft. Wünschenswert wären mir Einschätzungen, ob das von mir gewünschte mittels NGW100 überhaupt realsierbar ist? Alternativen (ARM7/9) sind möglich, da keine Hardware angeschafft. Falls NGW100 ok, wie bekomme ich den I2C btw Ethernet mit meinem eigenen Programm angesprochen? An dieser Stelle erstmal vielen Dank fürs lesen und ich bin für jede Hilfe dankbar Gruß, Thorsten
> I2C ... > ...Datendurchsatz von 20-30Mbit/s und von was Träumst du in der Nacht?
Hallo Werner, nachdem ich die Application Note "AVR32AP7 Networking Performance" gelesen hatte, war ich der Meinung, dass es durchaus möglich seien sollte. Dort steht dass das NGW100 in etwa 50Mbit/s schafft. Quelle: http://www.atmel.com/dyn/resources/prod_documents/doc32066.pdf Mag seien, dass 50Mbit/s doch sehr optimistisch ist, aber die Hälfte sollte wohl möglich seien? Gruß
Nachtrag: Das der I2C Bux max 400kb/s liefern kann ist mir klar, jedoch entsteht durch die Vorverarbeitung die enorme Datenmenge. Soll heißen die Ethernet Verbindung PC <-> NGW100 muss die 20-30Mbit/s leisten können, und das sollte wohl möglich seien.
Hallo, kann man denn die Daten nicht direkt unverändert über LAN übertragen und erst auf dem PC decodieren? Wodurch wird die Datenrate denn so groß? So wie ich das an meinem NGW100 sehe, gibts da noch keinen Treiber für I2C, den musst du komplett selber schreiben. Kann aber sein, dass das mittlerweile schon jmand gemacht hat. Grüße, Peter
Natürlich gibt es fertige Treiber für i2c. Im menu config vom avr32 buildroot einfach i2c aktivieren und den Kernel neu kompilieren, dann hast du ein i2c device drauf. MfG Mark
Hallo Mark, wenn ich den Kernel mit I2C neu kompeliere, dann ist zwar I2C aktiviert, ber an der Stelle habe ich dann ein Verständnisproblem. Wie greife ich dann auf das Device zu? Ich habe noch keine API im Netz gefunden, die ich dann in meinen Source-Code einpflegen könnte. Wo muss ich da ausschau halten, dass ich da was finde? Gleiches gilt natürlich auch für den Ehternet-Controller. Hallo Peter, ein kurze Erklärung zu meinem Projekt: Es geht um ein Fahrzeug, welches mittels Ultraschallsensoren eine Karte der Umwelt errechnen soll. Die Sensoren komunizieren mit einem Mikrocontroller (z.B. NGW100) via I2C und haben eine Reichweite von bis zu 6 Metern. Bei einer Abdeckung von 360° kommt da eine Fläche von 112m2 zustande. Ich denke an eine Rastergröße von 5x5 bis 10x10cm und Abtastschrtte von 0.1-1 Sekunde. Da kommt eine enorme Datenmenge zusammen. Die einzelnen Kacheln je Abtastschritt werden auf einen Host-PC via Ethernet geladen, der dann die gesamte Karte verwaltet. Daher ist es möglich aus geringen Messdaten eine enomre Datenflut zu produzieren. grüße, Thorsten
@TGraber Für I2C siehe http://www.avrfreaks.net/index.php?name=PNphpBB2&file=viewtopic&t=63285 , da ist ein sehr gutes Bespiel im 2ten Post. Warum willst du den Ethernet-Controller selbst ansteuern? Sowie ich Dein Vorhaben verstanden habe, reichen normale TCP sockets vollkommen aus. Im Extremfall kann man ja immer noch Raw-Sockets nehmen.
Hallo Thosten, du kannst das I2C device doch einfach über ssh oder ein raw-Socket zum PC durchtunneln, dann ist die Datenrate gering genug, dass das NGW sie locker verarbeiten kann. Du solltest auch bedenken, dass die Entwicklung der Software auf einem richtigen PC wesentlich angenehmer ist (man hat ein Grafikdisplay). Ich kenne deine Sensoren ja nicht, aber wenn sie I2C sprechen, haben sie offenbar die Intelligenz schon drin. Also funktioniert das irgendwie so, dass man einen Messwinkel vorgibt und den Abstand der Reflektion zurückbekommt? Diese Information kann man doch direkt ohne weitere Verarbeitung an den PC übertragen. Schließlich benötigt sie ja wohl auch nur der PC, oder verstehe ich das falsch? Warum sollte die Information direkt auf der kleinen CPU verarbeitet werden, wenn dadurch die Kommunikation aufwändiger wird und nicht klar ist, ob die Rechenleistung für die geforderte Bildrate ausreicht? Viele Grüße, Peter
Hallo Mark, erstmal danke für den Link zum I2C. Werde ich mir sehr genau anschauen. zum Ehternet-Controller Ich muss zugeben, dass ich davon leider sehr wenig Ahnung habe. Falls es eine Möglichkeit gibt, auf Software-Ebne (Befehle von Linux) mit dem Controller zu komunizieren, will ich das sehr gerne tuen und erspare mir den Kampf durch die Datenblätter des AVR32. Nur sind mir solche Befehle (in Form eine API) nicht bekannt. Da ich mit den Begriffen wie TCP-Socket und RAW-Socket nicht viel anfangen kann, kennst du ein Buch / Internetseite wo ich mich da mal einlesen kann? Vielleicht klärt sich dann auch vieles von selbst. Hoffe ich mal ;) Hallo Peter, ich schicke die Rohdaten (von den Sensoren) mit Absicht nicht direkt zum Host-PC, weil dieser sonst nicht genug Rechenzeit besitzt, alle Prozesse in Echtzeit abzuhandeln. Zusätzlich eine Wahrscheinlichkeitskarte der Umgebung zu rechnen mit vielleicht 1 Millionen 8Bit Multiplikationen pro Sekunde ist doch recht aufwendig, daher möchte ich diese auslagern. Das Prinzip einer Ultraschallmessung ist genau wie du beschrieben hast. Jedoch erhält man nicht nur die Information wie weit ein Objekt vom Sensor entfernt ist (aus Laufzeit hin und zurück) sondern auch Information darüber wo kein Objekt ist. (der Weg der Schallwellen ist ja nicht blockiert bis zum Objekt an dem sie zurück reflektiert werden) Diese Beiden Informationen kann man dann für eine Wahrscheinlichkeitskarte der Umgebung verwenden. Die Sensoren sind: Devantech SRF02 Also die Zeitmessung bekommen sie von alleine hin, ich muss im uC "nur" die Wahrscheinlichkeiten der Kacheln berechnen. Vielleicht kann mir jemand mitteilen wieviel Taktzyklen (oder Rechenzeit mit Taktfrequenz Angabe) ein AVR32 in etwa benötigt, um eine 8Bit Multiplitkation unter Linux. Gruß, Thorsten
Hallo Mark, ich hätte erst deinem Link folgen, und dann dir antworten sollen... Die API für den I2C Controller ist für meine Belange optimal. Sehr einfach, aber mehr benötige ich auch gar nicht. Vielen Dank! Falls jemand noch eine vergleichbare API für den Ethernet-Controller posten könnte, wäre ich sehr dankbar. Gruß, Thorsten
Hi z.B. http://students.cs.byu.edu/~cs460ta/cs460/labs/sockettutorial.html 8Mmul/s sind für einen PC kein Problem. Das sorgt nur für etwas Grundrauschen in der Prozessorauslastung. Du solltest wirklich die Verarbeitung der Daten dem PC überlassen. So ein PC ist um soviel Faktoren schneller als ein AVR32 das du keine sinnvolle Vorverarbeitung dort machen kannst. Matthias
Hallo, auf http://www.pronix.de/pronix-255.html gibts eine Einführung in Sockets und viele Bespielprogramme.
> Da ich mit den Begriffen wie TCP-Socket und RAW-Socket nicht > viel anfangen kann, Nichts für ungut, wenn Dir solche fundamentalen Grundlagen fehlen, wirst Du Dich bei Deinem geplanten Projekt sehr schwer tun und mit ziemlicher Sicherheit Schiffbruch erleiden. Evtl. wäre es klüger, erstmal mit etwas einfacherem Anfangen. Bevor man Laufen lernt, sollte man erst das Gehen gelernt haben...
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.