📄 usb_disk.lst
字号:
375 3 K9F5608 = 0; //A0-A7
376 3 K9F5608 = (PG.addr[3]&0xe0)|i; //A9-A16
377 3 K9F5608 = PG.addr[2]; //A17-A24
378 3 K9F_FUN = D_DATA;
379 3 delay();
380 3 while(!(K9F_FUN & RB));
381 3
382 3 K9F_FUN = COMMAND;
383 3 K9F5608 = 0x8a;
384 3 K9F_FUN = ADDRESS;
385 3 K9F5608 = 0; //A0-A7
386 3 K9F5608 = BuffBlock|(PG.addr[3]&0x20)|i; //A9-A16
387 3 K9F5608 = 0xff; //A17-A24
388 3 K9F_FUN = D_DATA;
389 3 delay();
390 3 while(!(K9F_FUN & RB));
391 3 }
392 2 nBeginPage=0;
393 2 }
394 1
395 1 while(length>0)
396 1 {
397 2 K9F_FUN = COMMAND;
398 2 K9F5608 = 0x80;
399 2 K9F_FUN = ADDRESS;
400 2 K9F5608 = 0; //A0-A7
401 2 K9F5608 = (PG.addr[3]&0x3f)|BuffBlock; //A9-A16
402 2 K9F5608 = 0xff; //A17-A24
403 2 K9F_FUN = D_DATA;
404 2 for(i=0;i<8;i++)
405 2 {
406 3 while (!(UEPINT & EP2));
407 3 WriteFlash();
408 3 UEPSTAX &= 0xB9;
409 3 }
410 2 K9F_FUN = COMMAND;
411 2 K9F5608 = 0x10;
412 2 K9F_FUN = D_DATA;
413 2 length--;
414 2 delay();
415 2 while(!(K9F_FUN & RB));
416 2
417 2 if(((PG.addr[3]&0x1f)==0x1f)||(length==0))
418 2 {
419 3
420 3 for(i=((PG.addr[3]&0x1f)+1);i<32;i++)
421 3 {
422 4 K9F_FUN = COMMAND;
423 4 K9F5608 = 0x00;
424 4 K9F_FUN = ADDRESS;
425 4 K9F5608 = 0; //A0-A7
426 4 K9F5608 = (PG.addr[3]&0xe0)|i; //A9-A16
C51 COMPILER V8.08 USB_DISK 05/19/2008 19:51:06 PAGE 8
427 4 K9F5608 = PG.addr[2]; //A17-A24
428 4 K9F_FUN = D_DATA;
429 4 delay();
430 4 while(!(K9F_FUN & RB));
431 4
432 4 K9F_FUN = COMMAND;
433 4 K9F5608 = 0x8a;
434 4 K9F_FUN = ADDRESS;
435 4 K9F5608 = 0; //A0-A7
436 4 K9F5608 = (PG.addr[3]&0x20)|BuffBlock|i; //A9-A16
437 4 K9F5608 = 0xff; //A17-A24
438 4 K9F_FUN = D_DATA;
439 4 delay();
440 4 while(!(K9F_FUN & RB));
441 4 }
442 3
443 3 K9F_FUN = COMMAND;
444 3 K9F5608 = 0x60; //擦除当前block
445 3 K9F_FUN = ADDRESS;
446 3 K9F5608 = PG.addr[3]; //A9-A16
447 3 K9F5608 = PG.addr[2]; //A17-A24
448 3 K9F_FUN = COMMAND;
449 3 K9F5608 = 0xd0;
450 3 K9F_FUN = D_DATA;
451 3 delay();
452 3 while(!(K9F_FUN & RB)); //等待操作完成
453 3
454 3 for(i=0;i<32;i++)
455 3 {
456 4 K9F_FUN = COMMAND;
457 4 K9F5608 = 0x00;
458 4 K9F_FUN = ADDRESS;
459 4 K9F5608 = 0; //A0-A7
460 4 K9F5608 = (PG.addr[3]&0x20)|BuffBlock|i; //A9-A16
461 4 K9F5608 = 0xff; //A17-A24
462 4 K9F_FUN = D_DATA;
463 4 delay();
464 4 while(!(K9F_FUN & RB));
465 4
466 4 K9F_FUN = COMMAND;
467 4 K9F5608 = 0x8a;
468 4 K9F_FUN = ADDRESS;
469 4 K9F5608 = 0; //A0-A7
470 4 K9F5608 = (PG.addr[3]&0xe0)|i; //A9-A16
471 4 K9F5608 = PG.addr[2]; //A17-A24
472 4 K9F_FUN = D_DATA;
473 4 delay();
474 4 while(!(K9F_FUN & RB));
475 4 }
476 3
477 3 if(length>0)
478 3 {
479 4 K9F_FUN = COMMAND;
480 4 K9F5608 = 0x60;
481 4 K9F_FUN = ADDRESS;
482 4 K9F5608 = (PG.addr[3]&0x20)|BuffBlock; //A9-A16
483 4 K9F5608 = 0xff; //A17-A24
484 4 K9F_FUN = COMMAND;
485 4 K9F5608 = 0xD0;
486 4 K9F_FUN = D_DATA;
487 4 delay();
488 4 while(!(K9F_FUN & RB));
C51 COMPILER V8.08 USB_DISK 05/19/2008 19:51:06 PAGE 9
489 4 }
490 3 }
491 2 PG.page++;
492 2 }
493 1
494 1 TransmitCSW();
495 1 }
496
497 void main_rxdone()
498 {
499 1 unsigned char data i;
500 1 unsigned char data Buf[64];
501 1
502 1 i = ReadEp(2,Buf);
503 1
504 1 P3_5 =0;
505 1 bulk_CSW[4] = Buf[4]; bulk_CSW[5] = Buf[5]; bulk_CSW[6] = Buf[6]; bulk_CSW[7] = Buf[7];
506 1 for(i=0;i<12;i++) bulk_CBW.CBWCB[i] = Buf[i+15];
507 1 switch(bulk_CBW.CBWCB[0])
508 1 {
509 2 case Inquiry :WriteEpBulk(1,36,B_InquiryData);break;
510 2 case Mode_Sense :SCSI_Mode_Sense(); break;
511 2 case Read10 :SCSI_Read10(); break;
512 2 case Read_Capacity :WriteEpBulk(1, sizeof(B_Read_Capacity), B_Read_Capacity);break;
513 2 case Read_Format_Capacities :SCSI_Read_Format_Capacities(); break;
514 2 case Test_Unit_Ready :TransmitCSW(); break;
515 2 case Verify :TransmitCSW(); break;
516 2 case Write10 :SCSI_Write10(); break;
517 2 case Medium_Removal :TransmitCSW(); break;
518 2 }
519 1 P3_5 =1;
520 1 }
521
522 void Flash_Reset(void) //flash reset
523 {
524 1 unsigned int data i;
525 1 K9F_FUN = COMMAND;
526 1 K9F5608 = 0xff; //reset command
527 1 for (i=0; i<3000; i++) ; //delay
528 1 }
529
530
531 void ReadPage(unsigned int block, unsigned int page, unsigned char *pPage)
532 {
533 1 int i;
534 1 unsigned int blockPage = (block << 5) | page;
535 1
536 1 K9F_FUN = COMMAND;
537 1 K9F5608 = 0x00;
538 1 K9F_FUN = ADDRESS;
539 1 K9F5608 = 0; //A0-A7
540 1 K9F5608 = blockPage & 0xff; //A9-A16
541 1 K9F5608 = (blockPage >> 8) & 0xff; //A17-A24
542 1 K9F_FUN = D_DATA;
543 1
544 1 i = 512;
545 1 while(!(K9F_FUN & RB));
546 1
547 1 while((i--)>0)
548 1 {
549 2 *pPage++ = K9F5608;
550 2 }
C51 COMPILER V8.08 USB_DISK 05/19/2008 19:51:06 PAGE 10
551 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1517 ----
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 + -