Seite 1 von 5

SD-Karte und FTP-Server

Verfasst: 28.04.2008, 19:41:50
von wil
Damit der als Beitrag hier http://www.ulrichradig.de/site/forum/vi ... f=32#p3343 angefangene Thread mit meinem Projekt nicht an der vielleicht falschen Stelle fortgeführt wird beginne ich hier mal mit einem neuen Thread. Einführende Worte zu Umfang und Hardwareerweiterung sind in meinem obigen Beitrag nachzulesen.

Nachdem ja einige Leute meinen Code anscheinend auch auf ihren Boards zum Laufen gebracht haben :D und auch die ersten Bugs erkannt wurden kommt hier mal die erste Fehlerberichtigung:

- FTP Datenempfang
@Dietmar:
Auch große Dateien sollten mit der angehängten Version per FTP empfangen werden können. Habe es mit Dateien weit über 100KB getestet. Das einzige Problem ist bei mir, dass FileZilla sofort anzeigt, dass die gesamte Datei bereits übertragen wurde, auf dem Webmodul aber noch reger Verkehr vom Netzwerk herrscht. Das Webmodul sendet die "226 Transfer complete" Nachricht aber erst, wenn es tatsächlich mit der Übertragung fertig ist. FileZilla kommt dabei in einen Timeout und versucht dann die Datei ein 2. Mal zu übertragen. Werde bei Gelegenheit mal versuchen das Verhalten zu debuggen, falls nicht jemand dazu eine Idee hat.

Grundsätzlich hier noch ein paar Anmerkungen:
  • Die Webseiten welche von der SD-Karte gelesen werden sollen müssen sich alle im Hauptverzeichnis der Karte befinden. Der Code um Dateien aus verschiedenen Unterverzeichnissen zusammenzusuchen war mir bisher zu aufwendig und ist für einen Miniwebserver wohl auch nicht nötig.
  • Die Anzeige der Dateien mit Datum, Größe, Berechtigungen etc. ist in den RFC für FTP nicht definiert. Ich habe bisher keine Ahnung, wie eine allgemeingültige Verzeichnisanzeige auszusehen hat. Je nach FTP-Client wird daher die Verzeichnisstruktur unterschiedlich dargestellt. Mit FileZilla funktioniert es bei mir jedenfalls recht gut.
Zusätzlich habe ich den neuen Code von Ulis Stack Version 1.0.84 mit eingepflegt. Falls jemand will, kann er also auch E-Mails versenden :)

wil

Re: SD-Karte und FTP-Server

Verfasst: 29.04.2008, 20:13:13
von Neuuser
Hallo wil,
irgendwie komm ich noch nicht so recht klar mit dem allem hier, muss ich die Karte vorher auf Fat16 formatieren ? oder macht ich das in der sd-reader_source ? und dürfen es normale Html Dateien sein die ich übern PC einspielen kann.

Gruß Neuuser

Re: SD-Karte und FTP-Server

Verfasst: 29.04.2008, 21:05:26
von wil
Hi Neuuser,

das Webmodul ist ein µComputer und nicht als Ersatz für eine ausgewachsene Maschine zu sehen. Arbeiten wie SD-Karte formatieren etc. kann man woanders erledigen und nehmen auf einem sowieso platzbeschränkten Modul nur unnötig Speicher in Anspruch :wink:

Also: Karte formatieren - html-Datei erstellen und ins Rootverzeichnis kopieren (alles auf PC) - Karte ins Board und über Webbrowser die html-Datei mit Namen aufrufen (falls nicht index.htm)
- damit alles es funktioniert, die kleine Hardwareerweiterung mit dem Kartenschalter an PA6 anschliessen oder entsprechend im Code auskommentieren (dann hängt das Board aber eventuell etwas länger falls keine Karte steckt)
- danach kannst du mit ftp (FileZilla) Dateien hin und herschieben
Gruß
wil

Re: SD-Karte und FTP-Server

Verfasst: 30.04.2008, 00:51:37
von wil
Uli war gestern ja recht creativ und hat eine Version nach der anderen rausgebracht :o
Ist halt schon schwierig da nachzukommen. :?

