diff --git a/drivers/cc3000/src/ccspi.c b/drivers/cc3000/src/ccspi.c
index 2abc637fee0849470105b29cda11797cfe712e26..81ea5628dfcc000c9e8cae45eb942d5d4db906d3 100644
--- a/drivers/cc3000/src/ccspi.c
+++ b/drivers/cc3000/src/ccspi.c
@@ -153,7 +153,7 @@ void SpiOpen(gcSpiHandleRx pfRxHandler)
     SPI_HANDLE->Init.TIMode            = SPI_TIMODE_DISABLED;
     SPI_HANDLE->Init.CRCCalculation    = SPI_CRCCALCULATION_DISABLED;
     SPI_HANDLE->Init.CRCPolynomial     = 7;
-    spi_init(SPI_HANDLE);
+    spi_init(SPI_HANDLE, false);
 
     // configure wlan CS and EN pins
     GPIO_InitTypeDef GPIO_InitStructure;
diff --git a/stmhal/lcd.c b/stmhal/lcd.c
index ea7699be7d317df5d13dadd93f6c7cdfbee23f86..a47fffcd94d5a2952b03560744ea5ce48dd5c888 100644
--- a/stmhal/lcd.c
+++ b/stmhal/lcd.c
@@ -263,7 +263,7 @@ STATIC mp_obj_t pyb_lcd_make_new(mp_obj_t type_in, mp_uint_t n_args, mp_uint_t n
     init->CRCPolynomial = 0;
 
     // init the SPI bus
-    spi_init(lcd->spi);
+    spi_init(lcd->spi, false);
 
     // set the pins to default values
     lcd->pin_cs1->gpio->BSRRL = lcd->pin_cs1->pin_mask;
diff --git a/stmhal/spi.c b/stmhal/spi.c
index 0b825ce1dfe04d85da203d76db74fe5712e98692..007f22daf86ceb560fedf2504bd7a7ae6233d452 100644
--- a/stmhal/spi.c
+++ b/stmhal/spi.c
@@ -86,7 +86,7 @@ void spi_init0(void) {
 }
 
 // TODO allow to take a list of pins to use
-void spi_init(SPI_HandleTypeDef *spi) {
+void spi_init(SPI_HandleTypeDef *spi, bool enable_nss_pin) {
     // init the GPIO lines
     GPIO_InitTypeDef GPIO_InitStructure;
     GPIO_InitStructure.Mode = GPIO_MODE_AF_PP;
@@ -130,7 +130,7 @@ void spi_init(SPI_HandleTypeDef *spi) {
         return;
     }
 
-    for (uint i = 0; i < 4; i++) {
+    for (uint i = (enable_nss_pin ? 0 : 1); i < 4; i++) {
         GPIO_InitStructure.Pin = pins[i]->pin_mask;
         HAL_GPIO_Init(pins[i]->gpio, &GPIO_InitStructure);
     }
@@ -297,7 +297,7 @@ STATIC mp_obj_t pyb_spi_init_helper(const pyb_spi_obj_t *self, mp_uint_t n_args,
     }
 
     // init the SPI bus
-    spi_init(self->spi);
+    spi_init(self->spi, init->NSS != SPI_NSS_SOFT);
 
     return mp_const_none;
 }
diff --git a/stmhal/spi.h b/stmhal/spi.h
index 1f6e7e7b2d5f1a362f45d78d13e3a2c7e9d41406..9f8155252580e2102d5a4f9c1a89b09eef2e7ce0 100644
--- a/stmhal/spi.h
+++ b/stmhal/spi.h
@@ -30,5 +30,5 @@ extern SPI_HandleTypeDef SPIHandle3;
 extern const mp_obj_type_t pyb_spi_type;
 
 void spi_init0(void);
-void spi_init(SPI_HandleTypeDef *spi);
+void spi_init(SPI_HandleTypeDef *spi, bool enable_nss_pin);
 SPI_HandleTypeDef *spi_get_handle(mp_obj_t o);