0

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

4

2 回答 2

1

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

从以下网址下载“免费虚拟 COM 端口模拟器”:http: //freevirtualserialports.com/
我将它安装在 Windows 10 中,它正在工作(作为试用版)。

添加一对两个串口:
在此处输入图像描述

执行以下 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 端口软件。

于 2016-07-29T21:08:46.217 回答
0

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

您似乎在 Windows 操作系统上运行,所以我会推荐一个完全免费的模拟器(不是试用版)。对于 Windows,我使用com0com Null-modem 模拟器(来自SourceForge)。

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


设置:

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

在此处输入图像描述

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

在此处输入图像描述


测试 MATLAB -> 终端

您已准备好将 Ascii 字符或二进制值从 MATLAB 发送到您的设备。下面的动画向您展示了这两个选项的示例:
您可以单击图片以查看其全尺寸。它正在循环运行,因此您可能需要等到它从头开始重新启动。

在此处输入图像描述

测试终端 -> MATLAB

下面的动画向您展示了如何以另一种方式测试通信: 在此处输入图像描述

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


笔记:

  • 如果您还有另一个更常用的终端程序,它的工作方式也一样。
  • 如果RealTerm选项不适合您,或者您想处理来自 Matlab 的通信双方,那么您可以使用 Rotem 在他的第一个答案中提供的代码。只需安装com0com但忽略所有RealTerm部分。
于 2016-07-30T09:49:35.270 回答