diff --git a/Marlin/src/libs/MAX31865.cpp b/Marlin/src/libs/MAX31865.cpp
index 909adb3807..86c31edee9 100644
--- a/Marlin/src/libs/MAX31865.cpp
+++ b/Marlin/src/libs/MAX31865.cpp
@@ -44,7 +44,7 @@
 //#define MAX31865_DEBUG
 //#define MAX31865_DEBUG_SPI
 
-//TODO: switch to SPIclass/SoftSPI
+#include <SoftwareSPI.h>
 
 #include "../inc/MarlinConfig.h"
 
@@ -62,7 +62,7 @@ SPISettings MAX31865::spiConfig = SPISettings(
     500000
   #endif
   , MSBFIRST
-  , SPI_MODE_1 // CPOL0 CPHA1
+  , SPI_MODE1 // CPOL0 CPHA1
 );
 
 #ifndef LARGE_PINMAP
@@ -157,10 +157,9 @@ void MAX31865::begin(max31865_numwires_t wires, float zero, float ref) {
     #ifdef MAX31865_DEBUG
       SERIAL_ECHOLN("Initializing MAX31865 Software SPI");
     #endif
-
-    OUT_WRITE(_sclk, LOW);
-    SET_OUTPUT(_mosi);
-    SET_INPUT(_miso);
+    
+    swSpiBegin(_sclk, _miso, _mosi);
+    
   } else {
     // start and configure hardware SPI
     #ifdef MAX31865_DEBUG
@@ -170,6 +169,9 @@ void MAX31865::begin(max31865_numwires_t wires, float zero, float ref) {
     SPI.begin();
   }
 
+  // SPI Begin must be called first, then init
+  _spi_speed = swSpiInit(SPI_QUARTER_SPEED, _sclk, _mosi);
+
   setWires(wires);
   enableBias(false);
   autoConvert(false);
@@ -484,17 +486,7 @@ uint8_t MAX31865::spixfer(uint8_t x) {
   if (_sclk == TERN(LARGE_PINMAP, -1UL, -1))
     return SPI.transfer(x);
 
-  uint8_t reply = 0;
-  for (int i = 7; i >= 0; i--) {
-    reply <<= 1;
-    WRITE(_sclk, HIGH);
-    WRITE(_mosi, x & (1 << i));
-    WRITE(_sclk, LOW);
-    if (READ(_miso))
-      reply |= 1;
-  }
-
-  return reply;
+  return swSpiTransfer(x, _spi_speed, _sclk, _miso, _mosi);
 }
 
 #endif // HAS_MAX31865 && !LIB_USR_MAX31865
diff --git a/Marlin/src/libs/MAX31865.h b/Marlin/src/libs/MAX31865.h
index 5d50e870ec..13a117447d 100644
--- a/Marlin/src/libs/MAX31865.h
+++ b/Marlin/src/libs/MAX31865.h
@@ -90,6 +90,7 @@ private:
   static SPISettings spiConfig;
 
   TERN(LARGE_PINMAP, uint32_t, uint8_t) _sclk, _miso, _mosi, _cs;
+  uint8_t _spi_speed;
   float Rzero, Rref;
 
   void setConfig(uint8_t config, bool enable);