pyserial 没有从嵌入式设备中的引导加载程序获得响应

问题描述 投票:0回答:1

我有一个嵌入式设备,配置为启动引导加载程序,希望在重新启动后与 USART1 上的用户进行通信。

如果我打开串行终端应用程序(cutecom)并使用以下方式连接到设备

/dev/ttyUSB0
,这将起作用:

  • 115200波特率,
  • 8 个数据位,
  • 偶校验
  • 1 个停止位

连接后,我重新启动设备,将

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 pyserial
1个回答
0
投票

正如我怀疑的那样,嵌入式设备速度太快,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()
© www.soinside.com 2019 - 2024. All rights reserved.