CH376S怎么读取U盘厂商信息

感觉资料里的程序有错误


UINT8CH376ReadBlock( PUINT8 buf )  /* 从当前主机端点的接收缓冲区读取数据块,返回长度 */

{

UINT8s, l;

xWriteCH376Cmd( CMD01_RD_USB_DATA0 );

s = l = xReadCH376Data( );  /* 长度 */

if ( l ) {

do {

*buf = xReadCH376Data( );

buf ++;

} while ( -- l );

}

xEndCH376Cmd( );

return( s );

});

//}




s = CH376ReadBlock( buf );  /* 如果需要,可以读取数据块CH376_CMD_DATA.DiskMountInq,返回长度 */

//if ( s == sizeof( INQUIRY_DATA ) ) {  /* U盘的厂商和产品信息 */

//buf[ s ] = 0;

//printf( "UdiskInfo: %s\n", ((P_INQUIRY_DATA)buf) -> VendorIdStr );

//}


你可以看一下CH376_CMD_DATA这个结构体,在DISK_MOUNT命令之后返回 INQUIRY命令的返回数据。所以你可以用CMD01_RD_USB_DATA0读取返回的数据,U盘厂商信息在INQUIRY_DATA这个结构体。

INQUIRY_DATA    DiskMountInq;            /* 返回: INQUIRY命令的返回数据 */
 /* CMD0H_DISK_MOUNT: 初始化磁盘并测试磁盘是否就绪,首次执行时 */


返回值都是0X14怎么回事,用的就是资料里的程序


之前检查设备是否准备好时,U盘一直返回的是为准备好,是通过判断跳出循环的。有影响吗


CH376ReadBlock这个函数的返回值是长度,你可以进入这个函数里面查看一下返回值。


我一步一步试了一下

CH376S芯片的初始化通过

检测U盘是否连接也通过了

但是发CMD0H_DISK_MOUNT指令后,一直没有中断产生,这是怎么回事?是硬件问题吗?


你首先检测U盘连接。看一下中断脚的状态(插入U盘INT拉低,调用获取中断状态命令(0x22),INT拉高。调用0x30命令,INT拉低,调用获取中断状态命令(0x22),INT拉高。)。然后使用DISK_MOUNT(0x31)操作也是一样。你可以查看一下INT脚的状态。


U盘的问题,换了个,读出来了


顺便提一个问题,检测u盘是否插入,有20%的失败率,怎么解决?u盘的电源电压稳定,程序上怎么改进


解决了,单片机起电有问题


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