普及版库CH375FAT.ZIP中CH375.c中的读扇区的函数:
/* 从U盘中读取多个扇区的数据块到缓冲区中 */ unsigned char RBC_Read(unsigned long iLbaStart, unsigned char iSectorCount,unsigned char *mBufferPoint) /* iLbaStart 是读取的线起始性扇区号, iSectorCount 是读取的扇区数 */ { unsigned char mIntStatus; unsigned int mBlockCount; unsigned char mLength; CH375_CMD_PORT_d_out(CMD_DISK_READ); /* 从USB存储器读数据块 */ CH375_DAT_PORT_d_out((unsigned char)iLbaStart); /* LBA的最低8位 */ CH375_DAT_PORT_d_out ((unsigned char)( iLbaStart >> 8 )); CH375_DAT_PORT_d_out((unsigned char)( iLbaStart >> 16 )); CH375_DAT_PORT_d_out((unsigned char)( iLbaStart >> 24 )); /* LBA的最高8位 */ CH375_DAT_PORT_d_out( iSectorCount); /* 扇区数 */ // mBufferPoint = &DATA_BUFFER; /* 指向缓冲区起始地址 */ for ( mBlockCount = iSectorCount * CH375_BLK_PER_SEC; mBlockCount != 0; mBlockCount -- ) { /* 数据块计数 */ mIntStatus = mWaitInterrupt( ); /* 等待中断并获取状态 */ if ( mIntStatus == USB_INT_DISK_READ ) { /* USB存储器读数据块,请求数据读出 */ CH375_CMD_PORT_d_out(CMD_RD_USB_DATA); /* 从CH375缓冲区读取数据块 */ mLength = CH375_DAT_PORT_in(); /* 后续数据的长度 */ /* 通常数据长度是64,有些U盘要求单片机必须在2mS之内取走64字节数据,否则U盘可能数据丢失 */ /* 建议优化下面的循环程序,确保单片机在1mS之内完成64字节的数据传输 */ if ( mLength ) { /* 根据长度读取数据 */ do { // 对于C51,这个DO+WHILE结构效率高,速度快 *mBufferPoint = CH375_DAT_PORT_in(); /* 读出数据并保存 */ mBufferPoint ++; } while ( -- mLength ); } CH375_CMD_PORT_d_out( CMD_DISK_RD_GO); /* 继续执行USB存储器的读操作 */ } else break; /* 返回错误状态 */ } if ( mBlockCount == 0 ) mIntStatus = mWaitInterrupt( ); /* 等待中断并获取状态 */ if ( mIntStatus == USB_INT_SUCCESS ) return 1; /* 操作成功 */ else return 0; /* 操作失败 */ }
还有这两个函数:
unsigned long SwapINT32(unsigned long dData) { dData = (dData&0xff)<<24|(dData&0xff00)<<8|(dData&0xff000000)>>24|(dData&0xff0000)>>8; return dData; }
unsigned int SwapINT16(unsigned int dData) { dData = (dData&0xff00)>>8|(dData&0x00ff)<<8; return dData; }
请教下i、m、d这些变量前缀是什么含义吗? 变量前缀还有什么通用的标准吗?