The thing with SIM900/SIM800 is there can be multiple reasons that the AT commands are not working,

I have listed down a few of them which i came across while working with SIM900 and SIM800 series modules, which can be helpful for debugging your hardware/software.

Baud rate :

You need to check at what baud rate your SIM900/SIM800 module is set to, using the command AT+IPR? . And use the same baud rate in your UART configuration. If your SIM900/SIM800 is set into auto baud mode(AT+IPR=0). Then the first AT command you send to the module from your controller should be in capital letters. Like AT and not at. This will help the module to set itself into appropriate baud rate. If your terminal software and SIM900/SIM800 are set into different baud rates you will see dots and junk characters printed. 

Also note that when there is a baud rate mismatch, when you restart the module there will be some characters printed on the terminal software screen, like ....IIII they are some startup preamble hex characters printed by the module. 

Power :

The SIM900 needs around 2A on startup or when a call or a network intensive action takes place. So if your power supply is not able to provide around 2A of surge current then it will be a problem and SIM900 will keep shutting down.

Normally when it doesnt get enough power or current, it outputs a URC string like NORMAL_POWER_DOWN or UNDER_VOLTAGE_POWERDOWN, only if it is already ON. If it is starting up and there is not enough power for it to consume then it will keep switching On and off and it will not output any URC making it hard to debug. 

Ideally I would give a 4V 2A supply to it using a LM2596 switching regulator or  LM39302 LDO  or similar.

IO voltage levels :

The voltage levels acceptable on the SIM900/SIM800 UART pins is 2.8V- 3V . So its IO system works at 2.8V levels. If you are interfacing to a controller running at 5V or 3.3V then it might damage the IO driver circuit of the modules UART pins.

Same is applicable to other pins of SIM900/SIM800 including the PWRKEY pin.

Normally everyone runs their MCU on 3.3V or 5V DC. But if the design permits, i suggest that you could run the MCU on 3VDC or 2.8VDC using LDO like MCP1700-3V so that we can avoid using IO level translation circuits. 

I recommend TXS0102 or TXS0104 bidirectional voltage level translators for this application if you are running micro controller at a higher voltage above 3V. 

Turing the module ON :

You need to provide the proper duration ON pulse on the PWRKEY pin of SIM900/SIM800 to turn it ON. Not too long and not too short. 1 second pulse is recommended.

Also take care of the IO levels here also. In evaluation modules normally a switch is provided.

Basic Checks to be done in case you face any problems :

First things I would check a new module in a custom board is,

  • Is the module getting the network, It blinks the network LED every 3 seconds when it acquires a network. Or it blinks every second if its searching for network. Or 2 times in a second (very fast) when it is connected to internet or GPRS. 
  • Are you getting basic AT commands working on it. If you get a OK as response then you can think of further functionality. So get the basic AT commands working first. 
  • If you are getting basic AT commands to work but other AT commands for HTTP, FTP, DTMF, EMAIL are not working then it means that you need a firmware update. Watch this video for more details
  • I would ring the number of the SIM card inserted in the module to check if the module is connected to the network. Here the command AT+CREG? will help only if you have got the AT commands working.

Sleep mode and wake up from sleep mode : 

For power saving you need to use the command AT+CSCLK=2 to put SIM900/SIM800 into sleep mode 2 whenever it is IDLE.  It goes into sleep mode at 5 seconds of inactivity on UART or network and wakes up whenever a event like a Call/SMS occurs. Here if your module is already in sleep mode then if you want send a command to the module then you need to first send a dummy command to it and within 5 seconds send the actual command to be executed. Here the first command will only awaken the module. 

Also see :

About the Author

is the author of this blog and is an Embedded systems design engineer by profession & Founder @ Valetron Systems Pvt Ltd

Email:This email address is being protected from spambots. You need JavaScript enabled to view it.

Find us on Google+



EasyEDA: Free Circuit Design Software

  • Easy Schematic Capture
  • Powerful Circuit Simulation
  • Online PCB design

Design Your Circuit and PCB here:

PCB Prototype Manufacturer - JLCPCB

Electronic Components Online Store