Hallo, ich möchte eine SD-Card an den MSP430 anbinden.
Kurz zur Hard & Software:
MSP430F1612
SanDisk 512MB SD-Card
IAR 3.20A
Das ganze soll in C geschrieben werden...
Ich habe mich schon etwas in die Sache eingelesen, aber irgendwie gibt
es dabei ein paar Widersprüche.
Vor ein paar Wochen hat der User "reflection" ja schonmal angemerkt,
dass wohl die Apnote (SLAA281A) von TI bezüglich SOMI und MISO falsch
sei.
Das sehe ich auch so.
Ich habe meine SD-Card so angeschlossen, wie es auf dem
Development-Board der Firma olimex realiseiert ist.
Hier mal ein Link zum Schematic:
http://www.olimex.com/dev/images/MSP430-4619LCD-sch.gif
(auf der rechten Seite ist die Anbindung zu sehen...)
Hier meine Anbindung:
SD-Card MSP430F1612
-----------------------------------------
Pin 1 Dat3/CS/CD P5.0/ STE1
Pin 2 Data IN P5.1/ SIMO1
Pin 3 GND
Pin 4 Vdd
Pin 5 CLK P5.3/ UCLK1
Pin 6 GND
Pin 7 Data OUT P5.2/ SOMI1
Pin 8 per PullUp auf 3.3V
Pin 9 per PullUp auf 3.3V
Die Pins P5.4 bis P5.6 des MSP benutze ich, um abzufragen, ob eine Karte
drin ist, oder nicht, und um zu testen, ob der Schreibschutz aktiv ist.
Dies geschieht rein mechanisch, da an meinem SD-Card-Adapter extra-Pins
dafür vorgesehen sind...
Jetzt gibt es noch ein Problem mit dem TI Apnote. Da haben sie ja den CS
(Pin 1 der SD-Card) auf P5.4 des MSP gelegt...was soll das denn?
Beim oben genannten Development-Board ist der Chip-Select auf P5.0 des
MSP gelegt. So hab ich es ja auch.
Das komische ist aber auch das einige hier im Forum schreiben, sie
hätten den TI-Code zum Laufen gebracht. Aber welche Änderungen muss ich
denn jetzt an dem Code durchführen, wenn überhaupt?
Geht meine Beschaltung überhaupt? Ich meine, wenn Olimex diese Boards
verkauft, wird es schon richtig sein, oder?
Noch eine Sache zu Datei-System:
Ich habe Daten vom MSP, die aber nur zu bestimmten Zeiten auf SD-Card
geschrieben werden sollen. Die Start und Endzeit gibt der Benutzer vor.
Diese Daten hätte ich am liebsten in separaten Textfiles auf der
SD-Card.
Ich möchte die Daten nur per PC lesen können. Aber ohne irgendwelche
Hex-Editoren oder ähnliches...
--> Also muss wohl nen FAT drauf. Aber welches? Reicht ein Fat16, oder
müsste es da ein FAT 32 sein. Ich würde gerne die Text-Files auf der
SD-Card nach der Startzeit der Protokollierung benennen, also z.b.
0709171030 für 17.09.07 10:30.
Jetzt hat der Dateiname allerding mehr als 8 Zeichen...ginge das
trotzdem mit FAT 16?
Wo finde ich auf die Schnelle Infos zum Implementieren von FAT auf dem
MSP430?
Sind viele Fragen, ich weiss, aber ich hoffe, Ihr könnt mir
weiterhelfen...
Vielen Dank!!
Also mit FAT habe ich es bis Dato nicht zum laufen gebracht. DAs TI ding
ging, aber nur nach diversen Anpassungen. Was genau weiss ich jetzt auch
nicht mehr, aber vor allem in den Headerfiles. Dort wird so viel ich
noch weiss der CS ect. eingestellt.
Gruss reflection
Hallo...und Deine Files hast Du nicht mehr??? Ahhhhh, schade!!!
Klar kann man in den Header-Files ne Menge einstellen, aber ich will mir
ersparen, alles *per Hand durchzugehen...
Wie hast Du das dann ohne nen FAT gemacht?
Danke
Ich schreibe direkt auf die Karte, muss es dann halt mittels eines HEX
Editors anschauen, aber dafür ist es schneller :o)
Wegen Files muss ich nochmal schauen, habe das Projekt auf Eis gelegt.
Gruss
Hallo Mathias,
schön, ich mache gerade was ähnliches, siehe auch meinen Beitrag von
heute. Die Beschaltung und Software läuft schon teilweise. Ich kann auf
die Karte schreiben, aber nicht lesen. Ich bin jetzt im Büro, kann Dir
aber heute abend Links geben. Dort findest Du Informationen zu FAT16,
langen Dateinamen etc.
Zu Deiner Frage mit der TI-Doku: Ja, ich habe SOMI und SIMO vertauscht,
weil der MSP als Master läuft. Das geht auch aus der Doku zu SPI von TI
hervor, also nicht aus dem Dok slaa281a.pdf.
Gruß
Uli
Hallo Uli, wäre super mit den Links...
irgendwie muss die Sache doch zum laufen zu kriegen sein...
Wohin hast du den Pin1 von der SD-Card gelegt? Auf Px.0 (wie ich) oder
Px.4 (wie im appnote)? Das ist so eine Sache, die mir irgendwie nicht
ganz einleuchtet...
@Uli: hast du ein schematic da?
@ reflection: wenn Du die files noch finden würdest, wäre super.
Aber dann schrieb auch mal bitte, WIE Du die SD-Card an den MSP
drangebastelt hast...mit nem schematic als pdf oder so...
Wenn gewünscht, kann ich mein schematic auch mal dranhängen...
Gruß
Mathias
Hallo Mathias,
ich habe !CS an P5.4, wie in der Appnote. Scheint auch zu funktionieren.
Ich kann ja bloss nichts von der Karte lesen. Also muß die restliche
Belegung wohl stimmen, sonst könnte ich nichts schreiben. Oder? Ich bin
mir nicht 100% sicher...
Guck' mal unter
http://home.teleport.com/~brainy/fat16.htm und
http://home.teleport.com/~brainy/lfn.htm
Auch lesenswert ist der FAT16-Artikel auf wikipedia.
Ich habe aber auch vermutlich geringere Ansprüche an das FAT als Du. Ich
will lediglich aus dem Root-Verzeichnis lesen und auch nur dort
schreiben. Ich glaube, dass das die Sache sehr vereinfacht.
Ich kriege nix gelesen. Ist doch zum K****n!
Im Anhang ist ein Ausschnitt von mir. Da ist kein µC zu sehen. Ich habe
stattdessen Steckerleisten eingezeichnet. Die sind aber Pinkompatibel...
Gruß
Uli
Hallo, hast es ja wirklich genauso gemacht, wie im appnote...
Danke für die Links...da hab ich ja was zu Lesen heute Abend ;-)
Ich habe mal meines angehängt.
Ich habe es hier her:
http://www.cs.ucr.edu/~amitra/sdcard/Additional/sdcard_appnote_foust.pdf
(von Seite 3)
Aber ich habe gerade festgestellt, dass die mit !SS den Px.4 meinen und
nicht Px.0. In deren Software ist es P3.4.
ICH habe den aber an P5.0 dran...weil ich es wie geschrieben aus der
ganz oben genannten Quelle habe.
hxxp://www.olimex.com/dev/images/MSP430-4619LCD-sch.gif
Also werde ich wohl nen neuen Adapter basteln, der dann auch mit der
Appnote übereinstimmt, sonst müsste ich ja soviele Sachen dran ändern...
Könnte es bei deinem Lese-Problem an den fehlenden PullUP-Widerständen
liegen? Kannst ja mal testen...
Wie heißt denn die Appnote für das SPI? Habs auf die schnelle nicht
gefunden.
Mathias
Ich meinte mit SPI-Doku keine spezielle Appnote, sondern einfach das
Kapitel "14.2 USART Operation: SPI Mode" aus dem 'normalen' MSP430x1xx
User Guide.
Die Pullup-Widerstände. Ja, das ist richtig. Die sind aber doch
eigentlich nur wichtig, wenn keine SD-Karte steckt, damit die Eingänge
vom MSP definiert sind. Jedenfalls denke ich das. Deswegen habe ich sie
meinem ersten Entwurf einfach mal weggelassen (ist eh nur ein
Experimentieraufbau)... Meinst Du trotzdem, dass es daran liegen könnte?
Das werde ich dann heute noch mal ausprobieren.
So, habe mal angefangen mich durch den Code von der Appnote slaa281a zu
hangeln.
Schon tauchen die ersten Merkwürdigkeiten auf.
Ich habe mal die komplette *.zip angehängt.
mmc.c :
Die Funktion initMMC
1
charinitMMC(void)
2
{
3
//raise SS and MOSI for 80 clock cycles
4
//SendByte(0xff) 10 times with SS high
5
//RAISE SS
6
inti;
7
// Port 5 Function Dir On/Off
8
// 5.0-mmcCD Out 0 - card inserted
9
// 5.1-Dout Out 0 - off 1 - On -> init in SPI_Init
10
// 5.2-Din Inp 0 - off 1 - On -> init in SPI_Init
11
// 5.3-Clk Out - -> init in SPI_Init
12
// 5.4-mmcCS Out 0 - Active 1 - none Active
13
P5SEL|=0x0E;
14
P5SEL&=~0x11;
15
P5OUT|=0x10;
16
P5DIR|=0x1A;
17
18
initSPI();
19
//initialization sequence on PowerUp
20
CS_HIGH();
21
for(i=0;i<=9;i++)
22
spiSendByte(0xff);
23
24
return(mmc_GoIdle());
25
}
1) Muss es nicht im Kommetar heissen, dass P5.0 ein INPUT ist, denn in
der Funktion mmc_ping (mmc.c) wird das erste Bit des Ports 5
abgefragt...also INPUT???
Ausserdem Wird ja per P5DIR |= 0x1A; bit0 als Eingang definiert.
2) P5SEL |= 0x0E; (0000 1110) bedeutet, dass für die Pins P5.1 bis P5.3
die Zweitfunktion gelten soll, richtig???
3) Was soll dann P5SEL &= ~0x11; ?? das macht doch nochmal genau das
gleiche, oder?
Erst steht in P5SEL 0000 0000 drin.
Dann P5SEL |= 0x0E; damit steht jetzt 0000 1110 drin
Dann P5SEL &= ~0x11; also wird 0000 1110 mit 1110 1110 "geUNDet", was
wieder 0000 1110 bedeutet...???
4) Die Funktion mmc_ping():
1
charmmc_ping(void)
2
{
3
if(!(P5IN&0x01))
4
return(MMC_SUCCESS);
5
else
6
return(MMC_INIT_ERROR);
7
}
Kann mir mal bitte einer erklären, was if (!(P5IN & 0x01)) bedeutet.
Diese Kurzschreibweisen in den TI_codes sind für Anfänger echt ein
Graus!
Meine Erklärung:
Wenn die Abfrage des Port5 Pin0 false ist, dann gib MMC_SUCCESS zurück.
Man könnte es auch so schreiben if ((P5IN & 0x01) == 0)... , oder?
danke
mathias
>Erst steht in P5SEL 0000 0000 drin.>Dann P5SEL |= 0x0E; damit steht jetzt 0000 1110 drin>Dann P5SEL &= ~0x11; also wird 0000 1110 mit 1110 1110 "geUNDet", was>wieder 0000 1110 bedeutet...???
Falls P5SEL nun aber 1111 1111 war ?
Was ist dann?
Dann macht P5SEL &= ~0x11 sehr wohl Sinn :-)
if (!(P5IN & 0x01))
Pin 5 wird mit 0x01 verundet. Raus kommt == 0 oder != 0. Der folgende
Code wird also nur ausgeführt, wenn das erste Bit von PIN5 NICHT gesetzt
ist, da das ! ja verneint.
Gruß
Uli
Und noch was: Wenn Du den Code von TI am laufen hast, pass genau auf,
wann char und unsigned char verglichen wird. Das ist knifflig. Bei mir
hat das mit dem Lesen genau aus diesem Grund nicht funktioniert, bis ich
die Compiler-Option "plain_char=unsigned" gesetzt habe...
OK, danke...für welche Pins wird denn nun die Zweitfunktion verwendet?
P5SEL ist doch standartmäßig 0000 0000, also Erstfunktion, oder?
Es wird auch vorher im Code nicht verändert.
Was wieder 3) auf den Plan ruft...
Wenn es wirklich 1111 1111 WÄRE, dann würde nach der ganzen Aktion ja in
P5SEL 1110 1110 drin stehen.
Also alle bis auf P5.0 und P5.4 wäre auf Zweitfunktion gestellt.
Was ja ziemlich dämlich ist, weil P5.5 bis P5.7 im Code NIEMALS
vorkommen.
Gruß
mathias
OK, ich habe jetzt nicht explizit auf die P5.x geachtet.
Ich meinte eigentlich, dass man generell als Programmierer nie davon
ausgehen sollte, dass eine Variable/Register einen bekannten Wert (in
dem Fall 0) hat, denn eine Funktion, die man schreibt, sollte ja
universell einsetzbar sein und damit auf alle Fälle vorbereitet sein.
Und dann muss man eben sowohl Bits setzen (|=) als auch löschen (&= ~)
können!
Im Detail:
Da es sich hier anscheinend um SPI dreht und ich dem Code-Schnipsel da
oben entlocke, dass es 3-Wire SPI ist, dann hast Du Recht, das P5.1-P5.3
die "Zweitfunktion" haben sollen. Demzufolge wäre folgender Code nicht
schlecht:
P5SEL |= 0x0E; // P5.1 - P5.3 Zweitfkt. setzen
P5SEL &= ~0xF1; // Alle anderen P5.x Zweitfkt. löschen
Nö, würde ich nicht sagen. 0x11 bezieht sich nämlich nicht auf das
gesamte restliche Byte 0xF1 schon!
0x11 = 10001
0xF1 = 11110001
0x11 läßt also alles was nicht verstellt werden soll in Ruhe...
>0x11 = 10001>0xF1 = 11110001>0x11 läßt also alles was nicht verstellt werden soll in Ruhe
Mathias sagt:
>Was ja ziemlich dämlich ist, weil P5.5 bis P5.7 im Code NIEMALS>vorkommen.
Deshalb habe ich P5.5 - P5.7 auch als I/O definiert.
Er hatte ja die 0x11 nicht verstanden!
@Stefan Achso, dann sorry. Das war sowieso etwas oberlehrerhaft bzw.
einfach Klugscheißerei von mir... ;-)
@Mathias Da wir jetzt ja noch was ähnliches vorhaben, SD zum Laufen
bringen und dann FAT16, wäre ich sehr an einem Erfahrungsaustausch
interessiert. Der Krempel ist ja für uns beide Neuland. Was meinst Du?
Ich komme wahrscheinlich erst wieder ab Freitag dazu, aber wenn ich
irgendwas zum Laufen bringe, werde ich Dich das einfach mal wissen
lassen. Umgekehrt wäre ich Dir auch dankbar für Neuigkeiten... :-)
Hallo, ich habe gestern mal meine kleine Platine verändert,
damit die Belegung jetzt wie im TI_Sample ist.
Hier meine jetzige Anbindung:
SD-Card MSP430F1612
-----------------------------------------
Pin 1 Dat3/CS/CD P5.4/ MCLK
Pin 2 Data IN P5.1/ SIMO1
Pin 3 GND
Pin 4 Vdd
Pin 5 CLK P5.3/ UCLK1
Pin 6 CD P5.1/ STE1
Pin 7 Data OUT P5.2/ SOMI1
Pin 8 per PullUp auf 3.3V
Pin 9 per PullUp auf 3.3V
Jetzt habe ich mal das Programm von T druchlaufen lassen.
Siehe Beitrag vom Datum: 17.09.2007 21:56 von mir...
Die Initialisierung scheint zu funktionieren, denn:
Er gibt mir im Debugger eine CardSize von 507379712 aus. Nun gut...
Die SD-Card (Sandisk 512MB) ist laut Windows-Datei-Explorer mit FAT16
formatiert
und hat 507.052.032 Bytes freien Speicher. Das entspricht rund 483MB.
Der Hex-Editor WinHex gibt mir ebenfalls die 507.052.032 aus.
Allerdings soll die gesamte Kapazität bei 507.201.024 Bytes liegen.
Das weicht ein wenig von der vom Programm ausgegebenen Größe ab, soll
mich aber jetzt nicht weiter stören.
1
unsignedcharbuffer[512];
2
3
intmain(void)
4
{
5
WDTCTL=WDTPW+WDTHOLD;
6
7
initMMC();
8
9
while((mmc_ping()!=MMC_SUCCESS));// Wait till card is inserted
10
11
// Read the Card Size from the CSD Register
12
cardSize=MMC_ReadCardSize();
13
14
for(i=0;i<=512;i++)buffer[i]=i;
15
mmcWriteSector(1,buffer);// write a 512 Byte big block beginning at the (aligned) adress
16
17
for(i=0;i<=512;i++)buffer[i]=i+64;
18
mmcWriteSector(2,buffer);// write a 512 Byte big block beginning at the (aligned) adress
19
20
mmcReadSector(1,buffer);// read a size Byte big block beginning at the address.
21
22
mmcReadSector(2,buffer);// read a size Byte big block beginning at the address.
23
24
mmc_GoIdle();// set MMC in Idle mode
25
26
while(1);
27
}
Er schreibt ein Array aus 512bytes. Dieses ist mit 0, 1, 2, ..., 511
belegt.
Dieses Array wird jetzt in Sektor 1 der SD-Card geschrieben.
Danach überschreibt er das Array (buffer[i]) mit neuen Werten 64, 65,
..., 566.
Dieses Array wird jetzt in Sektor 2 der SD-Card geschrieben.
Danach liest er die Sachen wieder aus, wobei ich noch nicht weiss, wie
ich überprüfen kann, ob er es tatsächlich macht...
Was ich jetzt nicht begreife, ist:
Müsste ich nicht im WinHex sehen, dass im Sektor 1 und im Sektor 2 Daten
drin stehen?
Der erste Sektor beginnt wohl bei 512 und endet bei 1023.
Im Bild sieht man, dass bei
512 F8, bei 513 FF, bei 514 FF und bei 515 FF drin steht, danach wieder
Nullen.
Das sollen doch die einzelnen Bytes sien, oder? aber warum ZWEI stellen?
Nen Byte sind doch ACHT bit.
Wo oder wie kann ich mir die "Daten" anschauen, die auf die SD_Card
geschrieben wurden.
Sorry, für die evtl. blöden Fragen, aber ich kenn mich mit der MAterie
noch nicht ganz so gut aus...habt Verständnis ;-)
mathias
Vielleicht solltest du dir folgende Zeile nochmal gaaaanz genau
angucken:
1
for(i=0;i<=512;i++)buffer[i]=i;
Das macht mir hoher Wahrscheinlichkeit nicht das, was du möchtest.
Ebenso das 2. Füllen des Buffers.
Hast du den Buffer nach dem Füllen mal im Debugger angeschaut?
?? Also der Code kommt ja nicht von mir, sondern von TI.
Ich hab die for() - Schleife mal im debugger "beobachtet". Und da
schreibt er in buffer[0] ne 0, in buffer[1] ne 1 usw.
und dann in der zweiten for() halt in buffer[0] ne 64 usw....
>>Hast du den Buffer nach dem Füllen mal im Debugger angeschaut?
Wie meinst Du das?
Mathias
1.) VORSICHT!
>for (i = 0; i <= 512; i++) buffer[i] = i;
Dein Buffer ist nur 512Bytes groß, Du schreibst aber 513Bytes rein!
Könnte Dir eventuell andere Variablen in Prog zerschießen!
2.)
>Das sollen doch die einzelnen Bytes sien, oder? aber warum ZWEI stellen?>Nen Byte sind doch ACHT bit.
mit 8Bit kanns'te Werte von 0 bis 255 darstellen.
Die ZWEI Stellen sind im hex-Format und gehen von 0x00 bis 0xFF,
das ist aber der gleiche Wertebereich (0-255)
OK, das mit den 513bytes leuchtet ein, aber wie gesagt, die Sache ist
nicht auf meinem Mist gewachsen...
Das mit den zwei Stellen habe ich eben auch herraus gefunden... ;-) auch
logisch!
Aber wo sehe ich denn jetzt die Daten im Hex-Editor?
Ich habe mal auf die Karte eine Test.txt gemacht.
Im HexEditor hat er dann bei der logischen SektorNr. 243 (physical
SectorNr 480) nen Eintrag mit dem Dateinamen...
Und ab logischer SektorNr. 275 (pysical 512) steht der in der datei
enthaltenen text drin...also DAS kann ich mir schonmal anschauen, aber
wo sind die Daten vom MSP???
mathias
>OK, das mit den 513bytes leuchtet ein, aber wie gesagt, die Sache ist>nicht auf meinem Mist gewachsen...
Nee, aber korrigieren musst Du es trotzdem ;-)
>wo sind die Daten vom MSP???
Wie gesagt, wäre es möglich, dass obiger Fehler eine andere Variable
zerschießt und der MSP dadurch erst gar nix auf die SD schreibt...
... zumindest eine mögliche Ursache...
Hallo, hmmm, na mal schauen.
Also die Funktion mmcWriteSector ist folgendermaßen definiert.
#define mmcWriteSector(sector, pBuffer) mmcWriteBlock(sector*512ul, 512,
pBuffer)
Was bedeutet denn eigentlich sector*512u1?
Das *512u1 irritiert mich etwas? Was ist denn 512u1?
Ich meine, wenn sector 1 ist, wäre das ja die Stelle, an der der
reingeschriebene Buffer beginnt...
mathias
Nee, das ist für den Präprozessor, damit der weiß, dass die Variable
eine Länge von unsigned long haben kann, und entsprechend Speicherplatz
reserviert.
Irgendwie ziemlich unclever, solch lange Variablen als
Übergabeparameter....das wird alles durch die Arbeitsregister
geschleift....hmm...naja, der Code ist ja nicht direkt von TI, den haben
die dann mal irgendwann reingenommen, den gabs vorher schon im Netz von
Privat....
@Mathias:
Da Du an Deiner Diplomarbeit arbeitest, solltest Du vielleicht nicht
'einfach' den TI-Code übernehmen, sondern ihn gründlich hinterfragen.
Ich meine, wir haben jetzt schon mind. 2 Fehler darin entdeckt
(Pinzuordnung, Buffergrenzen überschritten)... welche Fehler mögen da
noch drin stecken? Wäre vielleicht nicht schlecht, wenn Du den Zugriff
auf eine SD-Card verstehen würdest und darauf aufbauend Deine eigenen
Routinen schreibst. Anregungen kannst Du Dir ja von TI holen, aber Du
musst damit rechnen, dass die auch nicht alles richtig und perfekt
machen!
Hier zwei Links zu sehr detaillierten Product Manuals für MMC/SD von
SanDisk:
http://wolverine.caltech.edu/referenc/SDMMCv52.pdfhttp://wolverine.caltech.edu/referenc/SDSDv17.pdf
Weitere Fragen kommen dann von alleine :-)
Hallo Stefan,
da hast Du sicher Recht, ABER die SD_Card_Geschichte macht ungefähr nur
1% der ganzen Arbeit aus.
Ich hätte gerne die Zeit, ALLES bis ins letzte Detail zu verstehen, aber
irgendwann MUSS ich ja auch abgeben...
Ich möchte auch nicht einfach nur C&P anwenden; lernen möchte ich dabei
schonwas...
mathias
Hallo, also die Schreibgeschichte läßt mich irgendwie nicht los...
es geht irgendwie nicht...
Ich habe mal einen Screenshot angehängt, bei dem mir etwas komisch
vorkommt...
Zu sehen ist der logisch 0te Sektor meiner SD-Card. Warum die
Nummerierung der physikalischen SektorNr. bei 237 weiß ich nicht. Weiß
einer warum?
Das ist also sicher der MBR und die FAT-Einträge ganz am Anfang der
Karte.
Was ich jetzt komisch finde, ist dass in der ASCII-Ansicht rechts steht:
"...Datentr„ger entfernenÿ Medienfehlerÿ Neustart: Taste drcken"
Was ist denn das für ein "Medienfehler".
Könnte das damit zu tun haben, dass mein MSP zwar was auf die Karte
schreibt, und auch liest, denn die Variablen für erfolgreiches Schreiben
und Lesen werden ja gesetzt, aber ich trotzdem die Daten nicht sehen
kann?
Kann mir das einer erklären?
Ich verwende den Code von TI. (wurde etwas weiter oben schon gepostet)
Habe bis auf den hardwareseitigen Tausch von SOMI und SIMO, sowie die
Änderung der Initialisierung:
statt:
1
for(i=0;i<=512;i++)buffer[i]=i;
habe ich
1
for(i=0;i<512;i++)buffer[i]=i;
gemacht, weil der Buffer ja nur 512 und nicht 513 Elemente aufnehmen
kann.
Ich habe auch mal einen zweiten Buffer erstellt.
Es wird dann der Buffer von TI von der Karte gelesen und in meinen
eigenen geschrieben. Macht er alles, so wie er soll...aber ich finde
halt die Daten auf der Karte nicht...
Hat einer eine Idee?
danke
mathias
*edit: komisch finde ich ja auch, dass der "used space" bei null ist.
Wird also wirklich nichts vom MSP draufgeschrieben?
>Zu sehen ist der logisch 0te Sektor meiner SD-Card. Warum die>Nummerierung der physikalischen SektorNr. bei 237 weiß ich nicht. Weiß>einer warum?
Ja, ich ;)
>Das ist also sicher der MBR und die FAT-Einträge ganz am Anfang der>Karte.
Das ist nicht der MBR, das ist der Bootsektor der ersten
Partition. Und der liegt bei deiner Karte im Sektor 237.
Der MBR liegt im Sektor 0. Im MBR steht die Adresse deines
Bootsektors im Eintrag für die erste Partition.
Hallo,
Ich habe das Thema mit Interesse überflogen und wollte mal wissen, ob es
nun jemand geschafft hat eine SD-Karte zu beschreiben und die Daten
hinterher korrekt am Rechner auszulesen ?
Teilweise scheint die Sache recht tricky zu sein und ich stehe gerade
vor der Entscheidung ein solches Projekt in Angriff zu nehmen.
>nun jemand geschafft hat eine SD-Karte zu beschreiben und die Daten>hinterher korrekt am Rechner auszulesen ?
Ja, das funktioniert, wobei ich den hier im Forum schon öfter
beschriebenen Weg gegangen bin.
Die SD karte zunächst mit dem PC formatieren und irgendeine Datei auf
die Karte kopieren, deren Größe der später gewünschten entspricht. Jetzt
mit z.B. Winhex den 1. Sektor der Datei suchen und unter Verwendung der
SLAA281.zip diesen Sektor und die folgenden beschreiben.
#define mmcWriteSector(sector, pBuffer) mmcWriteBlock(sector*512, 512,
pBuffer)
mmcWriteSector(sector,mmc_buffer); // sector = Nr. des 1. Sektors
Um schneller ans Ziel zu kommen, habe ich zunächst alle Prüffunktionen
usw. weggelassen und nur die obige Schreibfunktion verwendet.
MfG
Wolfgang
>Also hast du kein FAT16 benutzt ?
ICH nicht.
Um aber die Karte vom Computer lesen zu können, wurde die Karte ja
formatiert.
Dadurch befindet sich also eine FAT schon auf der Karte.
Für das Schreiben mit dem MSP430 ist dies aber nicht zwingend
erforderlich.
MfG
Wolfgang
Ist das vielleicht auch der Grund warum ich kein Datenblatt für eine
Micro-SD-Karte finde ? Kann mir da ggf. jemand aushelfen ?
Bei Scandisk bin ich nicht fündig geworden.
Ich schreibs einfach nochmal hier rein:
Mir ist gerade aufgefallen, dass die Micro-SD-Karten einen Anschluss
weniger haben als die normalen SD-Karten. Leider kann ich immer noch
kein Datenblatt für eine Micro-SD-Karte finden.
Fällt da einfach eine der beiden Vss oder was anderes weg ?
Guten Morgen Zusammen,
Ich habe ein Problem mit dem Quelltext von TI. Nachdem ich die Fehler
(Buffergröße, zu nutzender Sektor etc) beseitigt habe. Wird mir beim
Debuggen ständig ein "Linking Error" ausgeworfen.
Gibt es vielleicht jemanden, der anfangs ebenfalls ein solches Problem
hatte ?
Gruß
Seb