I am trying to figure if SDA and SCL pins from Arduino Uno is a TTL or a CMOS technology. I am not able to find this info anywhere but regarding it is a I2C protocol it does make sense to be a TTL technology. Can someone kindly confirm this info, please?

  • This is another X-Y question. In your comments below you start to reveal the real issue. How about amending the question to describe the real problem?
    – Nick Gammon
    Commented Apr 13, 2016 at 6:47

2 Answers 2


It is CMOS in that the IO pins of the MCU use MOSFETs not BJTs.

However I2C is slightly different in that it is open-drain not push-pull, so it's not really either TTL or CMOS since it doesn't conform to either logic level standard (since there is no "high" voltage, only what is pulled up by the external resistor). That said, since the ATMega is normally CMOS when in input or push-pull mode the logic levels of the I2C should conform to CMOS not TTL in order for the Arduino to read them properly.

It's closer to RTL than TTL or CMOS.

  • Many thanks for the help. I am struggling in establishing an I2c communication between arduino and pic32mx, and it seems I have a prob here. As you said arduino is RTL and pic is a CMOS technology. Arduino is at 5V and PIC at 3.3V and I am facing many issues in order to release the bus line. Probably this is the reason why. Do you have a clue?
    – scuba
    Commented Apr 8, 2016 at 10:36
  • PIC is CMOS like the Arduino, just a different voltage. More strictly, it's LVCMOS - CMOS at 3.3V. CMOS itself is 5V normally. How are you dealing with the PIC32MX side of things?
    – Majenko
    Commented Apr 8, 2016 at 10:39
  • I already started this conversation in this chatroom a few days ago chat.stackexchange.com/rooms/37934/… let me know if there's any problem in entering the room.
    – scuba
    Commented Apr 8, 2016 at 10:45
  • connect both SDA and SCL via a pullup resistor (about 4.7k-10k) to 3.3V
    – Cano64
    Commented Apr 8, 2016 at 14:40
  • This app-note describes one way to mix voltages on a I2C bus simply: nxp.com/documents/application_note/AN10441.pdf
    – patthoyts
    Commented Apr 8, 2016 at 14:45

Your question makes no sense. I²C uses open-drain/open-collector drivers which can even be discrete transistors or FETs although the inputs correspond to CMOS/TTL. These can be mixed - the Arduino uses MOS technology.

Of more significance is the supply voltage and the high/low trigger points (and of course the value of the mandatory pullup resistors which determine speed and/or range).

It is possible to use mixed 3.3V/5V levels. I use a Pi (3.3V) to communicate to Arduino (5V) which works (provided pullup is to 3.3V) although technically the Arduino input high levels are marginal.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.