summaryrefslogtreecommitdiff
path: root/nuttx/configs/sure-pic32mx/src/up_spi.c
diff options
context:
space:
mode:
Diffstat (limited to 'nuttx/configs/sure-pic32mx/src/up_spi.c')
-rw-r--r--nuttx/configs/sure-pic32mx/src/up_spi.c100
1 files changed, 89 insertions, 11 deletions
diff --git a/nuttx/configs/sure-pic32mx/src/up_spi.c b/nuttx/configs/sure-pic32mx/src/up_spi.c
index 36ba0844d..02ffa4f48 100644
--- a/nuttx/configs/sure-pic32mx/src/up_spi.c
+++ b/nuttx/configs/sure-pic32mx/src/up_spi.c
@@ -57,9 +57,11 @@
/************************************************************************************
* Definitions
************************************************************************************/
-/* The Sure PIC32MX has an SD slot connected on SPI2:
+
+#ifdef CONFIG_ARCH_DBDP11215
+
+/* The Sure DB_DP11215 PIC32 Storage Demo Board has an SD slot connected on SPI2:
*
- * SPI
* SCK2/PMA5/CN8/RG6 SCK SD connector SCK, FLASH (U1) SCK*
* SDI2/PMA4/CN9/RG7 SDI SD connector DO, FLASH (U1) SO*
* SDO2/PMA3/CN10/RG8 SDO SD connector DI, FLASH (U1) SI*
@@ -73,12 +75,51 @@
* TDI/AN13/PMA10/RB13 SD_WD SD connector WD
*/
-#define GPIO_SD_CS (GPIO_OUTPUT|GPIO_VALUE_ONE|GPIO_PORTB|GPIO_PIN11)
-#define GPIO_SD_CD (GPIO_INPUT|GPIO_INT|GPIO_PORTB|GPIO_PIN12)
-#define GPIO_SD_WD (GPIO_INPUT|GPIO_PORTB|GPIO_PIN13)
+# define PIC32_HAVE_SD 1
+
+# define GPIO_SD_CS (GPIO_OUTPUT|GPIO_VALUE_ONE|GPIO_PORTB|GPIO_PIN11)
+# define GPIO_SD_CD (GPIO_INPUT|GPIO_INT|GPIO_PORTB|GPIO_PIN12)
+# define GPIO_SD_WD (GPIO_INPUT|GPIO_PORTB|GPIO_PIN13)
+
+/* The Sure DB_DP11215 PIC32 Storage Demo Board has pads an SOIC (Flash or
+ * EEPROM) connected on SPI2, however, U4 is not populated on my board.
+ *
+ *
+ * TMS/AN10/CVREFOUT/PMA13/RB10 UTIL_WP FLASH (U1) WP
+ * SS2/PMA2/CN11/RG9 UTIL_CS FLASH (U1) CS
+ */
+
+# undef PIC32_HAVE_SOIC
+# define GPIO_SOIC_WP (GPIO_INPUT|GPIO_PORTB|GPIO_PIN10)
+# define GPIO_SOIC_CS (GPIO_OUTPUT|GPIO_VALUE_ONE|GPIO_PORTG|GPIO_PIN0)
+
/* Change notification numbers -- Not available for SD_CD. */
+#endif
+
+#ifdef CONFIG_ARCH_DBDP11212
+
+/* The Sure DB-DP11212 PIC32 General Purpose Demo Board does not have an
+ * SD slot.
+ */
+
+# undef PIC32_HAVE_SD
+
+ /* The Sure DB-DP11212 PIC32 General Purpose Demo Board has an SOIC (Flash or
+ * EEPROM) connected on SPI2:
+ *
+ *
+ * TMS/AN10/PMA13/RB10 UTIL_WP FLASH (U4) WP
+ * TDO/AN11/PMA12/RB11 UTIL_CS FLASH (U4) CS
+ */
+
+# define PIC32_HAVE_SOIC 1
+
+# define GPIO_SOIC_WP (GPIO_INPUT|GPIO_PORTB|GPIO_PIN10)
+# define GPIO_SOIC_CS (GPIO_OUTPUT|GPIO_VALUE_ONE|GPIO_PORTB|GPIO_PIN11)
+#endif
+
/* The following enable debug output from this file.
*
* CONFIG_DEBUG_SPI && CONFIG_DEBUG - Define to enable basic SPI debug
@@ -124,9 +165,16 @@ void weak_function pic32mx_spiinitialize(void)
* write protect (WP) inputs.
*/
+#ifdef PIC32_HAVE_SD
pic32mx_configgpio(GPIO_SD_CS);
pic32mx_configgpio(GPIO_SD_CD);
pic32mx_configgpio(GPIO_SD_WD);
+#endif
+
+#ifdef PIC32_HAVE_SOIC
+ pic32mx_configgpio(GPIO_SOIC_WP);
+ pic32mx_configgpio(GPIO_SOIC_CS);
+#endif
}
/************************************************************************************
@@ -161,32 +209,62 @@ void pic32mx_spi2select(FAR struct spi_dev_s *dev, enum spi_dev_e devid, bool se
/* The SD card chip select is pulled high and active low */
+#ifdef PIC32_HAVE_SD
if (devid == SPIDEV_MMCSD)
{
pic32mx_gpiowrite(GPIO_SD_CS, !selected);
}
+#endif
+
+#ifdef PIC32_HAVE_SOIC
+ if (devid == SPIDEV_FLASH)
+ {
+ pic32mx_gpiowrite(GPIO_SOIC_CS, !selected);
+ }
+#endif
}
uint8_t pic32mx_spi2status(FAR struct spi_dev_s *dev, enum spi_dev_e devid)
{
uint8_t ret = 0;
- /* Card detect is pull up on-board. If a low value is sensed then the card must
- * be present.
+ /* Card detect is pull up on-board. If a low value is sensed then the
+ * card must be present.
*/
- if (!pic32mx_gpioread(GPIO_SD_CD))
+#ifdef PIC32_HAVE_SD
+ if (devid == SPIDEV_MMCSD)
+ {
+ if (!pic32mx_gpioread(GPIO_SD_CD))
+ {
+ ret = SPI_STATUS_PRESENT;
+
+ /* It seems that a high value indicates the the card is write
+ * protected.
+ */
+
+ if (pic32mx_gpioread(GPIO_SD_WD))
+ {
+ ret |= SPI_STATUS_WRPROTECTED;
+ }
+ }
+ }
+#endif
+
+#ifdef PIC32_HAVE_SOIC
+ if (devid == SPIDEV_FLASH)
{
ret = SPI_STATUS_PRESENT;
- /* It seems that a high value indicatest the the card is write protected. */
+ /* Write protect is indicated with a low value. */
- if (pic32mx_gpioread(GPIO_SD_WD))
+ if (pic32mx_gpioread(GPIO_SOIC_WP))
{
ret |= SPI_STATUS_WRPROTECTED;
}
}
-
+#endif
+
spivdbg("Returning %d\n", ret);
return ret;
}