الاتصال التسلسلي. إرسال DTR بالطريقة الصحيحة؟
-
23-09-2019 - |
سؤال
أنا أتعامل مع أ GM29 بقلم سوني إريكسون.
ال ورقة البيانات يقول أن توصيل الطاقة لا يكفي لتبديل المودم. انها تقول:
- تفعيل خط التحكم RS232 DTR ، مرتفع لـ> 0.2s.
أنا أكتب بعض الاختبارات في بيثون ، لكن:
#!/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 عالية بطرق أخرى؟ دعنا نقول minicom أو بعض الأشياء الأخرى؟ أو بسهولة ، هل أفتقد شيئًا؟
شكرا مقدما.
حسنًا ، كان ذلك يقودني إلى الجنون. الفكرة هي أن مورد الطاقة "مكسور" ، أو أفضل ، فهو يعمل اختبار جيد مع اختبار ، ولكن توصيل المودم يتحرك بعض الأسلاك ولا يحمل الجهد ...
شكرًا على أي حال على الإجابة ، تم وضع علامة عليها على أنها "Couse" كانت: D
المحلول
هناك العديد من الأشياء التي تحدث لي هنا.
1) تقول المواصفات إن DTR منخفضة ، لذلك قد تحتاج إلى تبديل true
و false
القيم ل setDTR()
, ، اعتمادا على من هو الخلط هنا.
2) أنت إعداد DTR
إلى خطأ بعد أن تستيقظ المودم. هذا يخبر المودم بالخروج متصل ، وتجاهل كل المدخلات حتى يذهب 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
ربما هو اسم سيء لاتصالك التسلسلي.