WCH沁恒单片机
直播中

红旧衫

9年用户 752经验值
擅长:可编程逻辑 电源/新能源 制造/封装 EDA/IC设计
私信 关注
[问答]

ch375发送初始化usb设备的命令,读取到的中断为0x15是哪里出问题了吗

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=%#xn",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;

}



回帖(4)

施敏

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

王红

2022-7-14 11:46:11
设备检查了,已经连接,返回的是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 =%#xn",data);
if(data ==USB_INT_CONNECT)
{
//printf("data =%#xn",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;


}
举报

李婷

2022-7-14 11:46:23

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

胡卫伟

2022-7-14 11:46:30
通过查询INT#引脚的电平判断,当电平为低时,表示有中断发生。
您可以参考http://www.wch.cn/bbs/thread-65122-1.html这个帖子里面的第11个例程,提供了CH375操作U盘的的一些代码
举报

更多回帖

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