Windows到Raspberry Pi零系列问题

2024-06-09 14:52:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我用窗口的WriteFile函数通过串行端口发送数据。这是由运行pyserial readline循环中的python脚本的raspberrypizero接收的(代码如下)。在windows端,我将文件的内容放入缓冲区,然后调用WriteFile函数。它对前95-99%的数据非常有效,就像树莓皮接收数据一样。我要传输的文件内容大约是200kb,这样它就可以得到很多好的数据,但不能得到最后的数据。每当我发送少量的数据时,比如一条线,那么大部分数据线都会损坏。在

Windows代码(相关位):

config.StopBits = ONESTOPBIT;
config.BaudRate = 115200;
config.Parity = NOPARITY;
config.fBinary = TRUE;
config.fParity = TRUE;
config.ByteSize = 8;

//10 second time out
COMMTIMEOUTS timeOuts;
timeOuts.ReadIntervalTimeout = 10000;
timeOuts.ReadTotalTimeoutConstant = 10000;
timeOuts.ReadTotalTimeoutMultiplier = 10000;
timeOuts.WriteTotalTimeoutConstant = 10000;
timeOuts.WriteTotalTimeoutMultiplier = 10000;

char* packet_buffer;

if (!WriteFile(dataFile, packet_buffer, size, &bytesRead, NULL))
{
    _tprintf("There is a problem: %d\n", GetLastError());
}

Raspberry Pi Python脚本(相关位):

^{pr2}$

抱歉,如果这个问题是模糊的,但我已经摆弄了这几天了。我的“直觉”是raspberry pi zero硬件出了点问题(比如速度不够快或其他),但当它接收到几百KB的数据时,这就没有意义了。在


Tags: 文件数据端口函数代码脚本configtrue
2条回答

尝试启用流控制。在

在python端,在ctor中设置rtscts=1

ser = serial.Serial(
        port = '/dev/serial0',
        baudrate = 115200,
        parity = serial.PARITY_NONE,
        stopbits = serial.STOPBITS_ONE,
        bytesize = serial.EIGHTBITS,
        timeout = 10,
        rtscts = True
)

在win c++端,在DCB Struct中启用硬件流控制:

^{pr2}$

谢谢你们的回答,但我还是设法弄明白了。在

我终于打开了逻辑分析仪,看到pi接收所有正在传输的信息,只是缓冲区中的数据并不是通过串行电缆传输的。在

原来我用的串行电缆是狗屎。我试着用另一个,它成功地传输了所有的数据。在

这是坏的电缆(附带了pi-zero入门套件或其他东西):https://www.adafruit.com/product/954?gclid=CIaF2_CX_NMCFU02gQodotIDmA

实际工作的电缆:http://www.gearmo.com/shop/usb-to-3-3v-ttl-pin-header-cable-gm-ttl3vt/

相关问题 更多 >