summaryrefslogtreecommitdiffstats
path: root/bsps/include/libchip/spi-sd-card.h
diff options
context:
space:
mode:
Diffstat (limited to 'bsps/include/libchip/spi-sd-card.h')
-rw-r--r--bsps/include/libchip/spi-sd-card.h86
1 files changed, 86 insertions, 0 deletions
diff --git a/bsps/include/libchip/spi-sd-card.h b/bsps/include/libchip/spi-sd-card.h
new file mode 100644
index 0000000000..77e905a155
--- /dev/null
+++ b/bsps/include/libchip/spi-sd-card.h
@@ -0,0 +1,86 @@
+/**
+ * @file
+ *
+ * @brief SD Card LibI2C driver.
+ */
+
+/*
+ * Copyright (c) 2008
+ * Embedded Brains GmbH
+ * Obere Lagerstr. 30
+ * D-82178 Puchheim
+ * Germany
+ * rtems@embedded-brains.de
+ *
+ * The license and distribution terms for this file may be
+ * found in the file LICENSE in this distribution or at
+ * http://www.rtems.org/license/LICENSE.
+ */
+
+#ifndef LIBI2C_SD_CARD_H
+#define LIBI2C_SD_CARD_H
+
+#include <stdint.h>
+#include <stdbool.h>
+
+#include <rtems/libi2c.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+#define SD_CARD_IDLE_TOKEN 0xff
+
+/**
+ * 1 idle token before command
+ * 6 bytes for the command
+ * 1 to 8 bytes for response start (N_CR)
+ * 1 to 2 bytes for response
+ * 1 idle token after command (minimum N_RC)
+ */
+#define SD_CARD_COMMAND_SIZE 18
+
+#define SD_CARD_TRANSFER_MODE_DEFAULT { .baudrate = 400000, .bits_per_char = 8, .lsb_first = FALSE, .clock_inv = FALSE, .clock_phs = FALSE, .idle_char = SD_CARD_IDLE_TOKEN }
+
+#define SD_CARD_COMMAND_DEFAULT { \
+ SD_CARD_IDLE_TOKEN, \
+ 0x40, 0, 0, 0, 0, 0x95, \
+ SD_CARD_IDLE_TOKEN, SD_CARD_IDLE_TOKEN, \
+ SD_CARD_IDLE_TOKEN, SD_CARD_IDLE_TOKEN, \
+ SD_CARD_IDLE_TOKEN, SD_CARD_IDLE_TOKEN, \
+ SD_CARD_IDLE_TOKEN, SD_CARD_IDLE_TOKEN, \
+ SD_CARD_IDLE_TOKEN, SD_CARD_IDLE_TOKEN, \
+ SD_CARD_IDLE_TOKEN \
+}
+
+/* Default speed = 400kbps, default timeout = 100ms, n_ac_max is in bytes */
+#define SD_CARD_N_AC_MAX_DEFAULT 5000
+
+typedef struct {
+ const char *device_name;
+ rtems_device_minor_number bus;
+ rtems_libi2c_tfr_mode_t transfer_mode;
+ uint8_t command [SD_CARD_COMMAND_SIZE];
+ uint8_t response [SD_CARD_COMMAND_SIZE];
+ int response_index;
+ uint32_t n_ac_max;
+ uint32_t block_number;
+ uint32_t block_size;
+ uint32_t block_size_shift;
+ bool busy;
+ bool verbose;
+ bool schedule_if_busy;
+ uint32_t retries;
+} sd_card_driver_entry;
+
+extern sd_card_driver_entry sd_card_driver_table [];
+
+extern size_t sd_card_driver_table_size;
+
+rtems_status_code sd_card_register( void);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* LIBI2C_SD_CARD_H */