Uint8 USB_LbaRead(Uint8 *buffaddr,Uint32 lbaaddress,Uint8 sectornum) { Uint8 temp; Uint16 bufferlen=0;
USB_WRITE_CMD = USB_DISK_READ; DELAY_MS(20); USB_DATA_OPT = (lbaaddress>>0)&0xff; DELAY_MS(20); USB_DATA_OPT = (lbaaddress>>8)&0xff; DELAY_MS(20); USB_DATA_OPT = (lbaaddress>>16)&0xff; DELAY_MS(20); USB_DATA_OPT = (lbaaddress>>24)&0xff; DELAY_MS(20); USB_DATA_OPT = sectornum; DELAY_MS(20); while (1) { while(IOPIN0&USB_INIT_PORT); DELAY_MS(1000); USB_WRITE_CMD = USB_GET_STATUS; DELAY_MS(20); temp = USB_DATA_OPT; switch (temp) { case USB_INT_DISK_READ: USB_DataRead(&buffaddr[bufferlen]); bufferlen+=usbrvelen; USB_WRITE_CMD = USB_DISK_RD_GO; break; case USB_INT_SUCCESS: return 1; default : return 0; } } }
主要是延迟,一般都要加个20MS的延时,特别是中断的时候要加个1000MS的延时,这样才能读64个字节。再做个8次循环,呵呵 那个时间我调整过,只要少于立马读出来的全是00,加延迟数据就对。
不要告诉我用你们的那个文件库,因为你们这个库KEIL报错,格式不识别。
读写脉宽设置图: