串行监控方法,通过COM端口测试通信,无需串行通信设备

时间:2016-07-29 16:57:26

标签: matlab fpga uart serial-communication spartan

我在ISE设计工具包上模拟和合成了Verilog代码。我有一个FPGA spartan 6器件用于实现。但是当我将设备连接到PC时,设备存在问题(可能是电源问题),导致设备在任何COM端口都不可用。所以我想检查一下我通过设备进行串行通信的Matlab代码是否能完成预期的工作。所以我需要一种方法来测试通过任何COM端口的串行通信,而无需将串行com设备连接到PC。有没有这样的方法,我可以从Matlab到COM端口的Tx Rx串行数据?任何软件或任何其他方法将受到高度赞赏:)

2 个答案:

答案 0 :(得分:1)

我找到了一种使用虚拟串行端口测试Matlab串行通信的方法。

http://freevirtualserialports.com/下载“免费软件虚拟COM端口仿真器” 我在Windows 10中安装它,它正在工作(作为试用版)。

添加一对两个串口:
enter image description here

执行以下Matlab代码示例以验证它是否正常工作:

s3 = serial('COM3','BaudRate',115200);
s4 = serial('COM4','BaudRate',115200);

fopen(s3);
fopen(s4);

fwrite(s3, uint8([1, 2, 3, 4, 5]));
%fprintf(s3, '12345');
pause(0.1);

RxBuf = fread(s4, 5)

fclose(s3);
delete(s3);
clear s3

fclose(s4);
delete(s4);
clear s4

输出结果为:

RxBuf =

     1
     2
     3
     4
     5

绕过问题“它只能用于单个测试会话”。
使用该软件创建一对虚拟端口时出现问题,它只能用于单个测试会话 我猜这是COM端口仿真软件的一个问题 以下解决方案,不是一个好的做法(而不是一个真正的解决方案)。

  • 将序列对象声明为global,使对象保持不变。
  • 仅在未创建串行对象时创建它。
  • 不要删除也不要清除序列对象。

请参阅以下代码示例:

global s3 s4

if isempty(s3)
    s3 = serial('COM3','BaudRate',115200);
end

if isempty(s4)
    s4 = serial('COM4','BaudRate',115200);
end

fopen(s3);
fopen(s4);

fwrite(s3, uint8([1, 2, 3, 4, 5]));
pause(0.1);

RxBuf = fread(s4, 5)

fclose(s3);
%delete(s3);
%clear s3

fclose(s4);
%delete(s4);
%clear s4

您还可以寻找更好的虚拟COM端口软件。

答案 1 :(得分:0)

正如Rotem建议的那样,如果您需要在PC的2个程序之间通过串行线进行通信,则需要一个虚拟COM端口仿真器。

您似乎在Windows操作系统上运行,因此我建议使用完全免费的模拟器(不是试用版)。对于Windows,我使用com0com Null-modem emulator(来自 SourceForge )。

在下面的例子中,我将展示如何与“另一个”设备通信,因此Matlab不会处理通信的两个方面。另一个设备将由一个简单的终端模拟。对于Windows,我使用RealTerm: Serial/TCP Terminal(也来自 SourceForge )。

设定:

使用所有默认选项执行两个程序的设置。默认情况下, com0com 将创建一对虚拟对COM3/COM4,但如果您的系统上已存在这些端口,则程序可能会分配其他数字。在运行示例之前检查数字。 (它也会创建一个CNCA0/CNCB0对,但你现在可以忽略它。)

enter image description here

对于 RealTerm ,一旦安装(不要忘记在设置结束时激活服务器注册,默认情况下应该勾选),它将会看起来如下。保留所有默认选项,只需设置端口号和波特率(如果需要更改)。

enter image description here

测试MATLAB - >终端

您已准备好将MATLAB中的Ascii字符或二进制值发送到您的设备。下面的动画显示了两个选项的示例:
您可以点击图片查看完整尺寸。它在循环中运行,所以你可能要等到它从头重新开始。

enter image description here

测试终端 - > MATLAB

下面的动画演示了如何以其他方式测试通信: enter image description here

当您发送Ascii字符并希望在MATLAB上使用[CR]格式说明符时,请不要忘记在 RealTerm 上勾选[LF] '%s',因为它需要这些字符来检测字符串的结尾。

注意:

  • 如果你有另一个终端程序,你也可以使用它 也会一样。
  • 如果 RealTerm 选项不适合您,或者您想要处理 从Matlab通信双方,然后就可以使用代码了 由Rotem提供的第一个答案。只需安装 com0com 即可 忽略所有 RealTerm 部分。