Aber für die, die auf die Version 1.0.86 updaten wollen hier das Kochrezept:
  • von Version 1.0.86 folgende Dateien übernehmen
    - sendmail.h + sendmail.c
    - base64.c
    - cmd.c
  • in der Datei tcpcmd.c die Zeile 206 wie folgt ändern

    Code: Alles auswählen

    		ps = strsep(&pstr,"., ");
    
wil

Re: SD-Karte und FTP-Server

Verfasst: 30.04.2008, 18:48:22
von Neuuser
Hallo wil,
super und danke, es geht, aber muss die Karte unbedingt Fat 16 sein.

Gruß Neuuser

Re: SD-Karte und FTP-Server

Verfasst: 30.04.2008, 19:54:39
von wil
Hallo Neuuser,

was hast du damit für Probleme? FAT16 geht bis 2GB Karten, was für einen Miniwebserver ausreichen sollte. Immerhin unterstützt der Code auch lange Dateinamen!
Der Code für das Filesystem stammt eh nicht von mir und ich bin froh, dass Roland Riegel da sehr gute Arbeit geleistet hat. Ich hatte erst ein paar andere Implementationen getestet, aber der Code von Roland Riegel war der stabilste. Wenn du sowas für fat32 willst braucht das vieeeeeeeeeeeeeeeeeeeel Platz und was hast du dann für Vorteile???
Gruß
wil

Re: SD-Karte und FTP-Server

Verfasst: 30.04.2008, 22:09:01
von Neuuser
Hi wil,
schön ruhig , war doch nur eine frage, ich will doch gar nicht unbedingt ein anderes Format, fragte deswegen weil mit das einfache Fat über Win auf der Karte, die Seiten unvollständig und sehr langsam geladen werden.
Deine einstellungen hatte ich gemacht die du angegeben hattest.

Gruß Neuuser

Re: SD-Karte und FTP-Server

Verfasst: 30.04.2008, 23:02:26
von wil
Ich reg mich ja gar nicht auf, ich möchte nur, dass man begreift, das das hier kein Ersatz für einen Webserver ist. Theoretisch kannst du eine riesige Webseite auf der SD-Karte abspeichern und der http-Service wird sie dir auch ins Internet transportieren. Aber in erster Linie sehe ich so kleine Boards als Mess- und Steuerungscomputer an. ... und ich nehme an, Uli sieht es ähnlich, schließlich ist er ja der Urheber.
Wenn man hier was entwickelt, dann hat man recht schnell mit Speicherproblemen und ähnlichem zu kämpfen obwohl der 644 schon recht üppig ist. Performanceprobleme kommen aber nicht unbedingt von FAT16. Das Dateisystem ist bei kleinen Speichern bis 2GB bestimmt schneller als NTFS, FAT32 oder irgendein EXT3, HPFS oder sonst was. Der Overhead um an die Daten zu kommen ist recht gering. Das Problem liegt hier aber in dem Mangel an Speicher. 4 KB für die Daten sind halt nicht viel, wenn da 1200 Bytes für IP-Puffer und 512 Bytes für einen Datenblock des Dateisystems weggehen. Bestimmt könnte man das beschleunigen, wenn man die Verzeichniseinträge in einem zusätzlichen (512 Bytes)-Puffer zwischenspeichern könnte. Nur mit dem zusätzlichen Pufferspeicher läuft das RAM bald über, da die Bibliotheken und der Stack auch noch was haben wollen.

... und dann möchte da eventuell noch jemand die Kamera aktivieren :!:

Zudem ist die serielle Anbindung der SD-Karte über SPI die langsamere von den zwei Möglichkeiten.

Gruß
wil

Re: SD-Karte und FTP-Server

Verfasst: 02.05.2008, 09:38:16
von Neuuser
Hi will,
gut alles verstanden, eigentlich will ich ja das Modul auch zum Schalten und wallten verwenden, wozu es auch gedacht ist.
Aber man muss ja mal alles testen! wenn das MMC Slot schon dran ist :wink: und es muss ja auch ein :roll: erklärt werden, danke noch mal.
Finde ich im Forum, wie ich am besten die Eingänge und Ausgänge für verschiedene Anwendungen definiere.

Gruß Neuuser

Re: SD-Karte und FTP-Server

Verfasst: 02.05.2008, 13:18:23
von wil

Re: SD-Karte und FTP-Server

