我用窗口的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的数据时,这就没有意义了。在
尝试启用流控制。在
在python端,在ctor中设置
rtscts=1
:在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/
相关问题 更多 >
编程相关推荐