阅读:785回复:1
我现在上电时就会在FDT或DBR区都会增加64字节的数据。但有时又不灰?还望大侠指点!
我现在每次开机上电时在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 } |
|
沙发#
发布于:2004-12-15 20:54
现在最奇怪的是:
当第64字节为0xFf,那以后就会增加64个0xff,并且把原来64字节的数据往后移。即在第64字节处插入64字接的数据。而且是每次开机就在原来的情况下新插64字节数据。 |
|