Verfasst: 12.05.2008, 21:07:49
von matwol
Hi Wil,
habe mal Deine Version 1.0.84 installiert und die Zeilen, wie von Dir beschrieben, ausgeklammert.. Mit Hyperterminal werden alle Verzeichnisse und Dateien richtig angezeigt.

Habe dann mal mit dem IE versucht meinen Server per Befehl ftp://192.168.0.1 aufzurufen. Hat auch geklappt, dann mit "Seite im IE anzeigen" gewählt. Bis jetzt klappt alles. Nur Dateien zu verschieben oder zu löschen klappt nicht. Oder ist das noch gar nicht integriert?
Normale Textdateien werden als Verzeichnis angezeigt. Firefox und Filezilla kommen dagegen gar nicht damit zurecht. Verwendet wurde SD-Karte mit 1GB, mit Fat unter Windows XP formatiert.

Gruss Wolfgang

Re: SD-Karte und FTP-Server

Verfasst: 12.05.2008, 22:49:26
von wil
Hi matwol,
Die Anzeige der Dateien mit Datum, Größe, Berechtigungen etc. ist in den RFC für FTP nicht definiert. Ich habe bisher keine Ahnung, wie eine allgemeingültige Verzeichnisanzeige auszusehen hat. Je nach FTP-Client wird daher die Verzeichnisstruktur unterschiedlich dargestellt. Mit FileZilla funktioniert es bei mir jedenfalls recht gut.
Ich verwende den aktuellen FileZilla und es wird richtig angezeigt. Das Problem ist tatsächlich die Anzeige der Verzeichnisstruktur. Fast alle FTP-Clients senden erst mal die Befehle SYST und/oder FEAT um das Betriebssystem auf der Gegenseite zu erkunden. Ich denke "AVR Eigenbau" wird als Antwort auf SYST wenig zu einer reibungslosen Kommunikation beitragen :wink:
Ansonsten kann man ja mal in den Quellcode von FileZilla reinschauen, was da erwartet wird. Nur mit FileZilla wird bei mir Dateigröße, Dateityp und Änderungsdatum schon richtig angezeigt. Was IE6 und IE7 (sind unterschiedlich!) erwarten weiß ich nicht. Auch nicht bei Firefox. Bisher hat mir FileZilla gereicht.
Wenn du willst kannst du mal die Zeile " sprintf_P((char *)pstr,PSTR("%i.%i.%i %i:%i %8s %s\r\n"),day, month, year, hour, min, tmpbuf,dir_entry.long_name);" in der Funktion cmd_MMCdir aus tcpcmd.c abändern. Wenn du da nur den "dir_entry.long_name" ausgibst, wird in IE auch einiges anders angezeigt. Nur gibt es dann keine Info mehr zur Dateigröße und Dateidatum. In den RFC steht halt der LIST-Befehl sollte beim Client einfach angezeigt werden, da er BS spezifisch ausgibt. Webbrowser und FTP-GUIs versuchen natürlich was "gescheites" draus zu machen. Nur gibt es wie gesagt kein allgemein gültiges Format.

Ein weiteres Problem bei FileZilla ist aber auch, dass er versucht zu optimieren und einiges aus seinem internen Cache anzeigt ohne bei der Gegenstelle nachzufragen. Ebenso erzählt er mir, die Übertragung von großen Dateien (100 KB) zum Webmodul sei ruckzuck erledigt, während auf dem Modul noch mindestens 10 Sekunden die LED der SD-Karte am blinken ist :?
Die Befehle DELE, MKDIR und RMDIR habe ich implementiert (nachsehen in tcpcmd.c). Daher klappt bei mir das Löschen von Dateien und Ordnern, sowie das Neuanlegen. Mit FileZilla kann man auch in der Verzeichnisstruktur der Karte die Ordner wechseln.

Die Größe der Karte sollte keine Rolle spielen solange es FAT16 ist. Das Problem ist die Verzeichnisanzeige und das was die FTP-GUIs draus machen.

Gruß
wil

Re: SD-Karte und FTP-Server

Verfasst: 12.05.2008, 23:00:55
von wil
Nachtrag:

Das Ausgabeformat vom LIST-Befehl mit Datum / Zeit / Größe oder <DIR> und Dateinamen ist übrigends das, was mir bei XP in einer CMD-Box angezeigt wird wenn ich DIR eingebe. Ich hab es auch mal mit dem UNIX-Format vom ls-Befehl versucht. War nicht so der Renner :x

