⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 disk.c

📁 汽车记录仪元代码
💻 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 + -