diff --git a/src/shared/drivers/usart/USART.cpp b/src/shared/drivers/usart/USART.cpp
index 846d2219adf81a2ae756c7cb79a56d43b1de4ddc..c3a3044d5e65971da6c394975980680c0f0569dd 100644
--- a/src/shared/drivers/usart/USART.cpp
+++ b/src/shared/drivers/usart/USART.cpp
@@ -27,6 +27,7 @@
 #include <utils/Debug.h>
 #include <utils/Numeric.h>
 
+#include <fstream>
 #include <string>
 
 #include "arch/common/drivers/serial.h"
@@ -592,6 +593,26 @@ void USART::writeString(const char* buffer)
     };
 }
 
+bool USART::writeFile(const std::string& fileName)
+{
+    std::ifstream file(fileName, std::ifstream::binary);
+    std::vector<uint8_t> buffer(1024, 0);  // 1024 Bytes buffer.
+
+    if (!file.is_open())
+    {
+        LOG_ERR(logger, "Failed to open file {}", fileName);
+        return false;
+    }
+
+    while (file.read(reinterpret_cast<char*>(buffer.data()), buffer.size()))
+    {
+        std::streamsize s = file.gcount();
+        if (s > 0)
+            write(buffer.data(), static_cast<size_t>(s));
+    }
+    return true;
+}
+
 void USART::clearQueue()
 {
     char buf[INTERNAL_QUEUE_LENGTH];
diff --git a/src/shared/drivers/usart/USART.h b/src/shared/drivers/usart/USART.h
index 1e0f378adb5d31373aa2f4e2f9b4f26c7dfe0308..c39ad94451220f3268ba3d3ed4ad7b8395a4625c 100644
--- a/src/shared/drivers/usart/USART.h
+++ b/src/shared/drivers/usart/USART.h
@@ -267,6 +267,14 @@ public:
      */
     void writeString(const char* buffer);
 
+    /**
+     * @brief Given a filename, uses the USART interface to stream the file in
+     * 1KB chunks
+     * @param fileName String containing the name of the file to stream.
+     * @return A boolean value (true if stream is complete, false otherwise).
+     */
+    bool writeFile(const std::string& fileName);
+
     /**
      * @brief Set the length of the word to 8 or to 9.
      *