SafeRemoveDisk安全删除u盘

工程师你好,请教不用程序库,自己编程解析u盘,那么如何安全删除u盘?[Emot]27[/Emot]

http://wch.cn/download/list.asp?id=32的EXAM12的思想,修改前必须了解USB MassStorage和SCSI规范


先感谢你帮助,调函数SafeRemoveDisk( )是做了什么操作呢?可不可以简单介绍一下呢?都停止了什么操作呢?得到你的帮助不胜感激


先是初始化磁盘,对U盘重新枚举,然后设置配置为0,就是取消配置,U盘不工作了


奥,谢谢你的帮助,还想问一下,ch375读u盘程序和ch376读sd程序可以通用吗?需要改写那些地方实现通用呢?


基本上差不多,SD卡的检测需要你的单片机做,SD卡只能以扇区的方式读写


更正:基本上差不多,SD卡的检测需要你的单片机做,SD卡只能以“字节”的方式读写


你好,下面是我的ch375读U盘一个扇区的函数,我想改ch376加读SD卡,那么要用ch376读SD卡,这段程序需要改哪些呢,SD卡支持字节读写那么一次最多能读多少个字节呢?可以像这样一次读64字节吗?

unsigned char CH375_Read_Sector(unsigned long addr,unsigned char *pBuf)//读一个扇区 { unsigned char i=0,j=0,k=0; unsigned char status,len; unsigned int counter=0; for(k=0;k<4;k++) { counter=0; CH375_Write_Cmd(CMD_DISK_READ);//磁盘读取命令 CH375_Write_Dat(addr); CH375_Write_Dat(addr>>8); CH375_Write_Dat(addr>>16); CH375_Write_Dat(addr>>24); //送入32位扇区地址 CH375_Write_Dat(1); //送入扇区数

for(i=0;i<8;i++) //CH375的数据缓冲区为64字节,所以读取一个扇区要读8次 { status=CH375_Wait_Int(); //等待CH375中断信号,读取状态码 if(status==USB_INT_DISK_READ) //如果状态码是USB_INT_DISK_READ,就开始读取数据,否则发生错误 { CH375_Write_Cmd(CMD_RD_USB_DATA); //送入读数据的命令

len=CH375_Read_Dat(); //先读到的是数据的长度 do //把随后CH375送过来的数据放入pBuf中 { pBuf[counter++]=CH375_Read_Dat(); }while(--len); CH375_Write_Cmd(CMD_DISK_RD_GO); //送入继续读数据的命令,CH375会将下面64个字节放入缓冲区,等待单片机来读 } else { return 1; //发生错误,返回状态码 } }

status=CH375_Wait_Int(); //读取8次以后,最后一次送入继续读数据的命令,等待CH375产生中断信号,并读取状态 if(status==USB_INT_SUCCESS) //如果状态码为USB_INT_SUCCESS,说明读取扇区成功,返回0 { return 0; } else if(status==USB_INT_DISK_ERR ) { delay(1000); CH375_Write_Cmd(CMD_DISK_R_SENSE); /* 获取USB存储器的容量 */ status=CH375_Wait_Int(); /* 等待中断并获取状态 */ if(status!=USB_INT_SUCCESS) /* 出现错误 */ return 1; } } }


CH376芯片按照字节方式读取数据的话一次最多可以读取65535个字节,只要你的RAM有这么多。其他操作SD卡和U盘是一样的。


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