I have arduino nano and sim900a modem. My arduino pinout

SIM900A Modem

Modem Backside

Rx(pin30) and Tx(pin31) pins of arduino shows 3.8VDC respectively and Rx and Tx of SIM900a shows 3.6VDC and 2.8VDC respectively. Could i connect the SIM900a modem directly to the arduino? Since Should i use level shifter between arduino TX(3.8v) and SIM900A modem(3.6v)? Any suggestions?


  • Given that it has a 9-pin D-sub and is not suspected of being differential, one would ordinarily expect RS232 voltage levels which would destroy your Arduino, and are also inverted in polarity. However, it's not clear where the level shifting to that from the likely low-voltage signals of the SM900A itself is happening. Can you show the back side of the board? Do not rely on voltmeter measurements for serial lines. Jun 8, 2015 at 2:02
  • Thanks for the reply Chris. Are you asking SIM900A back side?
    – loki28
    Jun 8, 2015 at 13:19
  • No, the circuit board. The Sim900 is only the little rectangular metal can. Jun 8, 2015 at 14:02
  • @ChrisStratton i've posted the image.
    – loki28
    Jun 8, 2015 at 15:05

1 Answer 1


The bottom of your board shows a chip that gives every hint of being a charge-pump logic-level to RS232 inverting level shifter, to translate from the SIM900A's levels to the RS232 D-Sub connector.

It would appear that the 3 pin header just inside the D-sub would allow you to communicate at these levels.

However, a quick look at the SIM900A docs I could find suggests that these logic levels may be 2.8v, NOT 3.3v, and 3.3v is actually outside absolute maximum rating!

Essentially, you have two problems:

  1. You need to drive and read signals with 2.8v logic, either by modifying your arduino to run at that voltage, or by using a level shifter. It's possible that a resistor would protect the SIM900A, but that is going to be the most expensive component and so short of finding solid evidence of input protection diodes I'd be more hesitant to do that here than I would in other cases.

  2. You need to make the level shifter not drive a signal into the SIM900A, so you don't fight with it. You could do this by looking in the documenation (if any) for your board and seeing what accommodations they made for this, looking up the level shifter's data sheet and finding the enable pin, or merely desoldering it.

Another option would be to make your Arduino talk at RS232 levels using its own shifter board.

Finally, there's a sort of hackish option: Connect the transmit data from the SIM900A to a 3.3v Arduino, but connect the transmit from the Arduino through a simple inverter (tinylogic, whatever) to the RS232 receive pin.

  • Hi Chris. I've designed a simple voltage divider circuit for arduino tx to modem rx. Now its working.
    – loki28
    Jun 9, 2015 at 3:16

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.