Hallo zusammen, dem ein oder anderen mag aufgefallen sein, dass man für kleine Webserver sehr häufig die Kombination aus Atmel-Mikrocontrollern und dem ENC28J60 findet, wohingegen Anwendungen mit dem TI MSP430 ausschließlich den CS8900A zu verwenden scheinen. Da ich als MSP430-Benutzer allerdings nicht auf Atmels umsteigen wollte, und mich durch andere Projekte schon mit dem ENC28J60 auskenne, habe ich mir mal die Mühe gemacht, einen "Treiber" zu schreiben, der mit dem MSP430 uIP Port zusammen läuft. Einiges konnte ich hierbei allerdings auch der Atmel-Version der Bibliothek (2005 von Pascal Stang) entnehmen. Ich habe bei meinem MSP430F1611 den USART1 verwendet, sprich Pins 5.1-5.3 für die SPI-Signale, und Pin 4.6 für Chip-Select gewählt. Das lässt sich aber in der Header-Datei und der Methode init_spi() im c-Code ändern. In der main.c muss dann nur noch in allen Funktionsaufrufen das cs8900a durch ein enc28j60 ersetzt werden (ich weiß, ich weiß, man hätte das allgemeiner lösen können). Kleiner Tipp zu SPI: Es hat eine gute Weile gedauert, bis ich die Kommunikation zwischen Mikrocontroller und dem ENC28J60 stabil am laufen hatte, Problem hierbei waren Glitches auf dem SCK-Signal. Mit einem Kondensator von wenigen Picofarad war dem aber beizukommen. Schöne Grüße, Andreas
Hi Andreas, ich schreibe im Moment meine Diplomarbeit und arbeite dadurch auch mit dem ENC28J60. Ich habe bis jetzt schon einige Quelltexte des Treibers gesehen. Was mir dabei aufgefallen ist das fast alle ihren TX-Buffer auf Adresse 0x0000 legen. Ich hatte selber lange Zeit mit dieser Einstellung Probleme und es hat mir einige Zeit gekostet diesen Fehler zu finden. Keine Ahnung ob er bei jedem Auftritt, vorsichtshalber aber von mir mal ein kleiner Tip aus der Errata des ENC. Wie in der Errata des ENC28J60 beschrieben kann es passieren, dass es beim Initialisieren zu einem Fehler kommt. Der interne Pointer auf das Leseregister(ERXST) des enc wird nicht immer auf die Speicheradresse die beim Initialisieren angeben gesetzt. Blöd an diesem Fehler ist das er es manchmal macht und manchmal nicht. Um dieses Problem aus dem Weg zu gehen solltest du den RX-Buffer auf 0x0000 legen und den TX-Register auf MaxRAM - 0x0600 setzten. Dann kommt dieser Fehler nicht vor. MfG ba_brain
Hallo Rainer, ich habe bislang meine ENC28J60 sowohl mit dem RX-Buffer auf 0x0000->0x19FF (wie in den Errata angegeben) als auch mit 0x0600->0x1FFF problemlos laufen lassen, daher hatte ich in der Header-Datei die Werte von Pascal Stang beibehalten. Habe es jetzt aber doch mal geändert, und auch in die C-Datei noch den Workaround #11 eingebaut (der Wert in ERXRDPT muss ungerade sein). Danke für den Hinweis und viel Erfolg noch bei deiner Diplomarbeit (worum gehts?) Gruß, Andreas
Hi, Programmieren eines Webservers mit CGI-Schnittstelle auf einem TMS470 von Texas Instrument mit ENC28J60 und FreeRTOS als OS. Treiber ist soweit fertig. Stack musste ich glücklicherweise nicht neu erfinden, sonst hätte es Zeitlich bestimmt nicht hingehauen. Ich habe mich für den lwip-Stack entschieden der auch schon auf dem Board rennt. Werde jetzt nächste Woche damit anfangen den Webserver zu machen. Bin mir aber immer noch nicht ganz sicher wie. Werde ihn warscheinlich so ähnlich aufbauen, wie er beim uIP-Stack dabei ist. Vielleicht hast du ja noch ein paar Tips für mich. Gruß Rainer
Hallo alle ich bin durch Google hier hin gelangt. Ich bin dabei auf der Basis von MSP430 mit ENC28J60 eine Messfühler Board zu basteln, die Fühler sind über I2C Bus verbunden habe aber leider keine Erfahrung mehr mit "C" sondern bin ein Assembler Freak ;-) arbeite immer noch mit dem Uralt Tool von TI und Hitex weil es das einzige ist das ich kenne und eine "reell in der Schaltung" Emulation erlaubt, dabei auch noch die "Alten" P337 und P325 er unterstützt. Leider finde ich echt nur "C" Tools und Programme aber nix in Assembler. Die Sache ist die das ich das Board über Ethernet ansprechen muss also in etwa mit "192.168.5.1" oder so ähnlich, und auch eventuelle Schaltvorgänge auslösen können (bspw. mit PCF8574). dazu habe ich eine HTML Seite wo ich einfach werte eintragen kann erstellt. Auf dem PC funst das wunderbar aber wie bringe ich das in den MSP430 unter? Kann mir da wer Helfen?
Hi, ich weis der Beitrag ist schon etwas älter, aber ich hab eine Frage: Ich verwende dein Prog für den ENC. Das funzt auch soweit, allerdings wenn ich eine Anwendung habe, welche mehr senden muss als der uip_buffer, funzt es nicht. Woran kann dies liegen? Grüße David
Hab das Prob selber gefunden. in der enc28j60.h muss bei der definition der maximalen Buffergröße stehen:
1 | #define MAX_FRAMELEN UIP_CONF_BUFFER_SIZE+4
|
Das wars und dann gehts auch. Grüße David
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.