diff --git a/tools/i2c/i2c.cpp b/tools/i2c/i2c.cpp
new file mode 100644
index 0000000..fdf0732
--- /dev/null
+++ b/tools/i2c/i2c.cpp
@@ -0,0 +1,73 @@
+#include "i2c.hpp"
+
+namespace i2c
+{
+
+void I2CDevice::read(uint8_t& data)
+{
+    // TODO
+    (void)data;
+}
+
+void I2CDevice::read(uint8_t addr, uint8_t& data)
+{
+    // TODO
+    (void)addr;
+    (void)data;
+}
+
+void I2CDevice::read(uint8_t addr, uint16_t& data)
+{
+    // TODO
+    (void)addr;
+    (void)data;
+}
+
+void I2CDevice::read(uint8_t addr, uint8_t& size, uint8_t* data)
+{
+    // TODO
+    (void)addr;
+    (void)size;
+    (void)data;
+}
+
+void I2CDevice::write(uint8_t data)
+{
+    // TODO
+    (void)data;
+}
+
+void I2CDevice::write(uint8_t addr, uint8_t data)
+{
+    // TODO
+    (void)addr;
+    (void)data;
+}
+
+void I2CDevice::write(uint8_t addr, uint16_t data)
+{
+    // TODO
+    (void)addr;
+    (void)data;
+}
+
+void I2CDevice::write(uint8_t addr, uint8_t size, const uint8_t* data)
+{
+    // TODO
+    (void)addr;
+    (void)size;
+    (void)data;
+}
+
+std::unique_ptr<I2CInterface> I2CDevice::create(uint8_t busId, uint8_t devAddr)
+{
+    std::unique_ptr<I2CDevice> dev(new I2CDevice(busId, devAddr));
+    return dev;
+}
+
+std::unique_ptr<I2CInterface> create(uint8_t busId, uint8_t devAddr)
+{
+    return I2CDevice::create(busId, devAddr);
+}
+
+} // namespace i2c
diff --git a/tools/i2c/i2c.hpp b/tools/i2c/i2c.hpp
new file mode 100644
index 0000000..f9cc09e
--- /dev/null
+++ b/tools/i2c/i2c.hpp
@@ -0,0 +1,57 @@
+#pragma once
+
+#include "i2c_interface.hpp"
+
+namespace i2c
+{
+
+class I2CDevice : public I2CInterface
+{
+  private:
+    I2CDevice() = delete;
+
+    explicit I2CDevice(uint8_t busId, uint8_t devAddr)
+    {
+        // TODO
+        (void)busId;
+        (void)devAddr;
+    }
+
+  public:
+    virtual ~I2CDevice() = default;
+
+    /** @copydoc I2CInterface::read(uint8_t&) */
+    void read(uint8_t& data) override;
+
+    /** @copydoc I2CInterface::read(uint8_t,uint8_t&) */
+    void read(uint8_t addr, uint8_t& data) override;
+
+    /** @copydoc I2CInterface::read(uint8_t,uint16_t&) */
+    void read(uint8_t addr, uint16_t& data) override;
+
+    /** @copydoc I2CInterface::read(uint8_t,uint8_t&,uint8_t*) */
+    void read(uint8_t addr, uint8_t& size, uint8_t* data) override;
+
+    /** @copydoc I2CInterface::write(uint8_t) */
+    void write(uint8_t data) override;
+
+    /** @copydoc I2CInterface::write(uint8_t,uint8_t) */
+    void write(uint8_t addr, uint8_t data) override;
+
+    /** @copydoc I2CInterface::write(uint8_t,uint16_t) */
+    void write(uint8_t addr, uint16_t data) override;
+
+    /** @copydoc I2CInterface::write(uint8_t,uint8_t,const uint8_t*) */
+    void write(uint8_t addr, uint8_t size, const uint8_t* data) override;
+
+    /** @brief Create an I2CInterface instance
+     *
+     * @param[in] busId - The i2c bus ID
+     * @param[in] devAddr - The device address of the i2c
+     *
+     * @return The unique_ptr holding the I2CInterface
+     */
+    static std::unique_ptr<I2CInterface> create(uint8_t busId, uint8_t devAddr);
+};
+
+} // namespace i2c
diff --git a/tools/i2c/i2c_interface.hpp b/tools/i2c/i2c_interface.hpp
new file mode 100644
index 0000000..ab12e32
--- /dev/null
+++ b/tools/i2c/i2c_interface.hpp
@@ -0,0 +1,136 @@
+#pragma once
+
+#include <cstdint>
+#include <cstring>
+#include <exception>
+#include <iostream>
+#include <memory>
+#include <sstream>
+#include <string>
+#include <vector>
+
+namespace i2c
+{
+
+class I2CException : public std::exception
+{
+  public:
+    explicit I2CException(const std::string& info, const std::string& bus,
+                          uint8_t addr, int errorCode = 0) :
+        bus(bus),
+        addr(addr), errorCode(errorCode)
+    {
+        std::stringstream ss;
+        ss << "I2CException: " << info << ": bus " << bus << ", addr 0x"
+           << std::hex << static_cast<int>(addr);
+        if (errorCode != 0)
+        {
+            ss << std::dec << ", errno " << errorCode << ": "
+               << strerror(errorCode);
+        }
+        errStr = ss.str();
+    }
+    virtual ~I2CException() = default;
+
+    const char* what() const noexcept override
+    {
+        return errStr.c_str();
+    }
+    std::string bus;
+    uint8_t addr;
+    int errorCode;
+    std::string errStr;
+};
+
+class I2CInterface
+{
+  public:
+    virtual ~I2CInterface() = default;
+
+    /** @brief Read byte data from i2c
+     *
+     * @param[out] data - The data read from the i2c device
+     *
+     * @throw I2CException on error
+     */
+    virtual void read(uint8_t& data) = 0;
+
+    /** @brief Read byte data from i2c
+     *
+     * @param[in] addr - The register address of the i2c device
+     * @param[out] data - The data read from the i2c device
+     *
+     * @throw I2CException on error
+     */
+    virtual void read(uint8_t addr, uint8_t& data) = 0;
+
+    /** @brief Read word data from i2c
+     *
+     * @param[in] addr - The register address of the i2c device
+     * @param[out] data - The data read from the i2c device
+     *
+     * @throw I2CException on error
+     */
+    virtual void read(uint8_t addr, uint16_t& data) = 0;
+
+    /** @brief Read block data from i2c
+     *
+     * @param[in] addr - The register address of the i2c device
+     * @param[out] size - The size of data read from i2c device
+     * @param[out] data - The pointer to buffer to read from the i2c device,
+     *                    the buffer shall be big enough to hold the data
+     *                    returned by the device. SMBus allows at most 32
+     *                    bytes.
+     *
+     * @throw I2CException on error
+     */
+    virtual void read(uint8_t addr, uint8_t& size, uint8_t* data) = 0;
+
+    /** @brief Write byte data to i2c
+     *
+     * @param[in] data - The data to write to the i2c device
+     *
+     * @throw I2CException on error
+     */
+    virtual void write(uint8_t data) = 0;
+
+    /** @brief Write byte data to i2c
+     *
+     * @param[in] addr - The register address of the i2c device
+     * @param[in] data - The data to write to the i2c device
+     *
+     * @throw I2CException on error
+     */
+    virtual void write(uint8_t addr, uint8_t data) = 0;
+
+    /** @brief Write word data to i2c
+     *
+     * @param[in] addr - The register address of the i2c device
+     * @param[in] data - The data to write to the i2c device
+     *
+     * @throw I2CException on error
+     */
+    virtual void write(uint8_t addr, uint16_t data) = 0;
+
+    /** @brief Write block data to i2c
+     *
+     * @param[in] addr - The register address of the i2c device
+     * @param[in] size - The size of data to write, SMBus allows at most 32
+     *                   bytes
+     * @param[in] data - The data to write to the i2c device
+     *
+     * @throw I2CException on error
+     */
+    virtual void write(uint8_t addr, uint8_t size, const uint8_t* data) = 0;
+};
+
+/** @brief Create an I2CInterface instance
+ *
+ * @param[in] busId - The i2c bus ID
+ * @param[in] devAddr - The device address of the i2c
+ *
+ * @return The unique_ptr holding the I2CInterface
+ */
+std::unique_ptr<I2CInterface> create(uint8_t busId, uint8_t devAddr);
+
+} // namespace i2c
diff --git a/tools/i2c/meson.build b/tools/i2c/meson.build
new file mode 100644
index 0000000..1f4e7d1
--- /dev/null
+++ b/tools/i2c/meson.build
@@ -0,0 +1,5 @@
+libi2c_dev = static_library(
+    'i2c_dev',
+    'i2c.cpp',
+    link_args : '-li2c',
+)
diff --git a/tools/i2c/test/mocked_i2c_interface.hpp b/tools/i2c/test/mocked_i2c_interface.hpp
new file mode 100644
index 0000000..feb8f74
--- /dev/null
+++ b/tools/i2c/test/mocked_i2c_interface.hpp
@@ -0,0 +1,33 @@
+#pragma once
+
+#include "../i2c_interface.hpp"
+
+#include <gmock/gmock.h>
+
+namespace i2c
+{
+
+class MockedI2CInterface : public I2CInterface
+{
+  public:
+    virtual ~MockedI2CInterface() = default;
+
+    MOCK_METHOD(void, read, (uint8_t & data), (override));
+    MOCK_METHOD(void, read, (uint8_t addr, uint8_t& data), (override));
+    MOCK_METHOD(void, read, (uint8_t addr, uint16_t& data), (override));
+    MOCK_METHOD(void, read, (uint8_t addr, uint8_t& size, uint8_t* data),
+                (override));
+
+    MOCK_METHOD(void, write, (uint8_t data), (override));
+    MOCK_METHOD(void, write, (uint8_t addr, uint8_t data), (override));
+    MOCK_METHOD(void, write, (uint8_t addr, uint16_t data), (override));
+    MOCK_METHOD(void, write, (uint8_t addr, uint8_t size, const uint8_t* data),
+                (override));
+};
+
+std::unique_ptr<I2CInterface> create(uint8_t /*busId*/, uint8_t /*devAddr*/)
+{
+    return std::make_unique<MockedI2CInterface>();
+}
+
+} // namespace i2c
