📄 disk.c
字号:
//#include "ezusb.h"
//#include "ezregs.h"
#include "host_811.h"
//////////////////////////////////////////////////////////////////////////////
extern EZUSB_Delay(int i);
//extern unsigned char Read_Bytes64 ( unsigned int Address );//, unsigned char DataBuff [] );
extern unsigned char i2c_read(unsigned int address);
//#define Ram_Size 3072
//extern xdata unsigned char Ram3K [ Ram_Size ];
extern xdata BYTE DBUF[512];
extern xdata BYTE TRBUF[52];
extern BYTE disk_out;
extern BYTE disk_in;
extern void kick_watchdog();
int read_disk(WORD LB_addrH,WORD LB_addrL,WORD TR_length) //读取U DISK中的信息(一个扇区一读)
{ BYTE i;
TRBUF[0]=0x55;
TRBUF[1]=0x53;
TRBUF[2]=0x42;
TRBUF[3]=0x43;
TRBUF[4]=0x28;
TRBUF[5]=0xE8;
TRBUF[6]=0x31;
TRBUF[7]=0xFE;
TRBUF[8]=0x00;
TRBUF[9]=0x02;
TRBUF[10]=0x00;
TRBUF[11]=0x00;
TRBUF[12]=0x80;
TRBUF[13]=0x00;
TRBUF[14]=0x0A;
TRBUF[0+15]=0x28;
TRBUF[1+15]=0;
TRBUF[2+15]=(BYTE)(LB_addrH>>16);
TRBUF[3+15]=(BYTE)(LB_addrH);
TRBUF[4+15]=(BYTE)(LB_addrL>>8);
TRBUF[5+15]=(BYTE)(LB_addrL);
TRBUF[6+15]=0;
TRBUF[7+15]=(BYTE)(TR_length>>8);
TRBUF[8+15]=(BYTE)(TR_length);
TRBUF[9+15]=0;
TRBUF[10+15]=0;
TRBUF[11+15]=0;
for(i=26;i<32;i++) TRBUF[i]=0;
// kick_watchdog(); //12.23 updated by Bian Zhuoyue
if( !usbXfer(1,disk_out,PID_OUT,0,64,31,TRBUF))
return(0);
if( !usbXfer(1,disk_in,PID_IN,0,64,512,DBUF))
return(0);
if( !usbXfer(1,disk_in,PID_IN,0,64,13,TRBUF))
return(0);
return(1);
}
int write_disk(WORD LB_addrH,WORD LB_addrL,WORD TR_length) //写入U DISK信息(一个扇区一写)
{
BYTE i,j,detime;
//detime = 200;
switch ( TR_length )
{
case 0: return 0;
case 1: detime = 200;
break;
default: detime = 100;
}
TRBUF[0]=0x55;
TRBUF[1]=0x53;
TRBUF[2]=0x42;
TRBUF[3]=0x43;
TRBUF[4]=0x28;
TRBUF[5]=0xE8;
TRBUF[6]=0x31;
TRBUF[7]=0xFE;
TRBUF[8]=0x00;
TRBUF[9]=0x02;
TRBUF[10]=0x00;
TRBUF[11]=0x00;
TRBUF[12]=0x00;
TRBUF[13]=0x00;
TRBUF[14]=0x0A;
TRBUF[0+15]=0x2A;
TRBUF[1+15]=0;
TRBUF[2+15]=(BYTE)(LB_addrH>>8);
TRBUF[3+15]=(BYTE)(LB_addrH);
TRBUF[4+15]=(BYTE)(LB_addrL>>8);
TRBUF[5+15]=(BYTE)(LB_addrL);
TRBUF[6+15]=0;
TRBUF[7+15]=(BYTE)(TR_length>>8);
TRBUF[8+15]=(BYTE)(TR_length);
TRBUF[9+15]=0;
TRBUF[10+15]=0;
TRBUF[11+15]=0;
for(i=26;i<32;i++) TRBUF[i]=0;
if( !usbXfer(1,disk_out,PID_OUT,0,64,31,TRBUF))
return(0);
EZUSB_Delay(detime);
for(j=0;j<TR_length;j++)
{
for(i=0;i<8;i++)
{ if( !usbXfer(1,disk_out,PID_OUT,0,64,64,&DBUF[i*64]))
return(0);
EZUSB_Delay(detime);
kick_watchdog(); //12.23 updated by Bian Zhuoyue
}
}
if( !usbXfer(1,disk_in,PID_IN,0,64,13,TRBUF))
return(0);
return(1);
}
int write_disk8(WORD I2CLBA,WORD LB_addrH,WORD LB_addrL,WORD TR_length) //写入U DISK信息(八个扇区一写)主要写文件内容
{
BYTE j,k;
WORD I2Caddr,i;
TRBUF[0]=0x55;
TRBUF[1]=0x53;
TRBUF[2]=0x42;
TRBUF[3]=0x43;
TRBUF[4]=0x28;
TRBUF[5]=0xE8;
TRBUF[6]=0x31;
TRBUF[7]=0xFE;
TRBUF[8]=0x00;
TRBUF[9]=0x02;
TRBUF[10]=0x00;
TRBUF[11]=0x00;
TRBUF[12]=0x00;
TRBUF[13]=0x00;
TRBUF[14]=0x0A;
TRBUF[0+15]=0x2A;
TRBUF[1+15]=0;
TRBUF[2+15]=(BYTE)(LB_addrH>>8);
TRBUF[3+15]=(BYTE)(LB_addrH);
TRBUF[4+15]=(BYTE)(LB_addrL>>8);
TRBUF[5+15]=(BYTE)(LB_addrL);
TRBUF[6+15]=0;
TRBUF[7+15]=(BYTE)(TR_length>>8);
TRBUF[8+15]=(BYTE)(TR_length);
TRBUF[9+15]=0;
TRBUF[10+15]=0;
TRBUF[11+15]=0;
for(i=26;i<32;i++) TRBUF[i]=0;
I2Caddr=I2CLBA*512;
if( !usbXfer(1,disk_out,PID_OUT,0,64,31,TRBUF))
return(0);
for(j=0;j<TR_length;j++)
for(i=0;i<500;i+=64)
{ for(k=0;k<64;k++)
DBUF[i+k]=i2c_read(I2Caddr++);
if( !usbXfer(1,disk_out,PID_OUT,0,64,64,&DBUF[i]))
return(0);
}
if( !usbXfer(1,disk_in,PID_IN,0,64,13,TRBUF))
return(0);
return(1);
}
int med_rem(BYTE flag) //flag 1:允许建立、或删除文件和目录 0:不允许建立、或删除文件和目录
{ BYTE i;
TRBUF[0]=0x55;
TRBUF[1]=0x53;
TRBUF[2]=0x42;
TRBUF[3]=0x43;
TRBUF[4]=0x08;
TRBUF[5]=0x0A;
TRBUF[6]=0xE1;
TRBUF[7]=0xFC;
TRBUF[8]=0x00;
TRBUF[9]=0x00;
TRBUF[10]=0x00;
TRBUF[11]=0x00;
TRBUF[12]=0x00;
TRBUF[13]=0x00;
TRBUF[14]=0x06;
TRBUF[0+15]=0x1E;
TRBUF[1+15]=0;
TRBUF[2+15]=0;
TRBUF[3+15]=0;
TRBUF[4+15]=flag;
TRBUF[5+15]=0;
TRBUF[6+15]=0;
TRBUF[7+15]=0;
TRBUF[8+15]=0;
TRBUF[9+15]=0;
TRBUF[10+15]=0;
TRBUF[11+15]=0;
for(i=26;i<32;i++) TRBUF[i]=0;
if( !usbXfer(1,disk_out,PID_OUT,0,64,31,TRBUF))
return(0);
if( !usbXfer(1,disk_in,PID_IN,0,64,13,TRBUF))
return(0);
return(1);
}
/*
int unit_ready() //设备准备好了??(未使用)
{ BYTE i;
TRBUF[0]=0x55;
TRBUF[1]=0x53;
TRBUF[2]=0x42;
TRBUF[3]=0x43;
TRBUF[4]=0x08;
TRBUF[5]=0x0A;
TRBUF[6]=0xE1;
TRBUF[7]=0xFC;
TRBUF[8]=0x00;
TRBUF[9]=0x00;
TRBUF[10]=0x00;
TRBUF[11]=0x00;
TRBUF[12]=0x00;
TRBUF[13]=0x00;
TRBUF[14]=0x06;
TRBUF[0+15]=0;
TRBUF[1+15]=0;
TRBUF[2+15]=0;
TRBUF[3+15]=0;
TRBUF[4+15]=0;
TRBUF[5+15]=0;
TRBUF[6+15]=0;
TRBUF[7+15]=0;
TRBUF[8+15]=0;
TRBUF[9+15]=0;
TRBUF[10+15]=0;
TRBUF[11+15]=0;
for(i=26;i<32;i++) TRBUF[i]=0;
if( !usbXfer(1,disk_out,PID_OUT,0,64,31,TRBUF))
return(0);
if( !usbXfer(1,disk_in,PID_IN,0,64,13,TRBUF))
return(0);
return(1);
}
*/
int write_pro() //0: error; 1: not protect; 2: protect
{
BYTE i;
TRBUF[0]=0x55;
TRBUF[1]=0x53;
TRBUF[2]=0x42;
TRBUF[3]=0x43;
TRBUF[4]=0x08;
TRBUF[5]=0x0A;
TRBUF[6]=0xE1;
TRBUF[7]=0xFC;
TRBUF[8]=0xC0;
TRBUF[9]=0x00;
TRBUF[10]=0x00;
TRBUF[11]=0x00;
TRBUF[12]=0x80;
TRBUF[13]=0x00;
TRBUF[14]=0x06;
TRBUF[0+15]=0x1A;
TRBUF[1+15]=0x00;
TRBUF[2+15]=0x1C;
TRBUF[3+15]=0x00;
TRBUF[4+15]=0xC0;
TRBUF[5+15]=0x00;
TRBUF[6+15]=0x00;
TRBUF[7+15]=0x00;
TRBUF[8+15]=0x00;
TRBUF[9+15]=0x00;
TRBUF[10+15]=0x00;
TRBUF[11+15]=0x00;
for(i=26;i<32;i++) TRBUF[i]=0;
if( !usbXfer(1,disk_out,PID_OUT,0,64,31,TRBUF))
{
return(0);
}
if( !usbXfer(1,disk_in,PID_IN,0,64,4,TRBUF))
{
return(0);
}
i = TRBUF[2];
if( !usbXfer(1,disk_in,PID_IN,0,64,13,TRBUF))
{
return(0);
}
if ( i & 0x80 )
{
return(2);
}
else
{
return(1);
}
return(0);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -