Forum: Mikrocontroller und Digitale Elektronik DMA/SDIO STM32F103


von Marc (Gast)


Lesenswert?

Hallo!

Ich benutze einen STM32F103 um auf eine SD Karte zu schreiben. Das Ganze 
funktioniert und die Daten sind konsistent. Nun habe ich jedoch das 
Problem, dass wenn ich sehr viele Daten übertragen will (z.B. 
10'000x16x512 Bytes --> sequentiell 10'000 DMA Requests) der DMA keine 
Daten mehr überträgt und dadurch auch kein TC Flag mehr setzt. Reduziere 
ich die SDIO Frequenz von 24MHz auf 8MHz tritt das Problem nicht mehr 
auf. Kann es sein, dass das DMA Modul nicht darauf ausgelegt ist, 
sequentiell viele Anfragen abzuarbeiten? Oder benutze ich das Modul 
falsch?

Hier ist der DMA Request der bei jedem Write Befehl ausgeführt wird:

  DMA_InitTypeDef DMA_InitStructure;

  DMA_ClearFlag(DMA2_FLAG_TC4 | DMA2_FLAG_TE4 | DMA2_FLAG_HT4 | 
DMA2_FLAG_GL4);

  /* DMA2 Channel4 disable */
  DMA_Cmd(DMA2_Channel4, DISABLE);

  /* DMA2 Channel4 Config */
  DMA_InitStructure.DMA_PeripheralBaseAddr = 
(uint32_t)SDIO_FIFO_Address;
  DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)BufferDST;
  DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;
  DMA_InitStructure.DMA_BufferSize = BufferSize / 4;
  DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
  DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
  DMA_InitStructure.DMA_PeripheralDataSize = 
DMA_PeripheralDataSize_Word;
  DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Word;
  DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;
  DMA_InitStructure.DMA_Priority = DMA_Priority_High;
  DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;
  DMA_Init(DMA2_Channel4, &DMA_InitStructure);

  /* DMA2 Channel4 enable */
  DMA_Cmd(DMA2_Channel4, ENABLE);

Hat jemand eine Idee?

Danke!

von Marc (Gast)


Lesenswert?

Hat sich geklärt, es lag nicht am DMA sondern an der SDIO Konfiguration.
--> falsche Delays verwendet

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.