Ich beziehe mich auf diesem Beitrag hier:
Beitrag "SD Karte mit FAT 16"
Ich habe die Schaltung sowie die Programmierung von Ulrich Radig
verwendet.
http://www.ulrichradig.de/
Er hat im Downloadpacket main.c dieses Programm müsste wie bei erst
genannten Beitrag über dier RS232 den Karten-Test ausgeben.
Alle Files habe ich ein neuen Ordner kopiert und main.c in mein Code 1:1
übernommen. Ich bekomme allerdings einen Fehler beim Complieren:
Wieso das?
Ich benutze ein ATMega32
AVR-Dragon
AVR-Studio 4.13 SP2 mit AVR GCC
Noch eine Frage: kann ich die Karte an das Hardware-SPI anschliessen und
trotzdem noch Programmieren über ISP?
Danke und Gruss Alain
...Noch eine Frage: kann ich die Karte an das Hardware-SPI anschliessen
und
trotzdem noch Programmieren über ISP?....
ich progge auch über hardware-spi die sd-karte mit fastavr und progge
auch meinen atmega mit isp darüber.
neuer wrote:
> ...Noch eine Frage: kann ich die Karte an das Hardware-SPI anschliessen> und> trotzdem noch Programmieren über ISP?....>> ich progge auch über hardware-spi die sd-karte mit fastavr und progge> auch meinen atmega mit isp darüber.
Also zu dieser Frage kann ich dir ganz klar antworten : JA, es geht. Ich
benutze seine Unit für mein derzeitiges Projekt (GPS-Logger) und kann
Problemlos über ISP programmieren egal ob die SD Karte eingelegt ist
oder nicht. Die SD Karte funktioniert weiterhin tadellos, sie bekommt
also nichts ab :P
Zu deinem Hauptproblem kann ich dir leider nicht gerade helfen. Ich
benutze das AVR-Studio und nachdem man die Header und Source Files in
das Projekt mit aufgenommen hat, funktionierte alles Prima. Auch wenn
ich eine andere Fat Unit benutze, da die von Ulrich Radig irgendwie
nicht so ganz bei mir wollte. Die MMC Ansteuerung von ihm funktioniert
hingegen perfekt!
Hallo Danke für die Antwort. Jetzt muss ich es nur noch zum laufen
bekommen.
Wenn ich die Datei mmc.c in ein Projekt einbinde, sowie Ulrich
geschrieben hat, dann kann ich es kompilieren. Dies ist aber noch zu
kompliziert, möchte zuerst mal ein Kartentest machen. Sonst weiss ich
gar nicht ob das geht.
Mein Wunsch ist einfach, dass ich Daten in ein .txt File speichern kann
und danach am PC auswerten.
Was für eine Libary brauchst du? Die von Holger Klabunde? Diese ist für
mich noch sehr Kompliziert und weiss daher nicht wie ich das zum laufen
bringen sollte.
>undefined reference to `usart_init'>undefined reference to `mmc_init'
So was bekommt man wenn man die Sourcefiles nicht alle mit
ins Projekt übernimmt. Also z.B. uart.c oder mmc.c.
Alain Fuchs wrote:
>> Was für eine Libary brauchst du? Die von Holger Klabunde? Diese ist für> mich noch sehr Kompliziert und weiss daher nicht wie ich das zum laufen> bringen sollte.
Als FAT Lib verwende ich 'MikroFAT16' von www.mikro-control.de
Lesen/Schreiben/Suchen funktionier damit bisher einwandfrei. Nur wird
auf nem ATMega8 durch die ganzen Libs der Speicherplatz etwas eng. Naja
mir fehlt nur noch der GPS Teil, ich hoffe mal nicht, dass er mehr als
30% des Speichers einnehmen wird...
So also scheint geklappt zu haben:
Telnet:
System Ready!
System Ready!
** Keine MMC/SD Karte gefunden!! **
Jetzt muss ich noch mit dem Fehler kämpfen, dass die SD-Karte nicht
erkannt worden ist. Ein Bildchen von meinem Aufbau kann im Anhang
begutachtet werden.
Der #include Befehl wird üblicherweise dazu benutzt, Headerdateien
einzubinden.
Also etwa:
#include "mmc.h"
#include "fat.h"
#include "usart.h"
In den Headerfiles sind die Prototypes der Funktionen definiert.
Ja klar!
Nur
#include <stdio.h>
#include <string.h>
#include <avr/io.h>
#include <avr/eeprom.h>
#include "mmc.h"
#include "fat.h"
#include "usart.h"
#include "mmc.c"
#include "fat.c"
#include "usart.c"
Ulrich kann sich doch nicht verschrieben haben er hat nur angegeben
#include "mmc.h"
#include "fat.h"
#include "usart.h"
Wieso dass es jetzt klappt ist komisch. Also klappt nur mit Programm und
UART. Ob die Karte funktioniert weiss ich noch nicht.
Also wenn ich die Karte rausnehmen und wieder einstecke, dann kommt die
ID etc. Aber danach alles komische Zeichen. Was könnte hier das Problem
sein? Leitungslänge, Habe von den Transistoren zu der SD-Karte nur 7cm.
Ansteuerung vom Kontroller ist aber länger siehe Bild weiter oben.
System Ready!
Karte gefunden!!
cc 1e c5 7c fe 4e 63 92 72 49 b 80 39 84 c5 5c
Directory
Cluster = 2563 DirA = c0 FileName = ÑK!g´„.
Cluster = b86b DirA = 08 FileName = VIð†º….Š=˜
Cluster = 59b6 DirA = 08 FileName = ¶D–„Ÿ¥Ì.+²
Es gibt aber komische Zeichen etwas stimmt mit der Übertragung nicht.
OK OK ich glaub es funktioniert jetzt!
Weiss wieso es nicht korrekt getan hat, mein Netzgerät brauch ein wenig
Zeit um einzuschalten. Man oH Man Fehler um Fehler. Dafür kam jetzt das
da:
>OK OK ich glaub es funktioniert jetzt!
Nö.
>Weiss wieso es nicht korrekt getan hat, mein Netzgerät brauch ein wenig>Zeit um einzuschalten. Man oH Man Fehler um Fehler. Dafür kam jetzt das>da:>Cluster = 2580 DirA = 4c FileName = $ " ).@€p
" $ " ).@€p" sieht mir nicht nach einem Filename aus !
>Telnet:
Das sieht mir nach Teilen des Webservers von Ulrich aus ;)
Dein Versuchsaufbau erzeugt bei mir eine Gänsehaut.
Das macht mich noch wahnsinnig!
Habe keine Ahnung was nicht geht. Kann mir jemand eventuell ein
Funktionierendes Projekt für den ATMega32 senden? So könnte ich
wenigstens mal schauen ob es an der Hardware liegt etc.
Gruss Alain
Alain,
Es ist ja immer sehrt schwer, Kritik zu üben an jemandem, der sich viel
Arbeit gemacht hat und die dann auch noch dankbarerweise veröffentlicht.
Aber ich habe an dem Code von U.Radig schon etwas auszusetzen, und das
ist m.E. auch genau der Grund für die Probleme, die hier immer wieder
geschildert werden. (unzählige Threads) Konkret ist dessen
Initialisierung (gemessen an den offiziellen Spezifikationen) einfach
falsch, und U.R. hat mir dazu auch mal geschrieben, er hätte einfach so
lange probiert bis es dann klappte. Wenn das im Einzelfall dann geht,
ist es ja ok, aber eine sinnvolle Vorgehensweise ist das für mich nicht.
Schau Dir doch z.B.ö mal das konkrete Timing, Impulsfolgen, Impulslängen
der Spezifikation einer SD im SPI-Modus an. Wenn Du das
Schritt-für-Schritt mit dem Code von U.R. vergleichst, wirst Du ganz
deutliche Abweichungen sehen.
Es fehlt auch ganz klar ein tragbares Konzept für stringentes
Fehlerhandling, im Code von U.R. sind z.B. die Timeout-Zeiten völlig
willkürlich, nicht nachvollziehbar und es existiert keinerlei Konzept
für einen klaren Abbruch und Wiederaufnahme bei Störung der Übertragung.
Ich persönlich halte das für ausgesprochen nachlässig und auch absolut
nicht für veröffentlichungsreif.
Es gibt keine konzeptionellen Fehlerflags, Störungen bubblen nicht nach
oben, (wie sich das gehört), im Fehlerfall ist es für die übergeordnete
Sofware nahezu unmöglich die Ursache zu ermitteln und einen definierten
Prozess zur Störungsbeseitigung einzuleiten.
Praktisch alle SD-Slots haben Pins für einen Card-Detect. Und das hat
auch einen guten Grund: Damit kann der Prozessor erkennen, dass die
Karte gewechselt wurde und einen vernünftigen Neu-Init veranlassen.
Radig hat das z.B. völlig unberücksichtigt gelassen.
Meine ganz klöare Meinung ist, dass es eben unglaublich wichtig ist,
sich SELBST mit der Materie zu beschäftigen, mal die Dokus aufmerksam zu
lesen, und so der Sache auf den Grund zu gehen. Natürlich ist das mühsam
und kostet Zeit. Das ist aber nunmal das Wesen eines Lernprozesses.
Einfach irgendetwas zum Abtippen zu suchen, was dann irgendwann rein
zufällig funktioniert, und selbst garnicht zu verstehen was da
eigentlich passiert ist GANZ SICHER keine Lösung! Das solltest Du
unbedingt mal erwägen.
Jochen Müller
Hallo Jochen Müller
Ja du hast ja recht. Es ist sicher besser, wenn man das von ganz Anfang
an selber aufbaut. Dann lernt man auch mehr. Nur bin ich ein
Hobby-Elektroniker. Ich bekenne mich zum Projekt einbinden und an meine
Bedürfnisse anpassen. Habe schon sehr viel erreicht, wenn man bedenkt,
dass ich erst seit anfangs Jahr mich mit Mikroprozessoren auseinander
setzte, ist mein Projekt natürlich hoch aus überbieten.
Es ist aber so, dass ich z.B. über das LabjackU12 bereits Sensoren
ausgewertet habe. Dies möchte ich jetzt nun via die SD-Karte machen.
Alles was es können muss ist eine txt-Datein zu erzeugen mit den Werten,
welche anschliessend hineingeschrieben werden. Am PC auslesen und cool
ist das ganze!
Habe alle Teile hier. Habe die Zeit auch nicht um mich so intensiv damit
zu beschäftigen, trotzdem würde ich gerne die SD-Karte zum laufen
bekommen in einer vernünftigen Zeit. Ich lerne auch ständig dazu und das
Ganze Wissen wird erweitert. Leider kenne ich niemand der mir helfen
könnte, daher ist das Forum hier die Optimale Lösung. Finde das Internet
sowieso mega cool in diesem Bereich. Dies wäre vor ein paar Jahren nicht
denkbar gewesen.
Versuche jetzt mal bei MrData anzuknöpfen.
http://www.uni-stuttgart.de/akamodell/projekte/?p=132
Gruss Alain
Wenn man etwas zum Jubeln hat!
Code von Radig:
System Ready!
Karte gefunden!!
MBR Signatur found!
VBR Signatur found!
0 26 0 32 5f 59 83 c8 be fb cf ff 92 40 40 d7
Directory
Directory Ende
File Found!!
:-)
Musste allerdings den AVR mit 3.3V betreiben und die SD-Karte direkt
anschliessen.
Gruss Alain
Alain,
Dann hast Du aber auch gleich den Ansatz zur endgültigen Lösung.
Entwerder stimmte Deine Pegelwandlung hinsichtlich der Pegel nicht, oder
es werden die Flanken dadurch verschliffen.
Ich möchte aber nochmal darauf hinweisen, dass der Code von Radig in
wichtigen Punkten von der Spezifikation abweicht, kein brauchbares
Error-Konzept enthält und daher mit vielen Karten nicht klappt, wie hier
auch öfters berichtet wurde. Den Link von Simon K. würde ich Dir deshalb
wenigstens zum Vergleich an Herz legen.
Jochen Müller
Hallo Jochen
Danke für die Antwort. Es ging mir auch mal drum, ob ich die Hardware
richtig angeschlossen habe. Werde mich sicher noch mit andere Codes
beschäftigen. Gerne würde ich auch auf das Fat32 umsteigen.
Es ist ein erster Erfolg und das ist wichtig für das Weiterkommen.
Gruss Alain
denk ich an Radig in der Nacht...bin ich um meinen Schlaf gebr...
Scherz beiseite. So'n Studium macht schon Sinn...
TIPPS zur Lösung eures Problems:
1. Formatiert die SD Karten niemals mit Windows. Von Panasonic gibt's
nen Free-Proggi (ja so was gibts wirklich noch) nennt sich SDFormatter
2.0 und taugt.
2. Der Spannungsteiler von Radig is'n Witz. Eingangswiderstände kennt
der "Entwickler" nicht, und was er nicht kennt, kann er auch nicht
berücksichtigen. Also, besorgt euch 3x 10k Spindeltrimmer und stellt
diese grob auf 7,2 k ein. Dann ist ein wenig tuning
angesagt...Spannungsversorgung hab ich aber nicht wie Radig mit 2 Dioden
auf 3.3 V gezogen, weil ich aus dem Alter raus bin, sondern aus'm
Spannungsregeler wie sich das gehört. Pollin Board hat sowas...Radig
nicht.
Läuft top stabil.