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
答
好的,我发现了一些改变看这个问题的东西。 BaudRate只告诉我单块发送的时间。但无论如何,在每个块后都会出现中断,但是对于波特率而言,设置值较大(值超过1000000)可能会在通过uart传输文件时提供间隙。如果我稍微增加波特率,这种差距并不是常规,但如果我们达到4000000(并且在传输文件期间我们执行其他操作),则在每个块之后会出现间隙。
主要问题是在while循环中检测到这种中断:)我将代码添加到收到的数据。 – KyluAce
重新检查我的答案,看看它是否有帮助。 –
问题是我有时只会收到消息(只有当它在保存块时发生错误或者没有收到整个部分时,我才会收到来自其他方的回复),我需要为它定时。尽管如此,我仍然需要在发送单个块之后监听接收到的数据,但我仍然不知道 – KyluAce