CMD_RD_USB_DATA0 怎么用

ch376 我发出指令CMD_DISK_CAPACITY后 引起单片机中断 读出中断状态为(YSB_INT_SUCCESS)14h 成功。之后发出指令 CMD_RD_USB_DATA0 后读取数据为0 。这是为什么。在U盘上创建文件是可以的。

查询磁盘容量参考如下函数: UINT8 CH376DiskCapacity( PUINT32 DiskCap ) /* 查询磁盘物理容量,扇区数 */ { UINT8 s; s = CH376SendCmdWaitInt( CMD0H_DISK_CAPACITY ); if ( s == USB_INT_SUCCESS ) { /* 参考CH376INC.H文件中CH376_CMD_DATA结构的DiskCapacity */ xWriteCH376Cmd( CMD01_RD_USB_DATA0 ); xReadCH376Data( ); /* 长度总是sizeof(CH376_CMD_DATA.DiskCapacity) */ *DiskCap = CH376Read32bitDat( ); /* CH376_CMD_DATA.DiskCapacity.mDiskSizeSec,从CH376芯片读取32位的数据并结束命令 */ } else *DiskCap = 0; return( s ); } CMD_RD_USB_DATA0正确发送之后会返回数据长度和32为的磁盘容量的扇区数。


还是不行 麻烦帮看一下我的程序那里会有问题: #define rwzl XBYTE[0X0100] /*指令读写端口地址*/ #define rwdata XBYTE[0X0000] /*数据读写端口地址*/ sbit Pcs = P1^0; /*并口的片先信号。低电平有效*/ sbit RSTI = P1^1; /*硬件复位信号,高电平有效。*/

error_daima = main_check_ch376();/*检测ch376是否工作正常*/

Initialization();/*初始化USB工作模式为6*/

rwzl = DISK_CONNECT;/*检测磁盘是否连接*/ DelayMs(250);

rwzl = DISK_MOUNT; /*初始化磁盘并测试磁盘是否就绪*/ DelayMs(250);

rwzl = DISK_CAPACITY;/*查询物理磁盘容量*/ DelayMs(250); /*以上步骤都能正常,该产生中断的指令都会引起中断,而且在中断子程序读取中断值都能成功 USB_INT_SUCCESS 即14h*/ rwzl = RD_USB_DATA0; temp = rwdata; /*读出的数据为零,不懂为什么*/

for(i=0;i { aa[i] = rwdata; }


发送RD_USB_DATA0命令是不需要等待中断状态的,直接读出9字节数据即可。


rwzl = DISK_CAPACITY;/*查询物理磁盘容量*/ 这指令不是会引起中断吗 引起中断之后在中断子程序里使用读取中断状态值 (rwzl = GET_STATUS)来取消中断请求后 在主程序里才能再使用 rwzl = RD_USB_DATA0;指令来读取 物理磁盘容量的数据吗。 要不,读取物理磁盘容量的数据要怎么来读取呢?还请指教。


DISK_CAPACITY命令会产生中断,只有中断状态正确才能发送RD_USB_DATA0命令读取数据。但是RD_USB_DATA0命令是不会产生中断的。


是啊 我就是在发出DISK_CAPACITY 产生中断后 在中断里读取的中断状态值为 14h (USB_INT_SUCCESS)后。回到主程序再使用指令RD_USB_DATA0 后 紧跟着就用 读取数据指令 去读取数据的(如 temp = rwdata)。没有说还要等待中断后再去读数据。就是这样读不到数据 ,所以才感到奇怪?? rwzl = RD_USB_DATA0; temp = rwdata; /*这是紧跟着RD_USB_DATA0指令来读取数据的,可是读出的数据为零,不懂为什么*/

for(i=0;i { aa = rwdata; }


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