linux下使用cyusbserial SDK错误

公告

大中华汽车电子生态圈社区并入开发者社区- 更多资讯点击此

Tip / 登入 to post questions, reply, level up, and achieve exciting badges. Know more

cross mob
lock attach
Attachments are accessible only for community members.
YuHa_4831976
Level 1
Level 1
First question asked First reply posted First solution authored

我使用的TI DLP3010EVM模块是通过CY7C65215 芯片进行控制的,我可以在win环境下正常使用TI DLP的调试软件或者使用cyusbserial SDK的vs程序完成对设备的控制和访问,但是在Ubuntu14.04和petalinux下编译好cyusbserial SDK生成so库文件,调用API会出错。

我一开始编译cyusbserial SDK使用了libusb版本是1.0.23,后来改成SDK里的1.0.9但是还是一样的结果。我执行cyusbserial SDK的测试程序也无响应

QQ截图20201230211147.png

这里我插入了TI DLP模块,可以看到有Cypress的USB,但是SDK里的测试程序还有我自己编写的代码都无结果,和没有插入USB-i2c设备一样。我上Zynq开发板 petalinux跑也是一样的结果

QQ截图20201230213138.png

是我编译so库出问题了吗?我x86 linux下生成so文件是在SDK的makefile路径下直接make的;arm-linux编译so文件我修改了makefile,如下

————————————————————————

我现在可以正常运行CyUSBSerialTestUtility了,但是我使用来自TI的cypress 程序,使用到了CySetGpioValue  函数进行操作,这个函数会返回CY_ERROR_REQUEST_FAILED ,API手册注释到on error when request is failed by USB Serial device 但没给解决方法。

#define REQUEST_I2C_ACCESS_GPIO    5

#define I2C_ACCESS_GRANTED_GPIO    6

#define START_I2C_TRANSACTION_GPIO 9

#define I2C_CLOCK_FREQUENCY_HZ     100000

#define DLP_I2C_SLAVE_ADDRESS      (0X36 >> 1)

#define I2C_TIMEOUT_MILLISECONDS   500

bool CYPRESS_I2C_GetCyGpio(uint8_t GpioNum, uint8_t* Value)

{

    return CyGetGpioValue(s_Handle, GpioNum, Value) == CY_SUCCESS;

}

bool CPRESS_I2C_SetCyGpio(uint8_t GpioNum, uint8_t Value)

{

    return CySetGpioValue(s_Handle, GpioNum, Value) == CY_SUCCESS;

}

bool CYPRESS_I2C_RequestI2CBusAccess()

{

    uint8_t Value     = 0;

    time_t  StartTime = time(NULL);

    if (!CYPRESS_I2C_SetCyGpio(REQUEST_I2C_ACCESS_GPIO, 1)){

     printf("Request I2C Start Error \n");

     return false;

    }

    while ((time(NULL) - StartTime) < I2C_TIMEOUT_MILLISECONDS){

        if (!CYPRESS_I2C_GetCyGpio(I2C_ACCESS_GRANTED_GPIO, &Value)){

            break;

        }

        if (Value == 1){

            if (!CYPRESS_I2C_SetCyGpio(START_I2C_TRANSACTION_GPIO, 1)){

                break;

            }

            CyI2cReset(s_Handle, false);

            CyI2cReset(s_Handle, true);

            return true;

        }

    }

printf("Request I2C End Error \n");

return false;

}

附件是我qt project

毕业将近,这个问题对我很紧迫,希望收到Cypress的回复

0 点赞
1 解答

我刚刚测试突然可以了,我2.0和3.0的口换了一下。但是之前我也测试过2.0的口。

我可以运行CyUSBSerialTestUtility可以看到我的设备了,但是我程序访问还是不行,可能要改动一下设备号之类的

在原帖中查看解决方案

0 点赞
3 回复数
Roy_Liu
Moderator
Moderator
Moderator
5 comments on KBA First comment on KBA 10 questions asked

有没有尝试先在此论坛里搜素一下啊

Roy Liu
0 点赞
YuHa_4831976
Level 1
Level 1
First question asked First reply posted First solution authored

你好,我搜索过。论坛里好像没有说关于使用CyUSBSerialTestUtility 检索不到设备的解决方法。有一个讨论提到他也使用TI DLP3010EVM,但是他可以正常访问I2C,运行CyUSBSerialTestUtility 。其他讨论提问的回答主要也是要看VID PID有没有之类的,但是我用lsusb命令可以看到设备,运行CyUSBSerialTestUtility 就没有任何设备

0 点赞

我刚刚测试突然可以了,我2.0和3.0的口换了一下。但是之前我也测试过2.0的口。

我可以运行CyUSBSerialTestUtility可以看到我的设备了,但是我程序访问还是不行,可能要改动一下设备号之类的

0 点赞