我使用的
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;
}