Todos los módems GSM que conozco tienen dos modos: comando y datos. Y eso incluye el SIM900. El módem comienza en el modo de comando, donde escucha los comandos AT, generalmente a través de una conexión UART en serie con un microcontrolador.
Los comandos AT se modelan después de los módems telefónicos Hayes de los años 80 y 90. AT significa atención. Se utilizan para configurar los parámetros de la conexión y luego iniciar la conexión, en el caso de SIM900, esto se hace con el comando AT + CIPSTART. Si la conexión es exitosa, el módem responde CONECTAR OK y cambia al modo de datos.
En ese punto, se establece una conexión de datos binarios entre el módem GSM y una toma de extremo lejano. Los bytes se pueden enviar de manera transparente. El módem solo puede volver a cambiarse al modo de comando si ocurre cualquiera de las tres cosas: la secuencia de escape +++ (patentada por Hayes) se envía desde el microcontrolador local, o se desactiva el cable DTR (solo si ha sido configurado para actuar de esta manera), o la conexión se interrumpe.
Solo en el primer caso (+++ secuencia de escape) la conexión se mantiene. Sin embargo, mientras el módem está en secuencia de comandos, ya no puede "ver" el extremo lejano.
Entonces, lo que quería hacer, es decir, enviar comandos AT desde el otro extremo y hacer que el módem los ejecute, es imposible porque el módem solo escucha los comandos de su microcontrolador local y solo cuando está en el modo de comando. Incluso si tuviera que enviar comandos AT a través del enlace en modo de datos, el módem GSM simplemente los reenviaría al microcontrolador al que está conectado.
Sería posible ejecutar indirectamente comandos AT desde el otro extremo con ayuda del microcontrolador local. El extremo lejano enviaría los comandos AT a través del enlace en modo de datos, y el microcontrolador local los pondría en cola. El extremo distante debería tener alguna forma de decirle al microcontrolador local cuando se hizo y debería comenzar a ejecutar los comandos. En ese momento, el microcontrolador enviaría la secuencia de escape +++ y luego enviaría los comandos AT en cola. Cuando se hiciera, volvería al modo de datos utilizando el comando ATO, y tal vez enviaría los resultados de los comandos al otro extremo.