我在ISE设计工具包上模拟和合成了Verilog代码。我有一个FPGA spartan 6器件用于实现。但是当我将设备连接到PC时,设备存在问题(可能是电源问题),导致设备在任何COM端口都不可用。所以我想检查一下我通过设备进行串行通信的Matlab代码是否能完成预期的工作。所以我需要一种方法来测试通过任何COM端口的串行通信,而无需将串行com设备连接到PC。有没有这样的方法,我可以从Matlab到COM端口的Tx Rx串行数据?任何软件或任何其他方法将受到高度赞赏:)
答案 0 :(得分:1)
我找到了一种使用虚拟串行端口测试Matlab串行通信的方法。
从http://freevirtualserialports.com/下载“免费软件虚拟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端口软件。
答案 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
对,但你现在可以忽略它。)
对于 RealTerm ,一旦安装(不要忘记在设置结束时激活服务器注册,默认情况下应该勾选),它将会看起来如下。保留所有默认选项,只需设置端口号和波特率(如果需要更改)。
您已准备好将MATLAB中的Ascii字符或二进制值发送到您的设备。下面的动画显示了两个选项的示例:
您可以点击图片查看完整尺寸。它在循环中运行,所以你可能要等到它从头重新开始。
当您发送Ascii字符并希望在MATLAB上使用[CR]
格式说明符时,请不要忘记在 RealTerm 上勾选[LF]
'%s'
,因为它需要这些字符来检测字符串的结尾。