Python:通过uart发送块之间的中断

Python:通过uart发送块之间的中断

问题描述:

我通过uart发送一些数据。我把单个文件分成5120byte的部分(块)。在发送这个块之间有中断(可能基于波特率值),我需要捕获这个中断并从发送数据切换到接收数据。这是可能的吗?Python:通过uart发送块之间的中断

示例代码来发送数据:

ser = serial.Serial(
    port='/dev/ttyS0', 
    baudrate=115200) 

def send(): 
    with open("path_to_my_file_to_send", "rb") as fh: 
     while True: 
      chunk = fh.read(5120) 
      if not chunk: break 
      ser.write(chunk) 

def reveice(): 
global receivedData 
receivedData = "" 
time.sleep(0.001) 
while ser.inWaiting() > 0: 
    receivedData= ser.read(1) 
while True: 
    if len(receivedData) == 1: 
     print ("received data") 
     break 
    else: 
     print("no received data") 
     break 

所以你可以做的是从你发送发送数据然后等待收到发送确认。这样semd就会知道它的数据已经成功接收,然后它可以发送新的数据。如果不是,它可以重新传输它,或者如果它接收到中断消息,它可以停止。 在发送端,您可以收到并发送确认。该确认可以是可以在发送侧验证的消息的长度。

ser = serial.Serial(
port='/dev/ttyS0', 
baudrate=115200) 

def send(): 
with open("path_to_my_file_to_send", "rb") as fh: 
    while True: 
    chunk = fh.read(5120) 
    if not chunk: break 
    ser.write(chunk) 
    #for interupt just send# 
    ser.write(b'interupt') 

def reveice(): 
global receivedData 
receivedData = "" 
time.sleep(0.001) 
while ser.inWaiting() > 0: 
    receivedData= ser.read(1) 
    if b'interupt' in receivedData: 
    #go to recv mode 

while True: 
    if len(receivedData) == 1: 
    print ("received data") 
    break 
else: 
    print("no received data") 
    break 
+0

主要问题是在while循环中检测到这种中断:)我将代码添加到收到的数据。 – KyluAce

+0

重新检查我的答案,看看它是否有帮助。 –

+0

问题是我有时只会收到消息(只有当它在保存块时发生错误或者没有收到整个部分时,我才会收到来自其他方的回复),我需要为它定时。尽管如此,我仍然需要在发送单个块之后监听接收到的数据,但我仍然不知道 – KyluAce

好的,我发现了一些改变看这个问题的东西。 BaudRate只告诉我单块发送的时间。但无论如何,在每个块后都会出现中断,但是对于波特率而言,设置值较大(值超过1000000)可能会在通过uart传输文件时提供间隙。如果我稍微增加波特率,这种差距并不是常规,但如果我们达到4000000(并且在传输文件期间我们执行其他操作),则在每个块之后会出现间隙。