Hallo!
Das Projekt an dem ich im Augenblick arbeite (SD karte + farb grafik
display) gibt mir Kopfschmerzen.
Das Problem:
Solange ich den Programmer am Xplained Board angeschlossen habe ,
funktioniert die initialisierung der SD karte , sobald ich den
programmer nichtmehr dran habe bleibt sie im Init stecken oder kommt bis
zum ersten lesen von Daten und bleibt dann stecken.
Ich verwende Ulrich Radigs Code (V 3) , ich habe ihn lediglich auf die
Xmega schreibweisen angepasst.
Karte ist eine Kingston 2GB miniSD (mit Adapter) , Sockel ist ein
alter SD slot aus einem Kartenleser.
Kann es evtl sein das ich bei den clock settings was falsch gemacht
habe?
Ich habe auch einen externen Oszillator auf dem Xplained...aber ich
weiss nicht wie man den genau nutzt. (oder was für ein wert der hat...
Die Dokumentation von dem xplained XmegaA1 sind ein wenig
unverständlich..)
1 |
|
2 | void clock_init() {
|
3 | /*Oscillator auf 32Mhz einstellen PIN1 = OSC_RC32MEN wird gesetzt */
|
4 | OSC.CTRL |= 0x02;
|
5 | /*Wenn Oscillator stabil wird das Flag RC32MRDY
|
6 | * gesetzt und 32Mhz können benutzt werden*/
|
7 | while(!(OSC.STATUS & OSC_RC32MRDY_bm));
|
8 | /*I/O Protection*/
|
9 | CCP = 0xD8;
|
10 | /*Clock auf 32Mhz einstellen*/
|
11 | CLK.CTRL = 0x01;
|
12 | }
|
zusätzlich nutze ich diese initialen SPI settings für die karte in der
mmc.c:
1 | SPIF.CTRL = SPI_MODE_3_gc | SPI_PRESCALER_DIV64_gc | (0<< SPI_CLK2X_bp)
|
2 | | (1<< SPI_ENABLE_bp) | (1<< SPI_MASTER_bp); // 500khz?
|
Die settings setze ich nach der initialisierung auf 16mhz (ist das zu
hoch?)