总线技术|接口技术
直播中

jjll652

8年用户 1319经验值
私信 关注

在Linux系统上使用cyusb_linux_1.0.5,CAN无法通过FX3读取FPGA上的数据怎么解决?

我在 Linux 系统上使用 cyusb_linux_1.0.5,并希望实现向设备发送和从设备接收数据的功能。 在将特定的固件映像导入 RAM 后,我使用 cyusb_bulk_transfer 函数如下:
cyusb_handle *h1 = NULL;
    无符号      字符 buf [ 8 ];
    buf [ 0 ]  = 0x01 ;
    buf [ 1 ]  = 0 x00 ;
    buf [ 2 ]  = 0x07 ;
    buf [ 3 ]  = 0x01 ;
   
    buf [ 4 ]  = 0 x00 ;
    buf [ 5 ]  = 0 x00 ;
    buf [ 6 ]  = 0 x13 ;
    buf [ 7 ]  = 0x01 ;
    已传输的 整 数 = 512;
    整数 超时 = 0;
    无符号 字符 数据[1024];
    int o;
    整数 i;
    int t ransfered 2 = 5 12 ;


printf (" ------------cyusb_bulk_ transfer out—n); "
    o = cyusb_bulk_transfer(h1、0x0 1、buf、sizeof( buf)、已转移、1000);  
    printf ( 发送到设备的"字节 = %d n "; ,已传输 );
    如果 (o == 0 ) {
            printf (" ok n "; );
            printf (" %s n "; ,buf);
//返回 0;
}
    其他 {
            printf(" 传输失败! n "; );
//返回 0;
}
   
    printf (" ------------cyusb_bulk_transfer in---------------  n); ";
    i = cyusb_bulk_tr ansfer (h1、0x8 1、数据、sizeof(数据)、 transfered2、1000);  
    printf ( 从设备读取的"字节 = %d n "; ,tr ansfered2);
    如果 (i == 0 ) {
            printf (" ok n "; );
            printf (" %s n "; , 数据);
//返回 0;
}
    其他 {
            printf(" 传输失败! n "; );
            printf (" %d n "; , i );
            printf (" %s n "; , 数据);
//返回 0;
}
结果如下:
----------cyusb_bulk_transfer out------------------发送到设备的字节 = 8 ok


----------cyusb_bulk_transfer in------------从设备读取的字节 = 0 传输失败!


-7

我已成功将数据发送到 FPGA,但我 CAN无法通过 FX3 读取 FPGA 上的数据。 顺便说一句,设备功能:向设备发送任何命令都不会返回值,但是开机后 FPGA 会自动生成我需要的信息,而且它会一直存在! 为什么 CAN不通过函数读取这些数据cyusb_bulk_transfer?等待一些建议。

回帖(1)

张览秀

2024-2-27 15:42:56
如果在Linux系统上使用cyusb_linux_1.0.5时,CAN无法通过FX3读取FPGA上的数据,可以尝试以下解决方法:

1. 首先,确保你的硬件连接正确,包括正确连接CAN总线和FPGA设备。

2. 确保你的固件正确加载到FX3设备的RAM中。可以通过检查cyusb_load_firmware函数的返回值来确认固件是否成功加载。

3. 确保你的CAN总线配置正确,包括波特率、帧格式等参数设置。可以使用cyusb_control_transfer函数发送适当的控制命令来配置CAN总线。

4. 在使用cyusb_bulk_transfer函数进行数据传输之前,确保你正确地打开了cyusb设备。可以使用cyusb_open函数打开设备,并检查返回值以确保设备成功打开。

5. 确保你正确的设置了传输的数据缓冲区。在你的代码中,你可以确保buf数组中包含了要发送/接收的数据。

6. 检查cyusb_bulk_transfer函数的返回值,以确定传输是否成功。如果函数返回负值,则表示传输失败,可以通过调用cyusb_get_error_string函数获取错误的详细描述。

7. 如果上述方法都没有解决问题,你可以尝试使用其它方法进行数据传输,如使用cyusb_bulk_transfer函数进行批量传输,或者使用cyusb_control_transfer函数进行控制传输。

综上所述,解决CAN无法通过FX3读取FPGA上的数据的问题需要逐步排查。通过检查硬件连接、固件加载、CAN总线配置、设备打开、数据缓冲区设置以及传输结果等方面,可以找到并解决问题。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分