我有一个嵌入式设备,配置为启动引导加载程序,希望在重新启动后与 USART1 上的用户进行通信。
如果我打开串行终端应用程序(cutecom)并使用以下方式连接到设备
/dev/ttyUSB0
,这将起作用:
连接后,我重新启动设备,将
0x7f
发送到引导加载程序,引导加载程序用 0x79
进行确认。这是它的样子:
这工作完美无缺。
现在,我想使用以下 python 脚本自动执行此操作,该脚本应该自动连接到设备,写入
0x7f
,然后继续读取,以便从引导加载程序接收预期的确认 0x79
。但是,承认永远不会到来......
import serial.tools.list_ports
import serial
s = serial.Serial(
port="/dev/ttyUSB0",
baudrate=115200,
bytesize=8,
parity=serial.PARITY_EVEN,
stopbits=1,
timeout=120
)
s.write(bytes([0x7f]))
while True:
readData = s.read()
print(readData)
我错过了什么。这还不够简单吗...我以为引导加载程序响应太快了。这可能吗?我该如何解决这个问题?
正如我怀疑的那样,嵌入式设备速度太快,python 无法捕获初始确认。它有助于启动两个进程,在我们开始阅读后,我们发送一个命令
0x7f
。
import serial
import multiprocessing
s = serial.Serial(
port=r"/dev/ttyUSB0",
baudrate=115200,
bytesize=8,
parity=serial.PARITY_EVEN,
stopbits=1,
timeout=120
)
def readSerial(serialConn):
while True:
readData = serialConn.read()
readDataHex = ""
if readData:
for byte in readData:
readDataHex = readDataHex + ' ' + hex(byte)
print(f"RX:{readDataHex}")
def writeSerial(serialConn):
serialConn.write(bytes([0x7F]))
print("TX: 0x7F")
readProcess = multiprocessing.Process(target=readSerial, args=(s,))
sendProcess = multiprocessing.Process(target=writeSerial, args=(s,))
readProcess.start()
sendProcess.start()
# Wait for the reading process to finish (send process will exit after sending)
readProcess.join()