SD-Karte Code Ulrich Radig

OP #907204
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
Gast #907224
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.
Persönliche Seite #907244
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!
OP #907254
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.
OP #907268
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...
Persönliche Seite #907273
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...
OP #907295
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.
OP #907302
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.
OP #907319
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.
OP #907350
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!!


:-)
Gast #907391
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.
#907660
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
OP #908593
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
OP #913515
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
#913537
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
OP #914436
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
Gast #1491297
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren