diff --git a/libraries/SPI/SPI.cpp b/libraries/SPI/SPI.cpp
index 6cc61a747..654053f28 100644
--- a/libraries/SPI/SPI.cpp
+++ b/libraries/SPI/SPI.cpp
@@ -81,9 +81,11 @@ void arduino::MbedSPI::beginTransaction(SPISettings settings) {
         dev->obj->frequency(settings.getClockFreq());
         this->settings = settings;
     }
+    spiLockMutex.lock();
 }
 
 void arduino::MbedSPI::endTransaction(void) {
+    spiLockMutex.unlock();
     // spinlock until transmission is over (if using ASYNC transfer)
 }
 
diff --git a/libraries/SPI/SPI.h b/libraries/SPI/SPI.h
index 3266953d4..a9cef6cc4 100644
--- a/libraries/SPI/SPI.h
+++ b/libraries/SPI/SPI.h
@@ -20,6 +20,7 @@
 
 #include "Arduino.h"
 #include "api/HardwareSPI.h"
+#include <Mutex.h>
 
 typedef struct _mbed_spi mbed_spi;
 
@@ -50,6 +51,7 @@ class MbedSPI : public SPIClass
 private:
     SPISettings settings = SPISettings(0, MSBFIRST, SPI_MODE0);
     _mbed_spi* dev = NULL;
+    rtos::Mutex spiLockMutex;
     PinName _miso;
     PinName _mosi;
     PinName _sck;