我使用的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的测试程序也无响应
这里我插入了TI DLP模块,可以看到有Cypress的USB,但是SDK里的测试程序还有我自己编写的代码都无结果,和没有插入USB-i2c设备一样。我上Zynq开发板 petalinux跑也是一样的结果
是我编译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的回复
已解决! 转到解答。
我刚刚测试突然可以了,我2.0和3.0的口换了一下。但是之前我也测试过2.0的口。
我可以运行CyUSBSerialTestUtility可以看到我的设备了,但是我程序访问还是不行,可能要改动一下设备号之类的
你好,我搜索过。论坛里好像没有说关于使用CyUSBSerialTestUtility 检索不到设备的解决方法。有一个讨论提到他也使用TI DLP3010EVM,但是他可以正常访问I2C,运行CyUSBSerialTestUtility 。其他讨论提问的回答主要也是要看VID PID有没有之类的,但是我用lsusb命令可以看到设备,运行CyUSBSerialTestUtility 就没有任何设备
我刚刚测试突然可以了,我2.0和3.0的口换了一下。但是之前我也测试过2.0的口。
我可以运行CyUSBSerialTestUtility可以看到我的设备了,但是我程序访问还是不行,可能要改动一下设备号之类的