150 lines
5.2 KiB
Python
150 lines
5.2 KiB
Python
# -*- coding:utf-8 -*-
|
||
import serial
|
||
import serial.tools.list_ports
|
||
import struct
|
||
import time
|
||
import sys
|
||
import random
|
||
import threading
|
||
import datetime
|
||
|
||
|
||
###############################################################################
|
||
#文件设置
|
||
###############################################################################
|
||
writesize = 50*1024
|
||
# readsize = 0*1024
|
||
filesize = 1024*1024
|
||
###############################################################################
|
||
#COM设置
|
||
###############################################################################
|
||
loopbackcom = "COM20"
|
||
baudrate = 2000000
|
||
###############################################################################
|
||
#单串口回环任务
|
||
###############################################################################
|
||
def loopback_tx_thread(func):
|
||
print("loopback thread start")
|
||
txalllen = 0
|
||
txdatalen = 0
|
||
txflag = 0
|
||
txendtime = datetime.datetime.now()
|
||
rxalllen = 0
|
||
rxdatalen = 0
|
||
rxflag = 0
|
||
rxendtime = datetime.datetime.now()
|
||
begin = datetime.datetime.now()
|
||
while True:
|
||
if txflag == 0:
|
||
if txalllen < filesize:
|
||
loopback_send_data = loopback_send_obj.read(writesize)
|
||
txdatalen = loopback_serial.write(loopback_send_data)
|
||
txalllen += txdatalen
|
||
else:
|
||
txflag = 1
|
||
print("loopback send end")
|
||
break
|
||
end = datetime.datetime.now()
|
||
k = end - begin
|
||
print("loopback tx time cost:", k)
|
||
time.sleep(0.2)
|
||
print("loopback tx thread end")
|
||
|
||
###############################################################################
|
||
#单串口回环任务
|
||
###############################################################################
|
||
def loopback_rx_thread(func):
|
||
print("loopback thread start")
|
||
txalllen = 0
|
||
txdatalen = 0
|
||
txflag = 0
|
||
txendtime = datetime.datetime.now()
|
||
rxalllen = 0
|
||
rxdatalen = 0
|
||
rxflag = 0
|
||
rxendtime = datetime.datetime.now()
|
||
begin = datetime.datetime.now()
|
||
while True:
|
||
if rxalllen < filesize:
|
||
loopback_recv_data = loopback_serial.read(writesize)
|
||
rxdatalen = loopback_recv_obj.write(loopback_recv_data)
|
||
rxalllen += rxdatalen
|
||
else:
|
||
rxflag = 1
|
||
print("loopback recv end")
|
||
break
|
||
end = datetime.datetime.now()
|
||
k = end - begin
|
||
print("loopback rx time cost:", k)
|
||
time.sleep(0.2)
|
||
print("loopback rx thread end")
|
||
|
||
###############################################################################
|
||
#创建原始文件
|
||
###############################################################################
|
||
#create usb send file
|
||
begin = datetime.datetime.now()
|
||
loopback_send_obj = open("loopback_send_file.txt", "w+")
|
||
for i in range(filesize):
|
||
loopback_send_obj.write(str(random.randint(0, 9)))
|
||
loopback_send_obj.close()
|
||
end = datetime.datetime.now()
|
||
k = end - begin
|
||
print("file time cost:", k)
|
||
|
||
#create uart receive file
|
||
loopback_recv_obj = open("loopback_recv_file.txt", "w+")
|
||
loopback_recv_obj.close()
|
||
|
||
print("files created")
|
||
|
||
###############################################################################
|
||
#打开原始文件
|
||
###############################################################################
|
||
#open source file for read
|
||
loopback_send_obj = open("loopback_send_file.txt", "rb+")
|
||
|
||
#open target file for write
|
||
loopback_recv_obj = open("loopback_recv_file.txt", "wb+")
|
||
|
||
print("files opened")
|
||
|
||
###############################################################################
|
||
#打开USB和UART串口
|
||
#PC端serial的波特率不准确,比606稍快,在发送内容较短时可通过减小PC端波特率解决
|
||
#uart_serial = serial.Serial("COM15", 2500000 - 20000, timeout = 2)
|
||
#uart_serial = serial.Serial("COM15", 5000000 - 100000, timeout = 2)
|
||
###############################################################################
|
||
#open usb serial for read & write
|
||
loopback_serial = serial.Serial(loopbackcom, baudrate, timeout = 0)
|
||
loopback_serial.set_buffer_size(rx_size = 1024 * 1024, tx_size = 1024 * 1024)
|
||
|
||
print("serial opened")
|
||
|
||
###############################################################################
|
||
#将各任务加入线程列表
|
||
###############################################################################
|
||
#threads list
|
||
threads = []
|
||
loopback_tx_th = threading.Thread(target=loopback_tx_thread, args=("1",))
|
||
loopback_rx_th = threading.Thread(target=loopback_rx_thread, args=("2",))
|
||
threads.append(loopback_tx_th)
|
||
threads.append(loopback_rx_th)
|
||
###############################################################################
|
||
#####################################MAIN######################################
|
||
###############################################################################
|
||
if __name__ == '__main__':
|
||
time.sleep(1)
|
||
# loopback_tx_th.setDaemon(True)
|
||
loopback_rx_th.setDaemon(True)
|
||
loopback_rx_th.start()
|
||
# loopback_tx_th.start()
|
||
loopback_rx_th.join()
|
||
# loopback_tx_th.join()
|
||
# loopback_send_obj.close()
|
||
loopback_recv_obj.close()
|
||
loopback_serial.close()
|
||
print("all end")
|
||
print("")
|
||
###############################################################################
|