summaryrefslogtreecommitdiffstatshomepage
path: root/stm/sdio.c
diff options
context:
space:
mode:
Diffstat (limited to 'stm/sdio.c')
-rw-r--r--stm/sdio.c60
1 files changed, 60 insertions, 0 deletions
diff --git a/stm/sdio.c b/stm/sdio.c
new file mode 100644
index 0000000000..78488df1f9
--- /dev/null
+++ b/stm/sdio.c
@@ -0,0 +1,60 @@
+// TODO
+// make it work with DMA
+
+#include <stdio.h>
+//#include "stm32f4xx_sdio.h"
+#include "stm324x7i_eval_sdio_sd.h"
+#include "misc.h"
+#include "systick.h"
+
+#define BLOCK_SIZE 512 /* Block Size in Bytes */
+
+uint8_t aBuffer_Block_Rx[BLOCK_SIZE];
+
+void sdio_init(void) {
+ SD_Error error = SD_Init();
+ printf("Init: %x\n", error);
+ uint8_t det = SD_Detect();
+ printf("Detc: %x\n", det);
+
+ if (!det) {
+ printf("no card detected\n");
+ SD_PowerOFF();
+ SD_DeInit();
+ return;
+ }
+
+ // read a block!
+ error = SD_ReadBlock(aBuffer_Block_Rx, 512, BLOCK_SIZE);
+ printf("ReadBlock: %d\n", error);
+
+ /*
+ // Check if the Transfer is finished
+ error = SD_WaitReadOperation();
+ printf("WaitReadOp: %d\n", error);
+ */
+
+ uint32_t stc = sys_tick_counter;
+ while (SD_GetStatus() != SD_TRANSFER_OK) {
+ if (sys_tick_has_passed(stc, 2000)) {
+ printf("timeout waiting for read to finish\n");
+ break;
+ }
+ }
+ printf("done!!\n");
+
+ printf("%.16s", aBuffer_Block_Rx);
+
+ /*
+ snprintf((char*)aBuffer_Block_Rx, BLOCK_SIZE, "Here is some data back for you!\nBLOCK_SIZE=%d\n", BLOCK_SIZE);
+ error = SD_WriteBlock(aBuffer_Block_Rx, 512, BLOCK_SIZE);
+ printf("WriteBlock: %d\n", error);
+
+ while (SD_GetStatus() != SD_TRANSFER_OK) {
+ }
+ printf("done writing!\n");
+ */
+
+ SD_PowerOFF();
+ SD_DeInit();
+}