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!
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.