diff --git a/src/tests/drivers/sx1278/test-sx1278-bench.cpp b/src/tests/drivers/sx1278/test-sx1278-bench.cpp
index d9eefc1f5743c8b2eb596a2944bd48dc004a0b03..5ddb67f00a8800f77f5597fa3c9538fb8496a6e5 100644
--- a/src/tests/drivers/sx1278/test-sx1278-bench.cpp
+++ b/src/tests/drivers/sx1278/test-sx1278-bench.cpp
@@ -25,6 +25,8 @@
 
 #include <thread>
 
+#include "test-sx1278-core.h"
+
 using namespace Boardcore;
 using namespace miosix;
 
@@ -67,7 +69,6 @@ const char *stringFromErr(SX1278::Error err);
 const char *stringFromRxBw(SX1278::RxBw rx_bw);
 
 void printStats(Stats stats);
-void printConfig(SX1278::Config config);
 
 /// Status informations.
 struct Stats
@@ -300,104 +301,6 @@ int main()
     return 0;
 }
 
-const char *stringFromErr(SX1278::Error err)
-{
-    switch (err)
-    {
-        case SX1278::Error::BAD_VALUE:
-            return "Error::BAD_VALUE";
-
-        case SX1278::Error::BAD_VERSION:
-            return "Error::BAD_VERSION";
-
-        default:
-            return "<unknown>";
-    }
-}
-
-const char *stringFromRxBw(SX1278::RxBw rx_bw)
-{
-    switch (rx_bw)
-    {
-        case SX1278::RxBw::HZ_2600:
-            return "RxBw::HZ_2600";
-
-        case SX1278::RxBw::HZ_3100:
-            return "RxBw::HZ_3100";
-
-        case SX1278::RxBw::HZ_3900:
-            return "RxBw::HZ_3900";
-
-        case SX1278::RxBw::HZ_5200:
-            return "RxBw::HZ_5200";
-
-        case SX1278::RxBw::HZ_6300:
-            return "RxBw::HZ_6300";
-
-        case SX1278::RxBw::HZ_7800:
-            return "RxBw::HZ_7800";
-
-        case SX1278::RxBw::HZ_10400:
-            return "RxBw::HZ_10400";
-
-        case SX1278::RxBw::HZ_12500:
-            return "RxBw::HZ_12500";
-
-        case SX1278::RxBw::HZ_15600:
-            return "RxBw::HZ_15600";
-
-        case SX1278::RxBw::HZ_20800:
-            return "RxBw::HZ_20800";
-
-        case SX1278::RxBw::HZ_25000:
-            return "RxBw::HZ_25000";
-
-        case SX1278::RxBw::HZ_31300:
-            return "RxBw::HZ_31300";
-
-        case SX1278::RxBw::HZ_41700:
-            return "RxBw::HZ_41700";
-
-        case SX1278::RxBw::HZ_50000:
-            return "RxBw::HZ_50000";
-
-        case SX1278::RxBw::HZ_62500:
-            return "RxBw::HZ_62500";
-
-        case SX1278::RxBw::HZ_83300:
-            return "RxBw::HZ_83300";
-
-        case SX1278::RxBw::HZ_100000:
-            return "RxBw::HZ_100000";
-
-        case SX1278::RxBw::HZ_125000:
-            return "RxBw::HZ_125000";
-
-        case SX1278::RxBw::HZ_166700:
-            return "RxBw::HZ_166700";
-
-        case SX1278::RxBw::HZ_200000:
-            return "RxBw::HZ_200000";
-
-        case SX1278::RxBw::HZ_250000:
-            return "RxBw::HZ_250000";
-
-        default:
-            return "<unknown>";
-    }
-}
-
-void printConfig(SX1278::Config config)
-{
-    printf("config.freq_rf = %d\n", config.freq_rf);
-    printf("config.freq_dev = %d\n", config.freq_dev);
-    printf("config.bitrate = %d\n", config.bitrate);
-    printf("config.rx_bw = %s\n", stringFromRxBw(config.rx_bw));
-    printf("config.afc_bw = %s\n", stringFromRxBw(config.afc_bw));
-    printf("config.ocp = %d\n", config.ocp);
-    printf("config.power = %d\n", config.power);
-}
-
 void printStats(Stats stats)
 {
     // Prints are REALLY slow, so take a COPY of stats, so we can print an
diff --git a/src/tests/drivers/sx1278/test-sx1278-bidir.cpp b/src/tests/drivers/sx1278/test-sx1278-bidir.cpp
index 48c4f8b00bda130ed95d9a4d392511fb73389c97..6ecf7b42664660dd6331bf8c707f130135216e3b 100644
--- a/src/tests/drivers/sx1278/test-sx1278-bidir.cpp
+++ b/src/tests/drivers/sx1278/test-sx1278-bidir.cpp
@@ -26,6 +26,8 @@
 #include <cstring>
 #include <thread>
 
+#include "test-sx1278-core.h"
+
 using namespace Boardcore;
 using namespace miosix;
 
@@ -59,11 +61,6 @@ GpioPin mosi1(GPIOB_BASE, 15);
 GpioPin cs1(GPIOA_BASE, 2);
 GpioPin dio1(GPIOC_BASE, 0);
 
-const char *stringFromErr(SX1278::Error err);
-const char *stringFromRxBw(SX1278::RxBw rx_bw);
-
-void printConfig(SX1278::Config config);
-
 SX1278 *sx1278[2] = {nullptr, nullptr};
 
 void __attribute__((used)) EXTI15_IRQHandlerImpl()
@@ -202,101 +199,3 @@ int main()
 
     return 0;
 }
