📄 usb_disk.lst
字号:
427 2 K9F_CLE = 0;
428 2 K9F_ALE = 1;
429 2 K9F5608 = 0; //A0-A7
430 2 K9F5608 = (PG.addr[3]&0x3f)|BuffBlock; //A9-A16
431 2 K9F5608 = 0xff; //A17-A24
432 2 //K9F_FUN = D_DATA;
433 2 K9F_ALE = 0;
434 2 for(i=0;i<8;i++)
435 2 {
436 3 while (!(UEPINT & EP2));
437 3 WriteFlash();
438 3 UEPSTAX &= 0xB9;
439 3 }
440 2 //K9F_FUN = COMMAND;
441 2 K9F_CLE = 1;
442 2 K9F5608 = 0x10;
443 2 //K9F_FUN = D_DATA;
444 2 K9F_CLE = 0;
445 2 length--;
446 2 delay();
447 2 while(!K9F_RB);
448 2
449 2 if(((PG.addr[3]&0x1f)==0x1f)||(length==0))
450 2 {
451 3
452 3 for(i=((PG.addr[3]&0x1f)+1);i<32;i++)
453 3 {
454 4 //K9F_FUN = COMMAND;
455 4 K9F_CLE = 1;
456 4 K9F5608 = 0x00;
457 4 //K9F_FUN = ADDRESS;
458 4 K9F_CLE = 0;
459 4 K9F_ALE = 1;
460 4 K9F5608 = 0; //A0-A7
461 4 K9F5608 = (PG.addr[3]&0xe0)|i; //A9-A16
462 4 K9F5608 = PG.addr[2]; //A17-A24
463 4 //K9F_FUN = D_DATA;
464 4 K9F_ALE = 0;
465 4 delay();
466 4 while(!K9F_RB);
467 4
468 4 //K9F_FUN = COMMAND;
469 4 K9F_CLE = 1;
470 4 K9F5608 = 0x8a;
471 4 //K9F_FUN = ADDRESS;
472 4 K9F_CLE = 0;
473 4 K9F_ALE = 1;
474 4 K9F5608 = 0; //A0-A7
475 4 K9F5608 = (PG.addr[3]&0x20)|BuffBlock|i; //A9-A16
476 4 K9F5608 = 0xff; //A17-A24
477 4 //K9F_FUN = D_DATA;
478 4 K9F_ALE = 0;
479 4 delay();
480 4 while(!K9F_RB);
481 4 }
482 3
483 3 //K9F_FUN = COMMAND;
484 3 K9F_CLE = 1;
485 3 K9F5608 = 0x60; //擦除当前block
486 3 //K9F_FUN = ADDRESS;
487 3 K9F_CLE = 0;
488 3 K9F_ALE = 1;
C51 COMPILER V7.50 USB_DISK 11/18/2005 21:31:23 PAGE 9
489 3 K9F5608 = PG.addr[3]; //A9-A16
490 3 K9F5608 = PG.addr[2]; //A17-A24
491 3 //K9F_FUN = COMMAND;
492 3 K9F_ALE = 0;
493 3 K9F_CLE = 1;
494 3 K9F5608 = 0xd0;
495 3 //K9F_FUN = D_DATA;
496 3 K9F_CLE = 0;
497 3 delay();
498 3 while(!K9F_RB); //等待操作完成
499 3
500 3 for(i=0;i<32;i++)
501 3 {
502 4 //K9F_FUN = COMMAND;
503 4 K9F_CLE = 1;
504 4 K9F5608 = 0x00;
505 4 //K9F_FUN = ADDRESS;
506 4 K9F_CLE = 0;
507 4 K9F_ALE = 1;
508 4 K9F5608 = 0; //A0-A7
509 4 K9F5608 = (PG.addr[3]&0x20)|BuffBlock|i; //A9-A16
510 4 K9F5608 = 0xff; //A17-A24
511 4 //K9F_FUN = D_DATA;
512 4 K9F_ALE = 0;
513 4 delay();
514 4 while(!K9F_RB);
515 4
516 4 //K9F_FUN = COMMAND;
517 4 K9F_CLE = 1;
518 4 K9F5608 = 0x8a;
519 4 //K9F_FUN = ADDRESS;
520 4 K9F_CLE = 0;
521 4 K9F_ALE = 1;
522 4 K9F5608 = 0; //A0-A7
523 4 K9F5608 = (PG.addr[3]&0xe0)|i; //A9-A16
524 4 K9F5608 = PG.addr[2]; //A17-A24
525 4 //K9F_FUN = D_DATA;
526 4 K9F_ALE = 0;
527 4 delay();
528 4 while(!K9F_RB);
529 4 }
530 3
531 3 if(length>0)
532 3 {
533 4 //K9F_FUN = COMMAND;
534 4 K9F_CLE = 1;
535 4 K9F5608 = 0x60;
536 4 //K9F_FUN = ADDRESS;
537 4 K9F_CLE = 0;
538 4 K9F_ALE = 1;
539 4 K9F5608 = (PG.addr[3]&0x20)|BuffBlock; //A9-A16
540 4 K9F5608 = 0xff; //A17-A24
541 4 //K9F_FUN = COMMAND;
542 4 K9F_ALE = 0;
543 4 K9F_CLE = 1;
544 4 K9F5608 = 0xD0;
545 4 //K9F_FUN = D_DATA;
546 4 K9F_CLE = 0;
547 4 delay();
548 4 while(!K9F_RB);
549 4 }
550 3 }
C51 COMPILER V7.50 USB_DISK 11/18/2005 21:31:23 PAGE 10
551 2 PG.page++;
552 2 }
553 1
554 1 TransmitCSW();
555 1
556 1 K9F_CS = 1;
557 1 }
558
559 void main_rxdone()
560 {
561 1 unsigned char data i;
562 1 unsigned char data Buf[64];
563 1
564 1 i = ReadEp(2,Buf);
565 1
566 1 P3_5 =0;
567 1 bulk_CSW[4] = Buf[4]; bulk_CSW[5] = Buf[5]; bulk_CSW[6] = Buf[6]; bulk_CSW[7] = Buf[7];
568 1 for(i=0;i<12;i++) bulk_CBW.CBWCB[i] = Buf[i+15];
569 1 switch(bulk_CBW.CBWCB[0])
570 1 {
571 2 case Inquiry :WriteEpBulk(1,36,B_InquiryData);break;
572 2 case Mode_Sense :SCSI_Mode_Sense(); break;
573 2 case Read10 :SCSI_Read10(); break;
574 2 case Read_Capacity :WriteEpBulk(1, sizeof(B_Read_Capacity), B_Read_Capacity);break;
575 2 case Read_Format_Capacities :SCSI_Read_Format_Capacities(); break;
576 2 case Test_Unit_Ready :TransmitCSW(); break;
577 2 case Verify :TransmitCSW(); break;
578 2 case Write10 :SCSI_Write10(); break;
579 2 case Medium_Removal :TransmitCSW(); break;
580 2 }
581 1 P3_5 =1;
582 1 }
583
584 void Flash_Reset(void) //flash reset
585 {
586 1 unsigned int data i;
587 1 K9F_RB = 1;
588 1 K9F_CLE = 0;
589 1 K9F_ALE = 0;
590 1 K9F_CS = 1;
591 1
592 1 //K9F_FUN = COMMAND;
593 1 K9F_CS = 0;
594 1 K9F_CLE = 1;
595 1 K9F5608 = 0xff; //reset command
596 1 K9F_CLE = 0;
597 1 K9F_CS = 1;
598 1
599 1 for (i=0; i<3000; i++) ; //delay
600 1 }
601
602
603 void ReadPage(unsigned int block, unsigned int page, unsigned char *pPage)
604 {
605 1 int i;
606 1 unsigned int blockPage = (block << 5) | page;
607 1
608 1 //K9F_FUN = COMMAND;
609 1 K9F_CS = 0;
610 1 K9F_CLE = 1;
611 1 K9F5608 = 0x00;
612 1 //K9F_FUN = ADDRESS;
C51 COMPILER V7.50 USB_DISK 11/18/2005 21:31:23 PAGE 11
613 1 K9F_CLE = 0;
614 1 K9F_ALE = 1;
615 1 K9F5608 = 0; //A0-A7
616 1 K9F5608 = blockPage & 0xff; //A9-A16
617 1 K9F5608 = (blockPage >> 8) & 0xff; //A17-A24
618 1 //K9F_FUN = D_DATA;
619 1 K9F_ALE = 0;
620 1 i = 512;
621 1 while(!K9F_RB);
622 1
623 1 while((i--)>0)
624 1 {
625 2 *pPage++ = K9F5608;
626 2 }
627 1 K9F_CS = 1;
628 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1514 ----
CONSTANT SIZE = 184 ----
XDATA SIZE = ---- 13
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 + -