DMA/SDIO STM32F103

Gast #3581188
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!

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren