HSMCI mit Sam3s auf Olimex P256

OP #3227938
Lesenswert?
• ▲
▼
Hallo,

ich versuche seit einer Weile eine SD-Karte über das Interface vom SAM3 
anzusteuern, allerdings erfolglos, denn das Interface gibt keinen Mucks 
von sich und so langsam hab ich auch keine Idee mehr, was ich falsch 
mache. Ich habe mir einen kleinen Adapter gebaut um die Pins PA26 bis 
PA31 mit einem SD-Slot zu verbinden, da der auf der Platine vorhandene 
nur mit dem SPI verdrahtet ist. Ich geh davon aus, dass ich die paar 
Pins richtig verbunde habe und selbst wenn nicht, müsste ja zumindest 
ein Clock zu sehen sein.

Initialisiert wird das HSMCI mit der Funktion InitSDCard. In der Main 
wird dann die while-Schleife aufgerufen, die eigentlich dafür sorgen 
sollte, dass die Karte 74 Takte Clock bekommt.

Das Beispiel hier macht das gleiche.
http://www.at91.com/forum/viewtopic.php/f,24/t,20831/


1
void InitSDCard(void){
2
  
3
  PIOA->PIO_PUDR = HSMCIpins;    // Pullups aktivieren
4
  PIOA->PIO_PDR = HSMCIpins;    // Pins im PIO deaktivieren
5
  PIOA->PIO_ABCDSR[1] &=  ~HSMCIpins;  // Pins Peripherie C zuweisen
6
  PIOA->PIO_ABCDSR[2] |=  HSMCIpins;  // Pins Peripherie C zuweisen
7

8
  PMC->PMC_PCER0 = PMC_PCER0_PID18;  // Clock zuweisen
9
  
10
  HSMCI->HSMCI_CR = HSMCI_CR_SWRST;      // Software Reset
11
  
12
  HSMCI->HSMCI_CR  =  HSMCI_CR_MCIEN;      // Interface aktivieren
13
  
14
  HSMCI->HSMCI_MR =  HSMCI_MR_CLKDIV(79)|  // HSMCI-Clock = MCK/(2*(CLKDIV+1)) = 400kHz
15
            HSMCI_MR_PWSDIV(10);  // HSMCI-PowerSave-Clock = MCK/(2^CLKDIV+1) = 62,5kHz
16
            //HSMCI_MR_RDPROOF|    // Read Proof aktiviert, Clock kann waehrend des Lesens deaktiviert werden, wenn der Fifo voll ist
17
            //HSMCI_MR_WRPROOF|    // Write Proof aktiviert, Clock kann waehrend des Schreibens deaktiviert werden, wenn der Fifo voll ist
18
            //HSMCI_MR_FBYTE|    // Force Byte Transfer, Blocklänge muss nicht Modulo 4 haben
19
            //HSMCI_MR_PDCMODE;    // PDC-oriented Mode
20
            
21
  HSMCI->HSMCI_BLKR = HSMCI_BLKR_BCNT(512);  // Blocklänge, kann auch über Register HSMCI_MR konfiguriert werden
22
            
23
  HSMCI->HSMCI_CFG =  HSMCI_CFG_FIFOMODE|    // Fifo Mode
24
            HSMCI_CFG_FERRCTRL;    // Error Flag bei Over/Underrun
25
  
26
  HSMCI->HSMCI_SDCR = HSMCI_SDCR_SDCBUS_1|    // 1 Bis Bus
27
            HSMCI_SDCR_SDCSEL_SLOTA;  // Slot A
28
            
29
  HSMCI->HSMCI_DTOR =  HSMCI_DTOR_DTOMUL_1048576|  // Data Timeout Multiplikator
30
            HSMCI_DTOR_DTOCYC(2);    // Data Timeout Anzahl Zyklen
31
            
32
  HSMCI->HSMCI_CSTOR =HSMCI_CSTOR_CSTOMUL_1048576|// Data Timeout Multiplikator
33
            HSMCI_CSTOR_CSTOCYC(2);    // Data Timeout Anzahl Zyklen
34

35
}
36

37

38
while (1){
39
  
40
  HSMCI->HSMCI_ARGR = 0;        // Argument egal
41
  HSMCI->HSMCI_CMDR =  HSMCI_CMDR_SPCMD_INIT;  // Init Command, 74 Takte Clock
42
  while (!(HSMCI->HSMCI_SR & HSMCI_SR_CMDRDY));  // Warten bis fertig
43
    
44
}

Vielleicht sieht ja jemand was ich verkehrt mache. Schon mal danke für 
eure Mithilfe.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.