在Windows命令提示符下如何通过串口发送文件

11

我试图通过COM端口发送文件,但每次都失败了。

首先,在每台机器上我像这样配置一个串行端口:

MODE COMx:115200,N,8

x是COM端口号。

之后我正在尝试执行:

COPY file.zip COM1: /B

在接收方电脑上进行相反的操作。

在大多数情况下,我得到了一个损坏的压缩文件。但最近几次却什么都没有 - 第一个电脑说文件已经发送了,但第二个电脑却一直在等待数据。有人知道如何解决这个问题吗?


这个串口电缆以前有用过吗?你确定你有一个正确配置的串口电缆吗? - lit
电缆工作正常,通过使用c# SerialPort类发送进行了检查。是的,我之前也做过这个 - 文件传输良好,但只适用于文本文件。也许二进制复制标志对其他文件有帮助。 - Alex
你有没有通过C#练习发送非文本内容?当然,如果二进制数据中包含Control-Z(0x1A),那么它很可能会终止传输。 - lit
你没有提到在接收端电脑上运行了什么命令。 COPY COM1: file.zip /B 是无效的。接收方应该在中断控制器和USART上启用IRQ,通过中断处理程序接收数据,并将它们存储在磁盘上。操作系统shell并不能提供所有这些任务。 - vitsoft
2个回答

16

这对我来说可行,用于将二进制文件发送到Arduino:

mode COM21 BAUD=115200 PARITY=n DATA=8
copy yourfile.txt \\.\COM21

注意,对于端口号大于等于10的情况,必须使用\\.\,而对于1-9的端口号也可以使用。


1
你如何将文件复制到COM21的/home/目录中? - Sedmaister
我不确定是否理解您的问题,因为用于COM端口的串行协议(rs-232)仅定义如何发送和接收字节到/从串行设备,它并未定义任何关于文件系统的内容(特别是它未定义主目录)。大多数串行设备,例如串行鼠标或串行调制解调器都没有任何文件系统。您可以在此处找到有关rs-232的更多信息:https://en.wikipedia.org/wiki/RS-232#Sp%C3%A9cification - Ben
谢谢@Ben,让我澄清一下我的问题:是否可以通过COM端口将文件传输到Linux文件系统(例如ext2)中?如果是,从Windows shell中该命令会是什么样子? - Sedmaister
5
简短回答是不行的,RS-232协议非常底层:发送字节,接收字节,没有任何解释。Linux甚至不知道传输的文件何时开始和结束,或它的文件名。但你可能在寻找Kermit(https://en.wikipedia.org/wiki/Kermit_(protocol))或Zmodem。有一些软件可以在Windows和Linux上实现它,这样就可以通过串行线传输文件了。这里有一个如何操作的指南:https://andym3.wordpress.com/mini-howto-linux-windows-serial-file-transfer/ - Ben
文件到达目的地后在哪里?@Ben Windows告诉我传输成功了,但我找不到文件在目的地的位置... - Maskim
1
这取决于你的目的地,串行协议只是将文件的字节发送到COM端口。例如,您可以将文件发送到串行鼠标,它不会对此信息做任何事情,也不会将其保存为文件(但您将看到传输成功,因为协议中根本没有检查)。但是,如果您将其发送到另一台Windows计算机,在那里特定软件正在“侦听”该特定串行端口,则可以恢复文件并将其保存在所需位置。这样的软件示例是Kermit:https://kermitproject.org/k95.html - Ben

3
你需要在命令行的结尾处以及zip文件(或其他文件)之后指定/B来表示二进制文件。例如:COPY ABinary.File /B COM1 /B,否则它会在遇到第一个非文本ASCII字符时停止传输。建议在接收端使用Hyperterminal并选择Transfer > Capture Text。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接