In hardware development, the use of reusable software in physical components replacement may be a great alternative when you wish a lower cost in manufacturing. One of the best allies of this perspective of low-cost hardware is the old Bit Bang (or Bit Banging) technique. Using this technique it's possible to enable our microcontroller to communicate with protocols as I2C, UART, SPI, USB, ethernet, among others, without the need of a specific hardware to do so. All done by software.