Wie gesagt, falls jemand hierzu eine zündende Idee hat ... , da kann man den Code bestimmt verbessern.

wil

Re: SD-Karte und FTP-Server

Verfasst: 13.05.2008, 08:33:02
von matwol
Hi Wil,
zunächst Dank für Deine Antwort. Habe die neueste Version von FileZilla runtergeladen und es funktioniert. Schon mal ein Anfang.
Nur jetzt habe ich noch ein paar andere Fragen.

Also man kann jetzt ja z.B. HTML-Seiten am PC erstellen und auf die Karte übertragen, obwohl das auch direkt angesteckt besser und schneller ginge.

:?: Wie muss man nun vorgehen, wenn man von dieser Karte eine HTML-Seite laden möchte?
:?: Wie ist es, wenn man eigene Dateien, die vom AVR-Server erzeugt werden sollen, auf der Karte ablegen möchte.
:?: Wie stellt man das an, dass Dateien auf der Karte über das Internet abrufbar sind?

An meinem Router Fritzbox ist ein USB-Stick angesteckt, es könnte auch eine Festplatte sein, und kann über FTP-Protokoll angesprochen werden.
:?: Kann ich auch vom AVR-Server darauf zugreifen und wie muss man vorgehen um Dateien zu erzeugen zu löschen zu laden usw. ?

Das sind voerst genug Fragen.

Wünsche noch einen schönen Tag

Gruss Wolfgang

Re: SD-Karte und FTP-Server

Verfasst: 13.05.2008, 20:56:13
von wil
Hi matwol,

schön. dass es jetzt bei dir soweit klappt.

Zu deinen Fragen:
  • Wie muss man nun vorgehen, wenn man von dieser Karte eine HTML-Seite laden möchte?
    html-Datei erstellen und im Root-Verzeichnis der Karte ablegen. Zusätzliche Dateien (Bilder) auch ins Root-Verzeichnis ablegen, da der Code um die Dateien im Unterverzeichnis zu suchen zuviel Overhead mit bringt. Fall du index.htm auf der Karte abspeicherst wird sie direkt aufgerufen. Ansonsten die Datei im Browser angeben http://192.168.0.99/default.htm falls du default.htm abspeicherst.
  • Wie ist es, wenn man eigene Dateien, die vom AVR-Server erzeugt werden sollen, auf der Karte ablegen möchte.
    Beispiel:

    Code: Alles auswählen

    /*
    * Status mit allen Werten in Logdatei schreiben
    */
    void log_status(void)
    {
    	File *logfile = f16_open("logdata.csv","a");
    
    	if (logfile) {
    		f16_printf_P(logfile,PSTR("Zeit: %i; D4: %i; D5: %i; D6: %i; "), time,
    															(PORTD & (1<<4)), (PORTD & (1<<5)), (PORTD & (1<<6)));
    
    		// jetzt die Analogwerte
    		f16_printf_P(logfile,PSTR("%4i;%4i;%4i;%4i;"),var_array[0],var_array[1],var_array[2],var_array[3]);
    
    		f16_fputs_P(PSTR("\r\n"),logfile);
    		f16_close(logfile);
    	}
    }
    
  • Wie stellt man das an, dass Dateien auf der Karte über das Internet abrufbar sind?
    Mit FileZilla drauf zugreifen :wink:
    Wenn du von "außen" auf dein Webmodul zugreifen willst, musst du Dyndns einrichten. In der Fritzbox gibst du dann unter Portfreigabe das Webmodul nach außen frei. Am Einfachsten setzt du hierzu den Eintrag "Exposed Host" auf die Adresse deines Webmoduls. Es sollte kein Problem bereiten das Teil komplett freizugeben. (Ich möchte den Hacker sehen, der das Webmodul von außen hackt und dann in dein internes Netz kommt :P Ist zwar denkbar, aber den möchte ich dann mal sehen ...)
  • Kann ich auch vom AVR-Server darauf zugreifen und wie muss man vorgehen um Dateien zu erzeugen zu löschen zu laden usw. ?
    Das Webmodul ist ein FTP-Server. Eine FTP-Client-Funktion ist nicht dabei!
    Theoretisch geht das schon wenn man es programmiert :wink:
Gruß
wil