Hallo,
ich will mit Hilfe der "Radig Methode"
(http://www.ulrichradig.de/home/index.php/avr/mmc-sd) eine SD Karte an
meinem NET IO anschliessen. Leider funzt es noch nicht. Ich glaub es
liegt an der Softwareintegrierung von mir.
Mein Problem sehe ich darin, dass ich u.a. kein Platz mehr für den
1
// #define SPI_SSSD 3 //Nicht Benutz muß aber definiert werden
habe.
Ich habe den somit auskommentiert, da er auch nirgends verwedent wird,
jedoch steht in Ulrichs Kommentar das er definiert werden muss? Muss das
so sein?
Ausserdem habe ich in der config.h folgende Portinitialisierung (Port D)
vorgenommen:
1
// Port D-0 = USART 1 RxD
2
// Port D-1 = USART 1 TxD
3
// Port D-2 = USART 2 RxD
4
// Port D-3 = USART 2 TxD
5
// Port D-4 = SD-Karte Pin 2 - SPI_DI Input
6
// Port D-5 = SD-Karte Pin 5 - SPI_Clock Output
7
// Port D-6 = SD-Karte Pin 7 - SPI_DO Output
8
// Port D-7 = SD-Karte Pin 1 - MMC_Chip_Select Output
9
10
//1=OUTPUT / 0=INPUT -> Bei 0 (Eingang) mit Portx den Pullup aktivieren
11
#define OUTA 0b00000000
12
#define OUTC 0b11111111
13
#define OUTD 0b11101011
14
//Achtung!!!! an PORTB ist der ENC
beißt sich das eventuel mit den Einstellungen in der mmc.h (PS.: Meine
beiden seriellen Verbindungen (Pin 0-3 des D-Ports) funktionieren noch
einwandfrei!
Im Anhang auch noch ein Bild meiner Verdrahtung. Ich benutze vier
verschieden SD Karten mit FAT16 formatiert.
Vielen Dank für jegliche Tips....
Initialisierung mmc.h
Hallo Oszi,
ich hatte gerade auch einmalig "Karte gefunden!"
Und die Meldung aus der fat_ini() "MBR Signatur not found!"
Nach nochmaligen aus/einstecken der Karte kommt jetzt wieder nur " Keine
MMC/SD Karte gefunden!!"
Ich kann es nicht reproduzieren....
Meinst Du denn, dass meine config Einstellungen OK sind?
????
SD-Karten sind sehr empfindlich was Spannungsversorgung angeht, auch die
Konstruktion mit den Spannungsteilern als Pegelwandler ist nicht
Optimal. Außerdem wirkt deine Fliegende Verdrahtung wie eine riesen
Antenne.
Das kann also nur schief gehen.
Heißt für dich: Vernünftiges Adapter-Board besorgen und nochmal
versuchen.
Markus P. schrieb:> kommt jetzt wieder nur " Keine MMC/SD Karte gefunden!!"
Mach erst mal die Gegenprobe am PC ob sie überhaupt noch lebt.
Klappriger Aufbau auf Steckbrett hat oft Kontaktprobleme.
Hi,
ich habe schon einige Experimente mit SD Karte und primitiven
Spannungswandlern gemacht. Es funktioniert nur sehr unzuverlässig.
Am Besten ist, Du verwendest einen Mikrocontroller, der mit 3,3V
versorgt wird und schließt da die SD Karte direkt mir sehr kurzen
leitungen an. Mehr als 5cm würde ich gar nicht erst versuchen.
Falls das mit den 3,3V nicht geht, dann besorge Dir eine Platine mit
SD-Slot und Pegelwandler. Die gibt's für Arduino bei eBay - man kann sie
selbstverständlich auch mit anderen Mikrocontrollern benutzen.
Weiterhin zicken SD Karten generell gerne mal. Ich habe z.B. eine im
Fotoapparat, die ausschließlich dort und im Laptop meiner Frau
funktioniert. Auf mienm Laptop kann ich sie nur auslesen, aber nicht
beschrieben (dann geht das Filesystem kaputt) und auf den anderen
Geräten und USB Adaptern läuft die gar nicht. In meinem AVR Webserver
steckt eine alte Mikro-SD Karte, die sort super funktioniert, aber im
Handy will sie nicht gehen. Manchmal muss man einfach eine andere Karte
versuchen - so blöd das auch ist.
> Mein Problem sehe ich darin, dass ich u.a. kein Platz mehr für den> #define SPI_SSSD 3 //Nicht Benutz muß aber definiert werden> habe.
Das kann gar nicht sein.
Definitionen erzeugen keinen Programmcode und können daher auch keinen
Platz belegen. Nur wenn sie benutzt werden, erzeugen sie Code.
Definitionen sind einfach nur Textersetzungen, die der Pre-Compiler vor
dem eigentlichen Compiler anwendet.
1
#define Trallala printf("Hallo");
2
#define Nix printf("Nix los");
3
4
void main() {
5
Trallala
6
}
In diesem Fall wird Platz belegt, weil "Trallala" in der main() Funktion
benutzt wird. Für die Definition "Nix" wird hingegen kein Platz belegt,
weil sie nicht verwendet wird.
Ich würde zuerst die Funktion der spi-Schnittstelle unabhängig von der
sd-karte überprüfen. Du hast einen software-spi. Wenn du in der
spi-funktion zum testen delays einbaust, kannst du die Funktion gut
nachvollziehen und fesstellen, an welcher Stelle im code das Problem
liegt.
>Ich habe den somit auskommentiert, da er auch nirgends verwedent wird,>jedoch steht in Ulrichs Kommentar das er definiert werden muss? Muss das>so sein?
Ja, das muss so sein. Wenn der SS Pin nicht auf Ausgang
geschaltet wird hängt sich das SPI Modul immer wieder auf.
>Ja, das muss so sein. Wenn der SS Pin nicht auf Ausgang>geschaltet wird hängt sich das SPI Modul immer wieder auf.
Upps, du hast ja Software SPI. Dann muss das nicht sein.
Danke erstemal an Alle,
Morgen probiere ich es aus direkt mit kurzen Verbindungen am NetIo die
Karte "fest" zu verlöten....
Mit kein Platz für den SS-Pin meinte ich nur das ich keinen freien
Ausgang mehr habe, deswegen....
Ich meld mich morgen wieder, wäre schön wenn ihr nochmal vorbei schaut
fals ich noch ne Frage habe....
So, da bin ich weider...leider ohne Erfolg;-)
Im Anhang zwei Bilder der neuen Platine, jetzt sind die Leitungen von
den Ausgängen des NET IOS nur noch circa 6cm lang (10poliges
Flachbandkabel)
Seht ihr vielleicht irgendetwas was ich falsch gemacht haben
könnte...die Karten sind alle FAT16 formatiert (Kontrolliert mit
"EaseUS Partition")
Habe jetzt effektiv drei verschiedene im Einsatz (Toschiba (s.Bild),
AnyCard SD und Transcend SD, alle 1GB groß)
Das ist jetzt meine Config:
1
// Port D-0 = USART 1 RxD
2
// Port D-1 = USART 1 TxD
3
// Port D-2 = USART 2 RxD
4
// Port D-3 = USART 2 TxD
5
// Port D-4 = SD-Karte Pin 2 - SPI_DI Input
6
// Port D-5 = SD-Karte Pin 5 - SPI_Clock Output
7
// Port D-6 = SD-Karte Pin 7 - SPI_DO Output
8
// Port D-7 = SD-Karte Pin 1 - MMC_Chip_Select Output
9
10
11
#define SPI_DI 4 //Input Port Pin an dem Data Output der MMC/SD-Karte angeschlossen ist
12
#define SPI_DO 6 //Output Pin an dem Data Input der MMC/SD-Karte angeschlossen ist
13
#define SPI_Clock 5 //Output Pin an dem die Clock der MMC/SD-Karte angeschlossen ist (clk)
14
#define MMC_Chip_Select 7 //Output Pin an dem Chip Select der MMC/SD-Karte angeschlossen ist
15
// #define SPI_SSSD 3 //Nicht Benutz muß aber definiert werden
16
17
18
19
20
//1=OUTPUT / 0=INPUT -> Bei 0 (Eingang) mit Portx den Pullup aktivieren
Spar dir den nerv mit der Pegelwandlung. Nimm einen atmega644 oder 1284,
die Kannst du mit 3Volt betreiben. Da passt die sd-karte und der enc
direkt dran.
> Was für einen Pegelwandler würdest du empfehlen? Wie würdest du es
machen?
Hab ich doch geschrieben! Und auch andere.
Ich zittiere:
Am Besten ist, Du verwendest einen Mikrocontroller, der mit 3,3V
versorgt wird und schließt da die SD Karte direkt mir sehr kurzen
leitungen an. Mehr als 5cm würde ich gar nicht erst versuchen.
Falls das mit den 3,3V nicht geht, dann besorge Dir eine Platine mit
SD-Slot und Pegelwandler. Die gibt's für Arduino bei eBay - man kann sie
selbstverständlich auch mit anderen Mikrocontrollern benutzen.
Hast du schon mal eine SD Karte eines anderen Herstellers getestet?
Bei meinem letzten Projekt ließen sich z.B. Platinum und Intenso Karten
nicht zu funktionsfähigen Betrieb überreden. SanDisk und hama Karten
funktionierten auf Anhieb.
Ich habe noch ein paar SD Karten bestellt, ausserdem auch einen
Pegelwandler. Den mc auf 3V umzubauen geht bei mir nicht so gut, dann
muss ich andere Sachen umwandeln....
Ich meld mich....
Markus schrieb:> Den mc auf 3V umzubauen geht bei mir nicht so gut
Signalleitungen von 5V-Geräten mit nur 3Volt zu betreiben, ist meistens
kein Problem. Ich nehme immer 5 Volt Stromversorgung und einen
3volt-StepDown-Regler für den AVR und die 3V-Geräte.
Was du noch machen könntest, wäre die sd-Karte an PortB anzuschließen.
Der wird wegen dem enc eh mit 3Volt versorgt. Du musst dann nur die
CS-Leitung auf 3Volt herunterregeln, was auch mit deinem Spannungsteiler
funktionieren müsste.
Du musst schon mehr als eine Leitung beschalten.
Und auch die Output-Enable Leitungen müssen beschaltet werden.
Wobei die Datenleitung bidirektional ist. Also doppelt beschaltet. Da
musst Du noch steuern, in welche Richtung das Signal laufen soll.
Also ganz so einfach geht das nicht.
Kauf Dir doch besser einen fertigen SD-Slot mit eingebautem
Pegelwandler. Die gibt's ganz billig als Arduino Zubehör.
>>Wobei die Datenleitung bidirektional ist.>>Bei SD Karten ist keine der Leitungen bidirektional.
Im SPI Modus wohlgemerkt, und darum geht es hier.
Bevor jemand meckert;)
Ich habe natürlich alle nötigen eingangs Pins der SD Karte so
beschaltet...also muss ich G1 ..2..3 auch noch auf Vcc legen?!?! Laut DB
verstehe ich das irgendwie anders...???
Du mußt /Gn auf GND legen damit Puffer Nr. n durchschaltet.
Allerdings ist der 74HC125 eher schlecht als Pegelwandler von 5V -> 3.3V
geeignet, weil er interne Schutzdioden hat.
Leider hat das noch nicht geklappt, die Meldung
** Keine MMC/SD Karte gefunden!! **
kommt trotzdem immer noch.
Das einzige was mir jetzt aufgefallen ist, dass die Meldun ohne SD Karte
im Slot, circa jede 1 Sekunde kommt. Stecke ich irgendeine Karte ein,
kommt die Meldung 10mal die Sekunde???
Sieht das vielleicht nach einem bestimmten Fehler aus?
Hallo,
schau dir das mal an:
http://www.exp-tech.de/Shields/Itead-SD-MICRO-SD-Breakout.html
Hat alle Funktionen die du brauchst. Der Preis ist unschlagbar.
Zweit Slots (groß/klein), 3 oder 5 Volt, Spannungsregler, Led.
UND... funktioniert mit allen bekannten Tools/Lib's auf Anhieb.
Mit dieser Schaltung kannst du dich auf dein Programm konzentrieren und
musst dich nicht immer fragen, ist der Fehler in der Software oder
funktioniert meine Hardware nicht!
Gruß G.G.
Hi und danke, habe ich mal bestellt....
Da kann ich dann auch direkt mit meinen NET IO Ausgängen un ddem einen
Eingang drauf gehen, oder?!?!?!? Muss ich was an den internen PullUps
beachten?
Hi,
ich habe es immer noch nicht hin bekommen, ich habe jetzt den Adapter
(http://www.exp-tech.de/Shields/Itead-SD-MICRO-SD-Breakout.html)
erhalten und angeklemmt, siehe Bild. Ich benutze die Programmcodes im
Anhang und meine main sieht im Gunde so aus...(s.unten):
Hat noch jemand eine Idee warum das nicht gehen kann? Habe ich noch
einen Klemmfehler, eventuell erkenn man das auf den Bildern....
Es ist doch richtig, dass der "SPI_DI" an den DO des SD-Karten Adapters
geht, oder?
Dieser zehnpolige stecker an dem SD-Kartenhalter geht auf die "EXT"
Klemme des Net-IO (Klemmplanauszug im Anhang)
1
#define SPI_DI 6 //Input Port Pin an dem Data Output der MMC/SD-Karte angeschlossen ist
Auszug aus der main:
1
intmain(void)
2
{
3
4
usart_init0(BAUDRATE);// setup the UART0
5
usart_init1(BAUDRATE);// setup the UART1
6
7
8
//Initialisierung der MMC/SD-Karte
9
usart_writePC("System Ready!\r\n");
10
while(mmc_init()!=0)//ist der Rückgabewert ungleich NULL ist ein Fehler aufgetreten
11
{
12
usart_writePC("** Keine MMC/SD Karte gefunden!! **\n");