CH376_RST = 1; /* 复位 */
delay_ms( 20 );
CH376_RST = 0; /* 禁止复位 */
delay_ms( 100 ); /* 延时100毫秒 */
while(mInitCH376Host( ) != USB_INT_SUCCESS){
}
/* 检查U盘是否连接,等待U盘插入,对于SD卡,可以由单片机直接查询SD卡座的插拔状态引脚 */
while ( CH376DiskConnect( ) != USB_INT_SUCCESS ){
delay_ms( 100 );
}
delay_ms( 200 ); /* 对于检测到USB设备的,最多等待100*50mS,主要针对有些MP3太慢,对于检测到USB设备
并且连接DISK_MOUNTED的,最多等待5*50mS,主要针对DiskReady */
for ( i = 0; i < 100; i ++ ){
delay_ms( 50 );
s = CH376DiskMount( ); /* 初始化磁盘并测试磁盘是否就绪 */
if ( s == USB_INT_SUCCESS ){ /* 准备好 */
break;
}else if ( s == ERR_DISK_DISCON ){ /* 检测到断开,重新检测并计时 */
break;
}
if ( CH376GetDiskStatus( ) >= DEF_DISK_MOUNTED && i >= 5 ){
break;} /* 有的U盘总是返回未准备好,不过可以忽略,只要其建立连接MOUNTED且尝试5*50mS */
}
if ( s == ERR_DISK_DISCON ){
/* 检测到断开,重新检测并计时 */
}
if ( CH376GetDiskStatus( ) < DEF_DISK_MOUNTED ){
/* 未知USB设备,例如USB键盘、打印机等 */
}
/* 获取出厂信息 */
i = CH376ReadBlock( buf ); /* 如果需要,可以读取数据块CH376_CMD_DATA.DiskMountInq,返回长度 */
if ( i == sizeof( INQUIRY_DATA ) ){ /* U盘的厂商和产品信息 */
buf[ i ] = 0;
}
s = CH376DiskQuery( (PUINT32)buf ); /* 查询磁盘剩余空间信息,扇区数 */
strcpy( (char *)TarName, "\\AAAAAAAA.TXT" ); /* 目标文件名 */
s = CH376FileCreatePath( TarName ); /* 新建多级目录下的文件,支持多级目录路径,输入缓冲区必须在RAM中 */
strcpy((char *)buf, "兄弟们那个加油哇 呵呵呵呵呵呵呵呵呵呵呵呵呵呵呵呵呵" );
s = CH376ByteWrite( buf, strlen((const char *)buf), NULL ); /* 以字节为单位向当前位置写入数据块 */
s = CH376FileClose( TRUE ); /* 关闭文件,对于字节读写建议自动更新文件长度 */
while ( CH376DiskConnect( ) == USB_INT_SUCCESS ){ /* 检查U盘是否连接,等待U盘拔出 */
delay_ms( 100 );
}
UINT8 mInitCH376Host( void )
{
UINT8 res;
DelayMS(50); /* 1.上电延时50mS */
CH376_PORT_INIT( ); /* 取消片选 + 上拉中断 */
xWriteCH376Cmd( CMD11_CHECK_EXIST ); /* 2.发送命令CMD11_CHECK_EXIST(0x06) */
xWriteCH376Data( 0x55 ); /* 2.发送数据0x55 */
res = xReadCH376Data( ); /* 2.读取返回数据 */
xEndCH376Cmd( );
if ( res != 0xAA ){ /* 2.正确返回0xAA,其他错误。 */
return( ERR_USB_UNKNOWN ); /* 2.检测硬件连接、复位、晶振等 */
}
xWriteCH376Cmd( CMD11_SET_USB_MODE ); /* 3.发送命令0x15,即设备USB工作模式。 */
xWriteCH376Data( 0x06 ); /* 3.发送数据0x06,即U盘模式。0x03为SD卡模式。 */
DelayUS(20);
res = xReadCH376Data( );
xEndCH376Cmd( );
if ( res == CMD_RET_SUCCESS ){
return( USB_INT_SUCCESS ); /* 3.返回0x51,USB事务或者传输操作成功 */
}else {
return( ERR_USB_UNKNOWN ); /* 3.设置模式错误 */
}
}
CH376S芯片,硬件SPI连接,软件CS片选,使用INT#引脚查询。初始化mInitCH376Host函数返回值是正确的,
但是,CH376DiskConnect()不管U盘插入还是拔出,返回值都是0x14,即USB_INT_SUCCESS。插入U盘不是应该0x15,拔出是0x16吗?这是为什么?