Forum: Mikrocontroller und Digitale Elektronik SD-Karte Code Ulrich Radig


von Alain F. (fox82)


Lesenswert?

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:
1
Build started 25.6.2008 at 16:53:21
2
avr-gcc.exe  -mmcu=atmega32 -Wall -gdwarf-2 -std=gnu99 -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -MD -MP -MT SD-Cards.o -MF dep/SD-Cards.o.d  -c  ../SD-Cards.c
3
../SD-Cards.c: In function 'main':
4
../SD-Cards.c:71: warning: pointer targets in passing argument 1 of 'fat_search_file' differ in signedness
5
avr-gcc.exe -mmcu=atmega32 -Wl,-Map=SD-Cards.map SD-Cards.o     -o SD-Cards.elf
6
SD-Cards.o: In function `main':
7
C:\(Meine Daten)\Privat\(AVR Projekte)\Projekte\SD Radig\default/../SD-Cards.c:26: undefined reference to `usart_init'
8
C:\(Meine Daten)\Privat\(AVR Projekte)\Projekte\SD Radig\default/../SD-Cards.c:29: undefined reference to `usart_write_P'
9
C:\(Meine Daten)\Privat\(AVR Projekte)\Projekte\SD Radig\default/../SD-Cards.c:32: undefined reference to `usart_write_P'
10
C:\(Meine Daten)\Privat\(AVR Projekte)\Projekte\SD Radig\default/../SD-Cards.c:30: undefined reference to `mmc_init'
11
C:\(Meine Daten)\Privat\(AVR Projekte)\Projekte\SD Radig\default/../SD-Cards.c:34: undefined reference to `usart_write_P'
12
C:\(Meine Daten)\Privat\(AVR Projekte)\Projekte\SD Radig\default/../SD-Cards.c:36: undefined reference to `fat_cluster_data_store'
13
C:\(Meine Daten)\Privat\(AVR Projekte)\Projekte\SD Radig\default/../SD-Cards.c:42: undefined reference to `mmc_read_csd'
14
C:\(Meine Daten)\Privat\(AVR Projekte)\Projekte\SD Radig\default/../SD-Cards.c:46: undefined reference to `usart_write_P'
15
C:\(Meine Daten)\Privat\(AVR Projekte)\Projekte\SD Radig\default/../SD-Cards.c:54: undefined reference to `usart_write_P'
16
C:\(Meine Daten)\Privat\(AVR Projekte)\Projekte\SD Radig\default/../SD-Cards.c:57: undefined reference to `fat_read_dir_ent'
17
C:\(Meine Daten)\Privat\(AVR Projekte)\Projekte\SD Radig\default/../SD-Cards.c:63: undefined reference to `usart_write_P'
18
C:\(Meine Daten)\Privat\(AVR Projekte)\Projekte\SD Radig\default/../SD-Cards.c:64: undefined reference to `usart_write_P'
19
C:\(Meine Daten)\Privat\(AVR Projekte)\Projekte\SD Radig\default/../SD-Cards.c:65: undefined reference to `usart_write_P'
20
C:\(Meine Daten)\Privat\(AVR Projekte)\Projekte\SD Radig\default/../SD-Cards.c:67: undefined reference to `usart_write_P'
21
C:\(Meine Daten)\Privat\(AVR Projekte)\Projekte\SD Radig\default/../SD-Cards.c:71: undefined reference to `fat_search_file'
22
C:\(Meine Daten)\Privat\(AVR Projekte)\Projekte\SD Radig\default/../SD-Cards.c:73: undefined reference to `usart_write_P'
23
C:\(Meine Daten)\Privat\(AVR Projekte)\Projekte\SD Radig\default/../SD-Cards.c:77: undefined reference to `fat_read_file'
24
C:\(Meine Daten)\Privat\(AVR Projekte)\Projekte\SD Radig\default/../SD-Cards.c:80: undefined reference to `usart_write_P'
25
C:\(Meine Daten)\Privat\(AVR Projekte)\Projekte\SD Radig\default/../SD-Cards.c:85: undefined reference to `usart_write_P'
26
make: *** [SD-Cards.elf] Error 1
27
Build failed with 19 errors and 1 warnings...
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

von neuer (Gast)


Lesenswert?

...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.

von Martin M. (kaktus621) Benutzerseite Flattr this


Lesenswert?

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!

von Alain F. (fox82)


Lesenswert?

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.

von holger (Gast)


Lesenswert?

>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.

von Alain F. (fox82)


Lesenswert?

Habe Versuchsweise noch

#include "mmc.c"
#include "fat.c"
#include "usart.c"

angehängt. Jetzt klappt es.... mal schauen was die SD-Karte sagt, mehr 
dazu gleich...


AVR Memory Usage
----------------
Device: atmega32

Program:    4384 bytes (13.4% Full)
(.text + .data + .bootloader)

Data:        147 bytes (7.2% Full)
(.data + .bss + .noinit)


Build succeeded with 3 Warnings...

von Martin M. (kaktus621) Benutzerseite Flattr this


Lesenswert?

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...

von Alain F. (fox82)


Angehängte Dateien:

Lesenswert?

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.

von Pete K. (pete77)


Lesenswert?

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.

von Alain F. (fox82)


Lesenswert?

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.

von Alain F. (fox82)


Lesenswert?

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.

von Alain F. (fox82)


Lesenswert?

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.

von Alain F. (fox82)


Lesenswert?

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:
1
Cluster = 2580 DirA = 4c FileName = $").@€p
2
Cluster = 0092 DirA = 20 FileName = iyØ92.@
3
Cluster = 1050 DirA = 02 FileName = ÁÉR
4
Cluster = 61e2 DirA = a4 FileName = ¡š
5
Cluster = 5025 DirA = 0c FileName = `A
6
Cluster = 09b8 DirA = 00 FileName = VAÐ.Q’
7
8
Directory Ende
9
10
FERTIG!!


:-)

von holger (Gast)


Lesenswert?

>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.

von Alain F. (fox82)


Lesenswert?

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

von Alain F. (fox82)


Lesenswert?

Habe das gleiche Problem wie in diesem Beitrag:

Beitrag "Probleme beim lesen des Dateisystems auf SD-Karten"

von Jochen M. (taschenbuch)


Lesenswert?

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

von Alain F. (fox82)


Lesenswert?

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

von Alain F. (fox82)


Lesenswert?

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

von Simon K. (simon) Benutzerseite


Lesenswert?

Hier gibt es auch eine mglw. bessere und mehr standardkonforme SD/MMC 
Implementation.
Beitrag "MMC/SD-Karte mit FAT16 an AVR"

von Jochen M. (taschenbuch)


Lesenswert?

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

von Alain F. (fox82)


Lesenswert?

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

von RAAAAAAADIG (Gast)


Lesenswert?

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.

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
Noch kein Account? Hier anmelden.