读取扇区正常 但是写入扇区发生错误,写扇区错误时返回的状态码是1FH(USB存储器操作失败),弄了好几天也没弄明白,高手们帮看一下,部分代码如下: void CH375_Write_Cmd(unsigned char cmd) //写命令 { // CS=0; //强制片选,只有一个ch375,直接接地 A0=1; P2=cmd; WR=0; WR=1; // CS=1; A0=1; }
void CH375_Write_Dat(unsigned char dat) //写数据 { // CS=0; A0=0; P2=dat; WR=0; WR=1; // CS=1; A0=1; }
unsigned char CH375_Wait_Int() //等待中断信号,即int引脚 { INT=1; while(INT); CH375_Write_Cmd(CMD_GET_STATUS); //产生操作完成中断获取 return CH375_Read_Dat(); }
unsigned char CH375_WriteSector(unsigned long addr,unsigned char *pBuf) { unsigned char i=0,j; unsigned char status; CH375_Write_Cmd(CMD_DISK_WRITE); //磁盘写入命令 CH375_Write_Dat((unsigned char)addr); CH375_Write_Dat((unsigned char)(addr>>8)); CH375_Write_Dat((unsigned char)(addr>>16)); CH375_Write_Dat((unsigned char)(addr>>24)); //送入32位扇区地址,先送低字节 CH375_Write_Dat(1); //送入扇区数 for(i=0;i<8;i++) { status=CH375_Wait_Int(); if(status==USB_INT_DISK_WRITE) { CH375_Write_Cmd(CMD_WR_USB_DATA7); CH375_Write_Dat(64); for(j=0;j<64;j++) { CH375_Write_Dat(*pBuf); pBuf++; } CH375_Write_Cmd(CMD_DISK_WR_GO); } else { printf("xierushujufashengcuowu\n"); printf("%d\n",(int)status); return status; } } if(status==USB_INT_SUCCESS) //如果状态码为USB_INT_SUCCESS { printf("xieshanquchenggong\n"); return 0; } else { printf("xieshanqushibai\n"); //发生错误,返回状态码 return status; } }