Hi Erik,
falsche Statusabfrage?
Die LIB von STM kenne ich nicht, ich arbeite mit mikroPascal, auf einem STM32F407.
Welchen F1xx hast Du?
VG
Peter
Hallo,
ich merke grade, dass ich in diesem Unterforum ganzschön aktiv bin, Fragen zu stellen... (ich hoffe die Lösungen können auch anderen helfen!)
Hier mein nächstes Problem:
Ich versuche am Pollin Eval-Board das SDIO-Interface für das Arbeiten mit einer SD-Karte aufzusetzen. (FATFS bekomme ich bereits zum Laufen)
Da ich einen Datenlogger erstellen möchte brauche ich die Geschwindigkeit des SDIO-Interfaces. Hierzu habe ich mir eine die entsprechende Bibliothek von STMicroelectronics Version V2.0.3 heruntergeladen.
Mit reduzierter Geschwindigkeit (SDIO_TRANSFER_CLK_DIV = 0xB2) läuft das ganze via SD_POLLING_MODE.
Wenn ich die Geschwindigkeit erhöhe scheitert das Lesen mit einem entsprechenden Fehler.
Natürlich dachte ich bezüglich der Geschwindigkeit sofort an SD_DMA_MODE. Wenn ich dann aber einen Schreibvorgang initialisiere ( SD_WriteBlock ) friert mir diese Funktion ein.
Woran kann das liegen? Der Lesevorgang geht ohne Probleme von statten.
Gruß Erik
Meine Projekte auf Youtube
Hi Erik,
falsche Statusabfrage?
Die LIB von STM kenne ich nicht, ich arbeite mit mikroPascal, auf einem STM32F407.
Welchen F1xx hast Du?
VG
Peter
Hallo,
ich habe einen STM32F103VET6. Ich habe jetzt festgestellt, dass ich die Interrupts nicht initialisert habe. Dafür muss ich die Biblieothek erstmal für den 32f1xx anpassen - sie ist für einen 32f4xx geschrieben...
Ich werde berichten was ich erreicht habe!
Meine Projekte auf Youtube
So anscheinend war es das - ich habe es jetzt halbwegs am laufen und kämpfe mit FATFS.
Ich habe die Funktion "NVIC_Configuration()" nachgetragen. Diese wird jetzt unmittelbar in "SD_Init()" aufgerufen.
Weiterhin wurde das Interupt "verlinkt" (stm32f10x_it.c):Code:static void NVIC_Configuration( void ) { NVIC_InitTypeDef NVIC_InitStructure; NVIC_PriorityGroupConfig( NVIC_PriorityGroup_1 ); NVIC_InitStructure.NVIC_IRQChannel = SDIO_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init( &NVIC_InitStructure ); }
Das ganze läuft jetzt ohne separates Interupt für den DMA - obwohl ich hier einige Beispiele gefunden habe die dies verwendeten....Code:void SDIO_IRQHandler(void) { /* Process All SDIO Interrupt Sources */ SD_ProcessIRQSrc(); }
Vlt. benötigt der F4 dies?! Demnächst werde ich das ganze auch auf einem F4 umsetzen ...
Die Clock-Divider (CLKDIV) für den SDIO konnte ich jetzt auf 1 reduizieren:
SDIO_TRANSFER_CLK_DIV = 1
Obwohl für die Frequenz gilt:
SDIO_CK frequency = SDIOCLK / [CLKDIV + 2].
läuft das ganze nicht mit CLKDIV = 0
Geändert von erik_wolfram (12.01.2017 um 08:08 Uhr)
Meine Projekte auf Youtube
Hi Erik,
bis die SD-Card bekannt ist, darf der Clock max. 400KHz betragen, am ende von INIT habe ich auf 24Mhz / 4BitBus umgeschaltet.
VG
Peter
Ahh ok, ich sehe grade, dass der AHB Bus mit 72 MHz taktet.
Damit erhalte ich gemäß der Gleichung 24 MHz für CLKDIV = 1; die CLKDIV = 0 gelten dann nur für die 48 MHz CPU-Frequenz....
Meine Projekte auf Youtube
Lesezeichen