-
-const char *stringFromErr(SX1278::Error err)
-{
-    switch (err)
-    {
-        case SX1278::Error::BAD_VALUE:
-            return "Error::BAD_VALUE";
-
-        case SX1278::Error::BAD_VERSION:
-            return "Error::BAD_VERSION";
-
-        default:
-            return "<unknown>";
-    }
-}
-
-const char *stringFromRxBw(SX1278::RxBw rx_bw)
-{
-    switch (rx_bw)
-    {
-        case SX1278::RxBw::HZ_2600:
-            return "RxBw::HZ_2600";
-
-        case SX1278::RxBw::HZ_3100:
-            return "RxBw::HZ_3100";
-
-        case SX1278::RxBw::HZ_3900:
-            return "RxBw::HZ_3900";
-
-        case SX1278::RxBw::HZ_5200:
-            return "RxBw::HZ_5200";
-
-        case SX1278::RxBw::HZ_6300:
-            return "RxBw::HZ_6300";
-
-        case SX1278::RxBw::HZ_7800:
-            return "RxBw::HZ_7800";
-
-        case SX1278::RxBw::HZ_10400:
-            return "RxBw::HZ_10400";
-
-        case SX1278::RxBw::HZ_12500:
-            return "RxBw::HZ_12500";
-
-        case SX1278::RxBw::HZ_15600:
-            return "RxBw::HZ_15600";
-
-        case SX1278::RxBw::HZ_20800:
-            return "RxBw::HZ_20800";
-
-        case SX1278::RxBw::HZ_25000:
-            return "RxBw::HZ_25000";
-
-        case SX1278::RxBw::HZ_31300:
-            return "RxBw::HZ_31300";
-
-        case SX1278::RxBw::HZ_41700:
-            return "RxBw::HZ_41700";
-
-        case SX1278::RxBw::HZ_50000:
-            return "RxBw::HZ_50000";
-
-        case SX1278::RxBw::HZ_62500:
-            return "RxBw::HZ_62500";
-
-        case SX1278::RxBw::HZ_83300:
-            return "RxBw::HZ_83300";
-
-        case SX1278::RxBw::HZ_100000:
-            return "RxBw::HZ_100000";
-
-        case SX1278::RxBw::HZ_125000:
-            return "RxBw::HZ_125000";
-
-        case SX1278::RxBw::HZ_166700:
-            return "RxBw::HZ_166700";
-
-        case SX1278::RxBw::HZ_200000:
-            return "RxBw::HZ_200000";
-
-        case SX1278::RxBw::HZ_250000:
-            return "RxBw::HZ_250000";
-
-        default:
-            return "<unknown>";
-    }
-}
-
-void printConfig(SX1278::Config config)
-{
-    printf("config.freq_rf = %d\n", config.freq_rf);
-    printf("config.freq_dev = %d\n", config.freq_dev);
-    printf("config.bitrate = %d\n", config.bitrate);
-    printf("config.rx_bw = %s\n", stringFromRxBw(config.rx_bw));
-    printf("config.afc_bw = %s\n", stringFromRxBw(config.afc_bw));
-    printf("config.ocp = %d\n", config.ocp);
-    printf("config.power = %d\n", config.power);
-}
diff --git a/src/tests/drivers/sx1278/test-sx1278-core.cpp b/src/tests/drivers/sx1278/test-sx1278-core.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..86d4bc25445433ae4bfdbad5818197f60ca029e1
--- /dev/null
+++ b/src/tests/drivers/sx1278/test-sx1278-core.cpp
@@ -0,0 +1,123 @@
+/* Copyright (c) 2021 Skyward Experimental Rocketry
+ * Author: Davide Mor
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+#include "test-sx1278-core.h"
+
+using namespace Boardcore;
+
+const char *stringFromErr(SX1278::Error err)
+{
+    switch (err)
+    {
+        case SX1278::Error::BAD_VALUE:
+            return "Error::BAD_VALUE";
+
+        case SX1278::Error::BAD_VERSION:
+            return "Error::BAD_VERSION";
+
+        default:
+            return "<unknown>";
+    }
+}
+
+const char *stringFromRxBw(SX1278::RxBw rx_bw)
+{
+    switch (rx_bw)
+    {
+        case SX1278::RxBw::HZ_2600:
+            return "RxBw::HZ_2600";
+
+        case SX1278::RxBw::HZ_3100:
+            return "RxBw::HZ_3100";
+
+        case SX1278::RxBw::HZ_3900:
+            return "RxBw::HZ_3900";
+
+        case SX1278::RxBw::HZ_5200:
+            return "RxBw::HZ_5200";
+
+        case SX1278::RxBw::HZ_6300:
+            return "RxBw::HZ_6300";
+
+        case SX1278::RxBw::HZ_7800:
+            return "RxBw::HZ_7800";
+
+        case SX1278::RxBw::HZ_10400:
+            return "RxBw::HZ_10400";
+
+        case SX1278::RxBw::HZ_12500:
+            return "RxBw::HZ_12500";
+
+        case SX1278::RxBw::HZ_15600:
+            return "RxBw::HZ_15600";
+
+        case SX1278::RxBw::HZ_20800:
+            return "RxBw::HZ_20800";
+
+        case SX1278::RxBw::HZ_25000:
+            return "RxBw::HZ_25000";
+
+        case SX1278::RxBw::HZ_31300:
+            return "RxBw::HZ_31300";
+
+        case SX1278::RxBw::HZ_41700:
+            return "RxBw::HZ_41700";
+
+        case SX1278::RxBw::HZ_50000:
+            return "RxBw::HZ_50000";
+
+        case SX1278::RxBw::HZ_62500:
+            return "RxBw::HZ_62500";
+
+        case SX1278::RxBw::HZ_83300:
+            return "RxBw::HZ_83300";
+
+        case SX1278::RxBw::HZ_100000:
+            return "RxBw::HZ_100000";
+
+        case SX1278::RxBw::HZ_125000:
+            return "RxBw::HZ_125000";
+
+        case SX1278::RxBw::HZ_166700:
+            return "RxBw::HZ_166700";
+
+        case SX1278::RxBw::HZ_200000:
+            return "RxBw::HZ_200000";
+
+        case SX1278::RxBw::HZ_250000:
+            return "RxBw::HZ_250000";
+
+        default:
+            return "<unknown>";
+    }
+}
+
+void printConfig(SX1278::Config config)
+{
+    printf("config.freq_rf = %d\n", config.freq_rf);
+    printf("config.freq_dev = %d\n", config.freq_dev);
+    printf("config.bitrate = %d\n", config.bitrate);
+    printf("config.rx_bw = %s\n", stringFromRxBw(config.rx_bw));
+    printf("config.afc_bw = %s\n", stringFromRxBw(config.afc_bw));
+    printf("config.ocp = %d\n", config.ocp);
+    printf("config.power = %d\n", config.power);
+}
diff --git a/src/tests/drivers/sx1278/test-sx1278-core.h b/src/tests/drivers/sx1278/test-sx1278-core.h
new file mode 100644
index 0000000000000000000000000000000000000000..7a5d224a4f887d899389c0dddbfed8788e6c33d5
--- /dev/null
+++ b/src/tests/drivers/sx1278/test-sx1278-core.h
@@ -0,0 +1,30 @@
+/* Copyright (c) 2021 Skyward Experimental Rocketry
+ * Author: Davide Mor
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+#pragma once
+
+#include <drivers/SX1278/SX1278.h>
+
+const char *stringFromErr(Boardcore::SX1278::Error err);
+const char *stringFromRxBw(Boardcore::SX1278::RxBw rx_bw);
+
+void printConfig(Boardcore::SX1278::Config config);