利用375对U盘进行扇区读写时遇到问题

请问我用单片机向375发送CMD_WR_UST_DATA7指令后,然后发送(或读取)完1+64个字节(1位数据长度字节),375是立刻请求中断还是等到单片机发送CMD_DISK_WR_GO(或CMD_DISK_RD_GO)指令后才请求中断?我现在无法通过这个扇区的读写过程,参考你们的例程才发现似乎存在问题,希望资深人士解答一下。另外我现在经常因为发送(读取)数据过程未结束造成375运行不正常。怎样立刻终止发送(读取)的过程?谢谢

要发送CMD_DISK_RD_GO 才可以继续产生中断.但是建议写数据不要中断,这样可能会造成U盘里面的数据损坏.或者有些数据写不进去.


多谢。我已经验证完成。另外再问个关于指令CMD_DISK_R_SENSE 的问题:

在你们的指令说明文档中写到:该命令检查USB存储设备的错误,CH375执行指令完成后向单片机请求中断,单片机可以读取中断状态作为该命令的操作状态。正常情况下操作状态是USB_INT_SUCCESS,可以由RD_USB_DATA命令获取数据后分析错误。 其中并没有提到该指令对CH375有什么复位或其他什么有效的错误清除操作,只是提供了对CH375操作状态的查询申请。但在例程中却被放入“清除U盘错误以便重试”的子程序中(以下为例程内容),我仔细看了下,除了发送这个指令和等待中断函数外没有任何其他有效操作了。对此我很迷茫,是不是你们的指令文档关于该指令的描述有所遗漏。另外,RD_USB_DATA获取的数据怎么分析和如何清除相应错误我也没找到相关的内容。希望资深人士能帮我解答一下,谢谢。

/* 清除U盘错误以便重试 */ void mClearError( void ) { mDelaymS( 10 ); /* 延时10mS */ CH375_WR_CMD_PORT( CMD_DISK_R_SENSE ); /* 检查USB存储器错误 */ mDelaymS( 10 ); /* 延时10mS */ mWaitInterrupt( ); /* 等待中断并获取状态 */ }


关于这个指令就比较麻烦了.而且根据不同的存储设备,比如U盘,SD卡读卡器等,返回的R_SENSE应答很多.所以在程序里面并没有去处理.其实每一条命令如果执行错误的话都要发这个命令去询问发生了什么错误.这个你可以具体参考UFI协议看看.不过一般来说没有必要去分析错误是什么.按照正常的操作流程去读的话也很少发生错误. 一般的U盘会在查询磁盘容量的时候容易出现错误,这时候发送R_SENSE命令后在去读一次就可以了,主要是因为刚开始U盘没有准备好.


了解了,多谢~


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