开发者

Serial communication. Sending DTR in the right way?

开发者 https://www.devze.com 2022-12-21 09:36 出处:网络
I\'m dealing with a gm29 by Sony Ericsson. The datasheet says that plugging the power is not sufficient to switch on the modem. It says:

I'm dealing with a gm29 by Sony Ericsson.

The datasheet says that plugging the power is not sufficient to switch on the modem. It says:

  • activate the RS232 control line DTR, high for > 0.2s.

I'm writing some tests in python, but:

#!/usr/bin/env python                                                                                         

import serial
from time import sleep

socket = serial.Serial('/dev/ttyS0',
                       baudrate=9600,
                       bytesize=serial.EIGHTBITS,
                      开发者_开发百科 parity=serial.PARITY_NONE,
                       stopbits=serial.STOPBITS_ONE,
                       timeout=1,
                       xonxoff=0,
                       rtscts=0
                       )
socket.setDTR(True)
sleep(3)
socket.setDTR(False)
try:
    while True:
        socket.write('AT'+chr(13));
        sleep(1)
        print "Reading"
        print socket.readlines()
except:
    socket.close()

does not works... I there a way to get DTR high in other ways? Let's say minicom or some other stuff? Or, easily, am I missing something?

Thanks in advance.


Ok, that was driving me mad. The clue is that the power supplier was "broken", or better, it works good testing with a tester, but plugging on the modem some wires moves and does not carry voltage...

Thanks anyway for the answer, marked as correct 'couse it was :D


There are several things that occur to me here.

1) the spec says that DTR is active low, so you may need to swap the true and false values to setDTR(), depending on who is confused here.

2) You are setting DTR to false after you wake the modem. This tells the modem to go offline, and ignore all input till it goes true again. Try the following:

import serial
from time import sleep

conn = serial.Serial('/dev/ttyS0',
                     baudrate=9600,
                     bytesize=serial.EIGHTBITS,
                     parity=serial.PARITY_NONE,
                     stopbits=serial.STOPBITS_ONE,
                     timeout=1,
                     xonxoff=0,
                     rtscts=0
                     )
# Wake Modem
conn.setDTR(True)
sleep(3)
conn.setDTR(False)

sleep(5)

# Start talking
conn.setDTR(True)
try:
    while True:
        conn.write('AT'+chr(13));
        print conn.readline() # readlines() will probably never return.
finally:
    conn.close()

3) socket is probably a bad name for your serial connection.

0

精彩评论

暂无评论...
验证码 换一张
取 消