Серийное общение. Отправка DTR в правильном направлении? - PullRequest
0 голосов
/ 01 марта 2010

Я имею дело с gm29 от Sony Ericsson.

В таблице сказано, что для включения модема недостаточно подключения к сети. Там написано:

  • активировать DTR линии управления RS232, высокий на> 0,2 с.

Я пишу несколько тестов на python, но:

#!/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()

не работает ... У меня есть способ получить высокий DTR другими способами? Скажем, миником или еще что-нибудь? Или я легко что-то упустил?

Заранее спасибо.


Хорошо, это сводило меня с ума. Подсказка в том, что поставщик питания был «сломан», или, что лучше, он хорошо работает с тестером, но при подключении модема некоторые провода движутся и не несут напряжения ...

В любом случае, спасибо за ответ, помеченный как правильный, потому что он был: D

1 Ответ

4 голосов
/ 01 марта 2010

Здесь со мной происходит несколько вещей.

1) спецификация гласит, что DTR активен на низком уровне, поэтому вам может потребоваться поменять значения true и false на setDTR(), в зависимости от того, кто здесь запутался.

2) Вы устанавливаете DTR в false после пробуждения модема. Это говорит модему о необходимости отключения и игнорировании всех вводимых данных до тех пор, пока он снова не перейдет true. Попробуйте следующее:

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 вероятно, плохое имя для вашего последовательного соединения.

...