diff options
Diffstat (limited to 'nuttx/configs/sure-pic32mx/src/up_spi.c')
-rw-r--r-- | nuttx/configs/sure-pic32mx/src/up_spi.c | 100 |
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; } |