急!求助!ch375usb存储设备初始化

ch375,发送初始化usb设备的命令,读取到的中断是0x15,帮忙看看是不是命令使用的有问题,代码附上,任务紧急,希望大家帮下忙


/*****************************************

 *函数名  disk_init

 *函数功能 初始化usb存储设备

 *参数  文件描述符

 *返回值

 ****************************************/

void disk_init(int *fd)

{

 cmd = CMD_DISK_INIT;

 ioctl(*fd,WRITE_CMD_CH375,&cmd);

 delay(2);

 cmd = CMD_GET_STATUS;

 ioctl(*fd,WRITE_CMD_CH375,&cmd);

 delay(2);

 ioctl(*fd,READ_DATA_CH375,&data);

 printf("data=%#x\n",data);

 if(data == USB_INT_DISCONNECT)

 {

  printf("usb设备已断开\n");

 }

 else if(data == USB_INT_DISK_ERR||data==USB_INT_BUF_OVER)

 {

  printf("usb存储设备不被支持\n");

 }

 else if(data == USB_INT_SUCCESS)

 {

  printf("USB存储设备初始化成功\n");

 }

 else

 {

  printf("未知错误\n");

 }

 return;


}



您好,在进行U盘的初始化操作前要先检测是否有设备连接,当有设备连接并产生USB_INT_CONNECT(0X15)中断之后,再进行初始化等操作即可


设备检查了,已经连接,返回的是0x15

/*************************************

 *函数名 disk_connect_state

 *函数功能检测usb设备连接状态

 *参数文件描述符

 *返回值

 *************************************/

void  disk_connect_state(int *fd)

{

cmd = CMD_TEST_CONNECT;

ioctl(*fd,WRITE_CMD_CH375,&cmd);

delay(2000);

data = 0;

ioctl(*fd,READ_DATA_CH375,&data);

printf("data =%#x\n",data);

if(data ==USB_INT_CONNECT)

{

//printf("data =%#x\n",data);

printf("检测到usb设备连接\n");

memset(&data,0,sizeof(data));

//auto_setup(fd);

//break;

}

else if(data == USB_INT_DISCONNECT)

{

printf("检测到usb设备断开\n");

}

else

printf("未知错误\n");

return;


}



检测到设备后需要一个延时(可以设置250ms)等待U盘进入工作状态,然后对U盘进行初始化操作。

初始化操作中使用CMD_GET_STATUS命令最好不要直接读取状态,等待有中断再读取状态。


图片1.png

怎么判断是有中断,现在加了延时,但是每次读取到的固定是这些数循环


通过查询INT#引脚的电平判断,当电平为低时,表示有中断发生。

您可以参考/bbs/thread-65122-1.html这个帖子里面的第11个例程,提供了CH375操作U盘的的一些代码


只有登录才能回复,可以选择微信账号登录