📄 usb_disk.lst
字号:
357 1 nBeginPage = PG.addr[3]&0x1f;
358 1 UEPNUM = 0x02;
359 1 delay();
360 1 while(!(K9F_FUN & RB));
361 1
362 1 if(nBeginPage>0)
363 1 {
364 2 for(i=0;i<nBeginPage;i++)
C51 COMPILER V7.50 USB_DISK 01/15/2006 18:40:26 PAGE 7
365 2 {
366 3 K9F_FUN = COMMAND;
367 3 K9F5608 = 0x00;
368 3 K9F_FUN = ADDRESS;
369 3 K9F5608 = 0; //A0-A7
370 3 K9F5608 = (PG.addr[3]&0xe0)|i; //A9-A16
371 3 K9F5608 = PG.addr[2]; //A17-A24
372 3 K9F_FUN = D_DATA;
373 3 delay();
374 3 while(!(K9F_FUN & RB));
375 3
376 3 K9F_FUN = COMMAND;
377 3 K9F5608 = 0x8a;
378 3 K9F_FUN = ADDRESS;
379 3 K9F5608 = 0; //A0-A7
380 3 K9F5608 = BuffBlock|(PG.addr[3]&0x20)|i; //A9-A16
381 3 K9F5608 = 0xff; //A17-A24
382 3 K9F_FUN = D_DATA;
383 3 delay();
384 3 while(!(K9F_FUN & RB));
385 3 }
386 2 nBeginPage=0;
387 2 }
388 1
389 1 while(length>0)
390 1 {
391 2 K9F_FUN = COMMAND;
392 2 K9F5608 = 0x80;
393 2 K9F_FUN = ADDRESS;
394 2 K9F5608 = 0; //A0-A7
395 2 K9F5608 = (PG.addr[3]&0x3f)|BuffBlock; //A9-A16
396 2 K9F5608 = 0xff; //A17-A24
397 2 K9F_FUN = D_DATA;
398 2 for(i=0;i<8;i++)
399 2 {
400 3 while (!(UEPINT & EP2));
401 3 WriteFlash();
402 3 UEPSTAX &= 0xB9;
403 3 }
404 2 K9F_FUN = COMMAND;
405 2 K9F5608 = 0x10;
406 2 K9F_FUN = D_DATA;
407 2 length--;
408 2 delay();
409 2 while(!(K9F_FUN & RB));
410 2
411 2 if(((PG.addr[3]&0x1f)==0x1f)||(length==0))
412 2 {
413 3
414 3 for(i=((PG.addr[3]&0x1f)+1);i<32;i++)
415 3 {
416 4 K9F_FUN = COMMAND;
417 4 K9F5608 = 0x00;
418 4 K9F_FUN = ADDRESS;
419 4 K9F5608 = 0; //A0-A7
420 4 K9F5608 = (PG.addr[3]&0xe0)|i; //A9-A16
421 4 K9F5608 = PG.addr[2]; //A17-A24
422 4 K9F_FUN = D_DATA;
423 4 delay();
424 4 while(!(K9F_FUN & RB));
425 4
426 4 K9F_FUN = COMMAND;
C51 COMPILER V7.50 USB_DISK 01/15/2006 18:40:26 PAGE 8
427 4 K9F5608 = 0x8a;
428 4 K9F_FUN = ADDRESS;
429 4 K9F5608 = 0; //A0-A7
430 4 K9F5608 = (PG.addr[3]&0x20)|BuffBlock|i; //A9-A16
431 4 K9F5608 = 0xff; //A17-A24
432 4 K9F_FUN = D_DATA;
433 4 delay();
434 4 while(!(K9F_FUN & RB));
435 4 }
436 3
437 3 K9F_FUN = COMMAND;
438 3 K9F5608 = 0x60; //擦除当前block
439 3 K9F_FUN = ADDRESS;
440 3 K9F5608 = PG.addr[3]; //A9-A16
441 3 K9F5608 = PG.addr[2]; //A17-A24
442 3 K9F_FUN = COMMAND;
443 3 K9F5608 = 0xd0;
444 3 K9F_FUN = D_DATA;
445 3 delay();
446 3 while(!(K9F_FUN & RB)); //等待操作完成
447 3
448 3 for(i=0;i<32;i++)
449 3 {
450 4 K9F_FUN = COMMAND;
451 4 K9F5608 = 0x00;
452 4 K9F_FUN = ADDRESS;
453 4 K9F5608 = 0; //A0-A7
454 4 K9F5608 = (PG.addr[3]&0x20)|BuffBlock|i; //A9-A16
455 4 K9F5608 = 0xff; //A17-A24
456 4 K9F_FUN = D_DATA;
457 4 delay();
458 4 while(!(K9F_FUN & RB));
459 4
460 4 K9F_FUN = COMMAND;
461 4 K9F5608 = 0x8a;
462 4 K9F_FUN = ADDRESS;
463 4 K9F5608 = 0; //A0-A7
464 4 K9F5608 = (PG.addr[3]&0xe0)|i; //A9-A16
465 4 K9F5608 = PG.addr[2]; //A17-A24
466 4 K9F_FUN = D_DATA;
467 4 delay();
468 4 while(!(K9F_FUN & RB));
469 4 }
470 3
471 3 if(length>0)
472 3 {
473 4 K9F_FUN = COMMAND;
474 4 K9F5608 = 0x60;
475 4 K9F_FUN = ADDRESS;
476 4 K9F5608 = (PG.addr[3]&0x20)|BuffBlock; //A9-A16
477 4 K9F5608 = 0xff; //A17-A24
478 4 K9F_FUN = COMMAND;
479 4 K9F5608 = 0xD0;
480 4 K9F_FUN = D_DATA;
481 4 delay();
482 4 while(!(K9F_FUN & RB));
483 4 }
484 3 }
485 2 PG.page++;
486 2 }
487 1
488 1 TransmitCSW();
C51 COMPILER V7.50 USB_DISK 01/15/2006 18:40:26 PAGE 9
489 1 }
490
491 void main_rxdone()
492 {
493 1 unsigned char data i;
494 1 unsigned char data Buf[64];
495 1
496 1 i = ReadEp(2,Buf);
497 1
498 1 P3_5 =0;
499 1 bulk_CSW[4] = Buf[4]; bulk_CSW[5] = Buf[5]; bulk_CSW[6] = Buf[6]; bulk_CSW[7] = Buf[7];
500 1 for(i=0;i<12;i++) bulk_CBW.CBWCB[i] = Buf[i+15];
501 1 switch(bulk_CBW.CBWCB[0])
502 1 {
503 2 case Inquiry :WriteEpBulk(1,36,B_InquiryData);break;
504 2 case Mode_Sense :SCSI_Mode_Sense(); break;
505 2 case Read10 :SCSI_Read10(); break;
506 2 case Read_Capacity :WriteEpBulk(1, sizeof(B_Read_Capacity), B_Read_Capacity);break;
507 2 case Read_Format_Capacities :SCSI_Read_Format_Capacities(); break;
508 2 case Test_Unit_Ready :TransmitCSW(); break;
509 2 case Verify :TransmitCSW(); break;
510 2 case Write10 :SCSI_Write10(); break;
511 2 case Medium_Removal :TransmitCSW(); break;
512 2 }
513 1 P3_5 =1;
514 1 }
515
516 void Flash_Reset(void) //flash reset
517 {
518 1 unsigned int data i;
519 1 K9F_FUN = COMMAND;
520 1 K9F5608 = 0xff; //reset command
521 1 for (i=0; i<3000; i++) ; //delay
522 1 }
523
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1411 ----
CONSTANT SIZE = 184 ----
XDATA SIZE = ---- 10
PDATA SIZE = ---- ----
DATA SIZE = 25 118
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -