wsqss2004
驱动小牛
驱动小牛
  • 注册日期2004-06-11
  • 最后登录2012-02-17
  • 粉丝0
  • 关注0
  • 积分994分
  • 威望202点
  • 贡献值2点
  • 好评度91点
  • 原创分0分
  • 专家分0分
阅读:785回复:1

我现在上电时就会在FDT或DBR区都会增加64字节的数据。但有时又不灰?还望大侠指点!

楼主#
更多 发布于:2004-12-14 21:25
我现在每次开机上电时在FDT或DBR区都会增加64字节的数据。列如:
第63是0xff,那后面就会添加64字节的0xff.不知是怎么回事?
最奇怪的是我分2个扇区一镞,就会在DBR区添家。分32个扇区一镞就会在FDT区添加。代码如下:
void SCSIWrite10(void)
{
register BYTE i;
bit LBA_Swicth=1; //Ture/Dummy address select
data DWORD D_LBA,S_LBA,Write_LBA_S,ST; //Dummy Address Concerned
data BYTE SM;
data DWORD S_D_LBA; //Destination address temp
data DWORD Write_LBA; //Write Address
data DWORD Length_Write; //Write length
extern xdata BYTE Temp_Buffer[528]; //receive data Buffer
// xdata BYTE Receive_data16[16]={0};
//-----------------------------------------------------------------
data struct SCSIWrite10Str *SCSICmdWrite10=SCSICBW->CBWCB;
Length_Write=(((DWORD)SCSICBW->dDataLength3)<<16)|(((DWORD)SCSICBW->dDataLength2)<<8)
|((DWORD)SCSICBW->dDataLength1);
Write_LBA=(((DWORD)SCSICmdWrite10->LBA2)<<16)|(((DWORD)SCSICmdWrite10->LBA3)<<8)
|((DWORD)SCSICmdWrite10->LBA4);
Write_LBA +=32;
// Receive_data16[10]=0x55;
// Receive_data16[11]=0x88;
//---------------------------------------------------------------------//
// Plane 0 : 4088 Block <0x0001ff00> 4092 Block <0x01ff80>
// Plane 1 : 4089 Block <0x0001ff20> 4093 Block <0x01ffa0>
// Plane 2 : 4090 Block <0x0001ff40> 4094 Block <0x01ffc0>
// Plane 3 : 4091 Block <0x0001ff60> 4095 Block <0x01ffe0>
//-------------------------------------------------------------------//
D_LBA=0x0001e000; //destination address // =4088
//---------------------Receive-Data-then-Write------------------------------
do{
if(LBA_Swicth)
{
//-----------Initialize-Source-address------------------
Write_LBA_S=Write_LBA;
ST=Write_LBA_S >>5; //div //Block number
SM=(BYTE)(Write_LBA_S-(ST<<5)); //mod //page in block //current page number
S_LBA=ST<<5; //first page number in block
//--------------------Destination--address-Find--------------
D_LBA=0x0001fe00; //destination address // =4088
S_D_LBA=ST-((ST>>2)<<2); // ST MOD 4
D_LBA=D_LBA+(S_D_LBA<<5); //plane select
Nand_Erase_one_block(D_LBA);
//------------------read-first->current-pages--------------
for(i=0;i<SM;i++)
{ //------------------data-----512B------------------
Nand_Copy_page(0x00,S_LBA,0x00,D_LBA);
S_LBA +=1; //source address
D_LBA +=1; //destination address
}
LBA_Swicth=0; //LBA_Address Switch :1= real address ,0= Dummy(Temp) address
}
//----------------------data-Write-------512B-----------------------------------
P3_4=0;
USBEP2_Read_Mass_data(Temp_Buffer); //Read data(512Bytes) from host
P3_4=1;
Nand_Write_one_Page(0x00, D_LBA, Temp_Buffer); //Write data to Dummy Address
D_LBA ++; S_LBA ++; SM ++; //Address increase
//--------------Tail-data-opinion----------------------------------------
if( Length_Write>=512) { Length_Write -=512; Write_LBA +=1;} //real address increase
//--------------Tail-Page-Write--------------------------------------------
if((SM>=31)||(Length_Write<=0)) // end Page in block OR data write complete
{
//----------------Tail-page-write-temp-address-----------------------
for(;SM<32;SM++)
{ //--------------512B----------------------------------
Nand_Copy_page(0x00,S_LBA,0x00,D_LBA);
S_LBA +=1; // source address
D_LBA +=1; // destination address
}
//------------Erase-Source-Block----------------------
Nand_Erase_one_block(Write_LBA_S);
//------------------------------------------------
D_LBA -=32; //destination address reset to the first page in the block
S_LBA -=32; //source address reset to the first page in Block
for(i=0;i<32;i++)
{ //---------Copy-back-data---512B-----------------------------
Nand_Copy_page(0x00,D_LBA,0x00,S_LBA);
S_LBA +=1; D_LBA +=1;
}
LBA_Swicth=1; //next Block reset

}

}while(Length_Write>0);
//------------------------Clear-Receive-Trigger---------------
CLEAR_BIT_1(UEPSTAX); //clear RoutB0
CLEAR_BIT_6(UEPSTAX); //clear RoutB1

}
wsqss2004
驱动小牛
驱动小牛
  • 注册日期2004-06-11
  • 最后登录2012-02-17
  • 粉丝0
  • 关注0
  • 积分994分
  • 威望202点
  • 贡献值2点
  • 好评度91点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-12-15 20:54
现在最奇怪的是:
 当第64字节为0xFf,那以后就会增加64个0xff,并且把原来64字节的数据往后移。即在第64字节处插入64字接的数据。而且是每次开机就在原来的情况下新插64字节数据。
游客

返回顶部