diff --git a/epicardium/modules/hardware.c b/epicardium/modules/hardware.c
index 91a87471ab87b518eb2297c9f009110c33e819b9..17c707217283c41f61bfad79b9b6fb69d7b20d11 100644
--- a/epicardium/modules/hardware.c
+++ b/epicardium/modules/hardware.c
@@ -182,6 +182,11 @@ int hardware_early_init(void)
 	 */
 	dispatcher_mutex_init();
 
+	/*
+	 * MAX30001 mutex init
+	 */
+	max30001_mutex_init();
+
 	return 0;
 }
 
diff --git a/epicardium/modules/max30001.c b/epicardium/modules/max30001.c
index 5cc3ef3654e19b6ea298ab7ba8e019676dfc4332..811af4bf8aa274443abb1415a7586c2766660991 100644
--- a/epicardium/modules/max30001.c
+++ b/epicardium/modules/max30001.c
@@ -370,10 +370,14 @@ static void max300001_interrupt_callback(void *_)
 }
 /* }}} */
 
+void max30001_mutex_init(void)
+{
+	max30001_mutex = xSemaphoreCreateMutexStatic(&max30001_mutex_data);
+}
+
 void vMAX30001Task(void *pvParameters)
 {
 	max30001_task_id = xTaskGetCurrentTaskHandle();
-	max30001_mutex   = xSemaphoreCreateMutexStatic(&max30001_mutex_data);
 
 	int lockret = hwlock_acquire(HWLOCK_SPI_ECG, pdMS_TO_TICKS(100));
 	if (lockret < 0) {
diff --git a/epicardium/modules/modules.h b/epicardium/modules/modules.h
index 87124144fd98a5c4c230596ac4234f4f84332d98..98b0d5e9e42ff48a420da5aebfd5ed05f233896b 100644
--- a/epicardium/modules/modules.h
+++ b/epicardium/modules/modules.h
@@ -92,7 +92,9 @@ void disp_forcelock();
 #define BHI160_MUTEX_WAIT_MS          50
 void vBhi160Task(void *pvParameters);
 
+/* ---------- MAX30001 ----------------------------------------------------- */
 #define MAX30001_MUTEX_WAIT_MS          50
 void vMAX30001Task(void *pvParameters);
+void max30001_mutex_init(void);
 
 #endif /* MODULES_H */