ch375紧急求救

我在做u盘读写项目时,参考的网上的例子,我明明写了512字节,但在u盘上看到的是增加了256k的空间,怎么会事? /************************************************************************ 将缓冲区中的多个扇区的数据块写入U盘 iLbaStart 是写入的线起始性扇区号, iSectorCount 是写入的扇区数 返回0则成功,否则返回错误代码 ************************************************************************/ unsigned char mWriteSector( unsigned long iLbaStart, unsigned char iSectorCount ) { unsigned char mIntStatus;//操作状态 unsigned char *mBufferPoint;//指向缓冲区的指针 unsigned int mBlockCount; unsigned char mLength; SendCMD( CMD_DISK_WRITE ); /* 向USB存储器写数据块 */ SendDAT( (unsigned char)iLbaStart ); /* LBA的最低8位 */ SendDAT( (unsigned char)( iLbaStart >> 8 ) ); SendDAT( (unsigned char)( iLbaStart >> 16 ) ); SendDAT( (unsigned char)( iLbaStart >> 24 ) ); /* LBA的最高8位 */ SendDAT( iSectorCount ); /* 扇区数 */ mBufferPoint = wUSBuffer; /* 指向缓冲区起始地址 */ for ( mBlockCount = iSectorCount * CH375_BLK_PER_SEC; mBlockCount != 0; mBlockCount -- ) { /* 数据块计数 */ while(P1IN&0x01==0x01);/////////////////////////// mIntStatus = WRC375(CMD_GET_STATUS); if ( mIntStatus == USB_INT_DISK_WRITE ) { /* USB存储器写数据块,请求数据写入 */ SendCMD( CMD_WR_USB_DATA7 ); /* 向CH375缓冲区写入数据块 */ mLength = CH375_BLOCK_SIZE; SendDAT( mLength ); /* 后续数据的长度 */ while ( mLength ) { /* 根据长度写入数据 */ SendDAT( *mBufferPoint ); /* 将数据写入 */ mBufferPoint ++; mLength --; } SendCMD( CMD_DISK_WR_GO ); /* 继续执行USB存储器的写操作 */ } else break; /* 返回错误状态 */ } if ( mBlockCount == 0 ) { while(P1IN&0x01==0x01); mIntStatus = WRC375(CMD_GET_STATUS); /* 等待中断并获取状态 */ if ( mIntStatus == USB_INT_SUCCESS ) return( 0 ); /* 操作成功 */ } return( mIntStatus ); /* 操作失败 */ }

你是采用直接操作物理扇区的例子吧?直接写扇区的话,其实只是将数据写到物理扇区而已,并不会减少U盘的容量。你写的是那个扇区,可能将U盘的某些重要扇区(如DBR,FAT表等)修改了。


是啊,我只是想把数据写到u盘中,在把他读出来,写入的和读出的是一样的,就是容量不对。那我该怎么办啊?我不想建立文件写入,难道就不行吗?


我读写的是第100扇区


其实你直接操作物理扇区的话,就象操作其他存储芯片如65256一样,只是对物理扇区进行数据读写,并不涉及到插到电脑上查看U盘容量的变化,也就是说你不用关心这个。


经你这么解释我明白了,谢谢。现在还有几个问题 1、我要是这样用,是不是有些扇区不能用?用了的话可能破坏u盘? 2、我实测了一下,当往u盘写1M字节,用时1分钟,但是往外读1M字节用时15秒,这是怎么回事? 3、以这样的速度读写肯定是很慢的,如果我用文件的方式读写u盘,速度会不会提高很快?我的电路图不是按照官方网站上的推荐接的,是不是就不能用官方提供的文件库?


补充一点:我的单片机与375通信采用了1M的波特率


1、是的,比如U盘的DBR表,一般为第0个扇区。 2、写的速度要比读的速度的慢,这是由于U盘本身的物理特性引起的,写的话涉及到数据的保存、块的擦除等操作; 3、你可以一次读写多个扇区,一般U盘以16K为块进行擦除的,你可以一次操作32个扇区。如果采用文件系统的话,由于要处理文件系统相关东西,速度会比这个还慢。另外采用并口通信比串口通信要快些。


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