📄 usb_bot.txt
字号:
;;;198 SCSI_Send_Diagnostic_Cmd();
;;;199 break;
;;;200 case SCSI_READ6:
;;;201 SCSI_Read6_Cmd();
;;;202 break;
;;;203 case SCSI_READ12:
;;;204 SCSI_Read12_Cmd();
;;;205 break;
;;;206 case SCSI_READ16:
;;;207 SCSI_Read16_Cmd();
;;;208 break;
;;;209 case SCSI_READ_CAPACITY16:
;;;210 SCSI_READ_CAPACITY16_Cmd();
;;;211 break;
;;;212 case SCSI_WRITE6:
;;;213 SCSI_Write6_Cmd();
;;;214 break;
;;;215 case SCSI_WRITE12:
;;;216 SCSI_Write12_Cmd();
;;;217 break;
;;;218 case SCSI_WRITE16:
;;;219 SCSI_Write16_Cmd();
;;;220 break;
;;;221 case SCSI_VERIFY12:
;;;222 SCSI_Verify12_Cmd();
;;;223 break;
;;;224 case SCSI_VERIFY16:
;;;225 SCSI_Verify16_Cmd();
;;;226 break;
;;;227
;;;228 default:
;;;229 {
;;;230 Bot_Abort(BOTH_DIR);
;;;231 Set_Scsi_Sense_Data(ILLEGAL_REQUEST, INVALID_COMMAND);
;;;232 Set_CSW (CSW_CMD_FAILED, SEND_CSW_DISABLE);
;;;233 }
;;;234 }
;;;235 }
;;;236 }
;;;237 else
;;;238 {
;;;239 /* Invalid CBW */
;;;240 Bot_Abort(BOTH_DIR);
;;;241 Set_Scsi_Sense_Data(ILLEGAL_REQUEST, INVALID_COMMAND);
000054 2005 MOVS r0,#5
000056 f7fffffe BL Set_Scsi_Sense_Data
;;;242 Set_CSW (CSW_CMD_FAILED, SEND_CSW_DISABLE);
00005a 2100 MOVS r1,#0
00005c e8bd4010 POP {r4,lr}
000060 2001 MOVS r0,#1
000062 f7ffbffe B.W Set_CSW
|L4.102|
000066 7be0 LDRB r0,[r4,#0xf] ;149 ; CBW
000068 2825 CMP r0,#0x25 ;149
00006a d05a BEQ |L4.290|
00006c dc1d BGT |L4.170|
00006e 2815 CMP r0,#0x15 ;149
000070 d03d BEQ |L4.238|
000072 dc10 BGT |L4.150|
000074 2808 CMP r0,#8 ;149
000076 d03a BEQ |L4.238|
000078 dc05 BGT |L4.134|
00007a b398 CBZ r0,|L4.228|
00007c 2803 CMP r0,#3 ;149
00007e d03a BEQ |L4.246|
000080 2804 CMP r0,#4 ;149
000082 d160 BNE |L4.326|
000084 e033 B |L4.238|
|L4.134|
000086 280a CMP r0,#0xa ;149
000088 d031 BEQ |L4.238|
00008a 2812 CMP r0,#0x12 ;149
00008c d15b BNE |L4.326|
00008e e8bd4010 POP {r4,lr} ;155
000092 f7ffbffe B.W SCSI_Inquiry_Cmd
|L4.150|
000096 381a SUBS r0,r0,#0x1a ;149
000098 280a CMP r0,#0xa ;149
00009a d254 BCS |L4.326|
00009c e8dff000 TBB [pc,r0] ;149
0000a0 352f5327 DCB 0x35,0x2f,0x53,0x27
0000a4 31535353 DCB 0x31,0x53,0x53,0x53
0000a8 533d DCB 0x53,0x3d
|L4.170|
0000aa 288a CMP r0,#0x8a ;149
0000ac d01f BEQ |L4.238|
0000ae dc11 BGT |L4.212|
0000b0 2855 CMP r0,#0x55 ;149
0000b2 d01c BEQ |L4.238|
0000b4 dc09 BGT |L4.202|
0000b6 2828 CMP r0,#0x28 ;149
0000b8 d03b BEQ |L4.306|
0000ba 282a CMP r0,#0x2a ;149
0000bc d03d BEQ |L4.314|
0000be 282f CMP r0,#0x2f ;149
0000c0 d141 BNE |L4.326|
0000c2 e8bd4010 POP {r4,lr} ;184
0000c6 f7ffbffe B.W SCSI_Verify10_Cmd
|L4.202|
0000ca 285a CMP r0,#0x5a ;149
0000cc d021 BEQ |L4.274|
0000ce 2888 CMP r0,#0x88 ;149
0000d0 d139 BNE |L4.326|
0000d2 e00c B |L4.238|
|L4.212|
0000d4 28a8 CMP r0,#0xa8 ;149
0000d6 d00a BEQ |L4.238|
0000d8 dc05 BGT |L4.230|
0000da 288f CMP r0,#0x8f ;149
0000dc d007 BEQ |L4.238|
0000de 289e CMP r0,#0x9e ;149
0000e0 d131 BNE |L4.326|
0000e2 e004 B |L4.238|
|L4.228|
0000e4 e021 B |L4.298|
|L4.230|
0000e6 28aa CMP r0,#0xaa ;149
0000e8 d001 BEQ |L4.238|
0000ea 28af CMP r0,#0xaf ;149
0000ec d12b BNE |L4.326|
|L4.238|
0000ee e8bd4010 POP {r4,lr} ;225
0000f2 f7ffbffe B.W SCSI_Invalid_Cmd
|L4.246|
0000f6 e8bd4010 POP {r4,lr} ;152
0000fa f7ffbffe B.W SCSI_RequestSense_Cmd
0000fe f7fffffe BL SCSI_Start_Stop_Unit_Cmd
000102 e8bd4010 POP {r4,lr} ;160
000106 f7ffbffe B.W SCSI_Start_Stop_Unit_Cmd
00010a e8bd4010 POP {r4,lr} ;163
00010e f7ffbffe B.W SCSI_ModeSense6_Cmd
|L4.274|
000112 e8bd4010 POP {r4,lr} ;166
000116 f7ffbffe B.W SCSI_ModeSense10_Cmd
00011a e8bd4010 POP {r4,lr} ;169
00011e f7ffbffe B.W SCSI_ReadFormatCapacity_Cmd
|L4.290|
000122 e8bd4010 POP {r4,lr} ;172
000126 f7ffbffe B.W SCSI_ReadCapacity10_Cmd
|L4.298|
00012a e8bd4010 POP {r4,lr} ;175
00012e f7ffbffe B.W SCSI_Valid_Cmd
|L4.306|
000132 e8bd4010 POP {r4,lr} ;178
000136 f7ffbffe B.W SCSI_Read10_Cmd
|L4.314|
00013a e000 B |L4.318|
|L4.316|
00013c e003 B |L4.326|
|L4.318|
00013e e8bd4010 POP {r4,lr} ;181
000142 f7ffbffe B.W SCSI_Write10_Cmd
|L4.326|
000146 2002 MOVS r0,#2 ;240
000148 f7fffffe BL Bot_Abort
00014c 2120 MOVS r1,#0x20 ;241
00014e e781 B |L4.84|
;;;243 }
;;;244 }
;;;245
ENDP
|L4.336|
000150 00000000 DCD ||.data||
|L4.340|
000154 00000040 DCD ||.bss||+0x40
|L4.344|
000158 43425355 DCD 0x43425355
AREA ||i.Mass_Storage_Out||, CODE, READONLY, ALIGN=2
Mass_Storage_Out PROC
;;;79 void Mass_Storage_Out (void)
;;;80 {
000000 b570 PUSH {r4-r6,lr}
;;;81 u8 CMD;
;;;82 CMD = CBW.CB[0];
000002 4815 LDR r0,|L5.88|
000004 7bc5 LDRB r5,[r0,#0xf] ; CBW
;;;83 Data_Len = GetEPRxCount(ENDP2);
000006 2002 MOVS r0,#2
000008 f7fffffe BL GetEPRxCount
00000c 4c13 LDR r4,|L5.92|
;;;84
;;;85 PMAToUserBufferCopy(Bulk_Data_Buff, ENDP2_RXADDR, Data_Len);
00000e b282 UXTH r2,r0
000010 8060 STRH r0,[r4,#2] ;83 ; Data_Len
000012 4811 LDR r0,|L5.88|
000014 21d8 MOVS r1,#0xd8
000016 3840 SUBS r0,r0,#0x40
000018 f7fffffe BL PMAToUserBufferCopy
;;;86
;;;87 switch (Bot_State)
00001c 7820 LDRB r0,[r4,#0] ; Bot_State
00001e b138 CBZ r0,|L5.48|
000020 2801 CMP r0,#1
000022 d117 BNE |L5.84|
;;;88 {
;;;89 case BOT_IDLE:
;;;90 CBW_Decode();
;;;91 break;
;;;92 case BOT_DATA_OUT:
;;;93 if (CMD == SCSI_WRITE10)
000024 2d2a CMP r5,#0x2a
000026 d107 BNE |L5.56|
;;;94 {
;;;95 SCSI_Write10_Cmd();
000028 e8bd4070 POP {r4-r6,lr}
00002c f7ffbffe B.W SCSI_Write10_Cmd
|L5.48|
000030 e8bd4070 POP {r4-r6,lr} ;90
000034 f7ffbffe B.W CBW_Decode
|L5.56|
;;;96 break;
;;;97 }
;;;98 Bot_Abort(DIR_OUT);
000038 f05f0001 MOVS.W r0,#1
|L5.60|
;;;99 Set_Scsi_Sense_Data(ILLEGAL_REQUEST, INVALID_FIELED_IN_COMMAND);
;;;100 Set_CSW (CSW_PHASE_ERROR, SEND_CSW_DISABLE);
;;;101 break;
;;;102 default:
;;;103 Bot_Abort(BOTH_DIR);
00003c f7fffffe BL Bot_Abort
;;;104 Set_Scsi_Sense_Data(ILLEGAL_REQUEST, INVALID_FIELED_IN_COMMAND);
000040 2124 MOVS r1,#0x24
000042 2005 MOVS r0,#5
000044 f7fffffe BL Set_Scsi_Sense_Data
;;;105 Set_CSW (CSW_PHASE_ERROR, SEND_CSW_DISABLE);
000048 e8bd4070 POP {r4-r6,lr}
00004c 2100 MOVS r1,#0
00004e 2002 MOVS r0,#2
000050 f7ffbffe B.W Set_CSW
|L5.84|
000054 2002 MOVS r0,#2 ;103
;;;106 break;
000056 e7f1 B |L5.60|
;;;107 }
;;;108 }
;;;109
ENDP
|L5.88|
000058 00000040 DCD ||.bss||+0x40
|L5.92|
00005c 00000000 DCD ||.data||
AREA ||i.Transfer_Data_Request||, CODE, READONLY, ALIGN=2
Transfer_Data_Request PROC
;;;254 void Transfer_Data_Request(u8* Data_Pointer, u16 Data_Len)
;;;255 {
000000 b510 PUSH {r4,lr}
000002 460c MOV r4,r1
;;;256 UserToPMABufferCopy(Data_Pointer, ENDP1_TXADDR, Data_Len);
000004 460a MOV r2,r1
000006 2198 MOVS r1,#0x98
000008 f7fffffe BL UserToPMABufferCopy
;;;257
;;;258 SetEPTxCount(ENDP1, Data_Len);
00000c 4621 MOV r1,r4
00000e 2001 MOVS r0,#1
000010 f7fffffe BL SetEPTxCount
;;;259 SetEPTxStatus(ENDP1, EP_TX_VALID);
000014 2130 MOVS r1,#0x30
000016 2001 MOVS r0,#1
000018 f7fffffe BL SetEPTxStatus
;;;260 Bot_State = BOT_DATA_IN_LAST;
00001c 4804 LDR r0,|L6.48|
00001e 2103 MOVS r1,#3
000020 7001 STRB r1,[r0,#0] ; Bot_State
;;;261 CSW.dDataResidue -= Data_Len;
000022 4804 LDR r0,|L6.52|
000024 6881 LDR r1,[r0,#8] ; CSW
000026 1b09 SUBS r1,r1,r4
;;;262 CSW.bStatus = CSW_CMD_PASSED;
000028 6081 STR r1,[r0,#8] ; CSW
00002a 2100 MOVS r1,#0
00002c 7301 STRB r1,[r0,#0xc] ; CSW
;;;263 }
00002e bd10 POP {r4,pc}
;;;264
ENDP
|L6.48|
000030 00000000 DCD ||.data||
|L6.52|
000034 00000060 DCD ||.bss||+0x60
AREA ||.data||, DATA, ALIGN=1
Bot_State
000000 0000 DCB 0x00,0x00
Data_Len
000002 0000 DCB 0x00,0x00
AREA ||.bss||, DATA, NOINIT, ALIGN=2
Bulk_Data_Buff
% 64
||CBW||
% 32
||CSW||
% 16
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -