📄 usb_bot.txt
字号:
;;;200 /*Unsupported command*/
;;;201
;;;202 case SCSI_MODE_SELECT10:
;;;203 SCSI_Mode_Select10_Cmd(CBW.bLUN);
;;;204 break;
;;;205 case SCSI_MODE_SELECT6:
;;;206 SCSI_Mode_Select6_Cmd(CBW.bLUN);
;;;207 break;
;;;208
;;;209 case SCSI_SEND_DIAGNOSTIC:
;;;210 SCSI_Send_Diagnostic_Cmd(CBW.bLUN);
;;;211 break;
;;;212 case SCSI_READ6:
;;;213 SCSI_Read6_Cmd(CBW.bLUN);
;;;214 break;
;;;215 case SCSI_READ12:
;;;216 SCSI_Read12_Cmd(CBW.bLUN);
;;;217 break;
;;;218 case SCSI_READ16:
;;;219 SCSI_Read16_Cmd(CBW.bLUN);
;;;220 break;
;;;221 case SCSI_READ_CAPACITY16:
;;;222 SCSI_READ_CAPACITY16_Cmd(CBW.bLUN);
;;;223 break;
;;;224 case SCSI_WRITE6:
;;;225 SCSI_Write6_Cmd(CBW.bLUN);
;;;226 break;
;;;227 case SCSI_WRITE12:
;;;228 SCSI_Write12_Cmd(CBW.bLUN);
;;;229 break;
;;;230 case SCSI_WRITE16:
;;;231 SCSI_Write16_Cmd(CBW.bLUN);
;;;232 break;
;;;233 case SCSI_VERIFY12:
;;;234 SCSI_Verify12_Cmd(CBW.bLUN);
;;;235 break;
;;;236 case SCSI_VERIFY16:
;;;237 SCSI_Verify16_Cmd(CBW.bLUN);
;;;238 break;
;;;239
;;;240 default:
;;;241 {
;;;242 Bot_Abort(BOTH_DIR);
;;;243 Set_Scsi_Sense_Data(CBW.bLUN, ILLEGAL_REQUEST, INVALID_COMMAND);
;;;244 Set_CSW (CSW_CMD_FAILED, SEND_CSW_DISABLE);
;;;245 }
;;;246 }
;;;247 }
;;;248 }
;;;249 else
;;;250 {
;;;251 /* Invalid CBW */
;;;252 Bot_Abort(BOTH_DIR);
;;;253 Set_Scsi_Sense_Data(CBW.bLUN, ILLEGAL_REQUEST, INVALID_COMMAND);
00007e 2105 MOVS r1,#5
000080 f7fff7ff BL Set_Scsi_Sense_Data
;;;254 Set_CSW (CSW_CMD_FAILED, SEND_CSW_DISABLE);
000084 e8bde8bd POP {r4-r6,lr}
000088 2100 MOVS r1,#0
00008a 2001 MOVS r0,#1
00008c f7fff7ff B.W Set_CSW
|L4.144|
000090 2925 CMP r1,#0x25 ;159
000092 d05b BEQ |L4.332|
000094 dc20 BGT |L4.216|
000096 2915 CMP r1,#0x15 ;159
000098 d040 BEQ |L4.284|
00009a dc13 BGT |L4.196|
00009c 2908 CMP r1,#8 ;159
00009e d03d BEQ |L4.284|
0000a0 dc08 BGT |L4.180|
0000a2 b3b1 CBZ r1,|L4.274|
0000a4 2903 CMP r1,#3 ;159
0000a6 d03d BEQ |L4.292|
0000a8 2904 CMP r1,#4 ;159
0000aa d165 BNE |L4.376|
0000ac e8bde8bd POP {r4-r6,lr} ;198
0000b0 f7fff7ff B.W SCSI_Format_Cmd
|L4.180|
0000b4 290a CMP r1,#0xa ;159
0000b6 d031 BEQ |L4.284|
0000b8 2912 CMP r1,#0x12 ;159
0000ba d15d BNE |L4.376|
0000bc e8bde8bd POP {r4-r6,lr} ;165
0000c0 f7fff7ff B.W SCSI_Inquiry_Cmd
|L4.196|
0000c4 391a SUBS r1,r1,#0x1a ;159
0000c6 290a CMP r1,#0xa ;159
0000c8 d256 BCS |L4.376|
0000ca e8dfe8df TBB [pc,r1] ;159
0000ce 332f5527 DCB 0x33,0x2f,0x55,0x27
0000d2 2f555555 DCB 0x2f,0x55,0x55,0x55
0000d6 553b DCB 0x55,0x3b
|L4.216|
0000d8 298a CMP r1,#0x8a ;159
0000da d01f BEQ |L4.284|
0000dc dc11 BGT |L4.258|
0000de 2955 CMP r1,#0x55 ;159
0000e0 d01c BEQ |L4.284|
0000e2 dc09 BGT |L4.248|
0000e4 2928 CMP r1,#0x28 ;159
0000e6 d039 BEQ |L4.348|
0000e8 292a CMP r1,#0x2a ;159
0000ea d03f BEQ |L4.364|
0000ec 292f CMP r1,#0x2f ;159
0000ee d143 BNE |L4.376|
0000f0 e8bde8bd POP {r4-r6,lr} ;195
0000f4 f7fff7ff B.W SCSI_Verify10_Cmd
|L4.248|
0000f8 295a CMP r1,#0x5a ;159
0000fa d01f BEQ |L4.316|
0000fc 2988 CMP r1,#0x88 ;159
0000fe d13b BNE |L4.376|
000100 e00c B |L4.284|
|L4.258|
000102 29a8 CMP r1,#0xa8 ;159
000104 d00a BEQ |L4.284|
000106 dc05 BGT |L4.276|
000108 298f CMP r1,#0x8f ;159
00010a d007 BEQ |L4.284|
00010c 299e CMP r1,#0x9e ;159
00010e d133 BNE |L4.376|
000110 e004 B |L4.284|
|L4.274|
000112 e01f B |L4.340|
|L4.276|
000114 29aa CMP r1,#0xaa ;159
000116 d001 BEQ |L4.284|
000118 29af CMP r1,#0xaf ;159
00011a d12d BNE |L4.376|
|L4.284|
00011c e8bde8bd POP {r4-r6,lr} ;237
000120 f7fff7ff B.W SCSI_Invalid_Cmd
|L4.292|
000124 e8bde8bd POP {r4-r6,lr} ;162
000128 f7fff7ff B.W SCSI_RequestSense_Cmd
00012c e8bde8bd POP {r4-r6,lr} ;171
000130 f7fff7ff B.W SCSI_Start_Stop_Unit_Cmd
000134 e8bde8bd POP {r4-r6,lr} ;174
000138 f7fff7ff B.W SCSI_ModeSense6_Cmd
|L4.316|
00013c e8bde8bd POP {r4-r6,lr} ;177
000140 f7fff7ff B.W SCSI_ModeSense10_Cmd
000144 e8bde8bd POP {r4-r6,lr} ;180
000148 f7fff7ff B.W SCSI_ReadFormatCapacity_Cmd
|L4.332|
00014c e8bde8bd POP {r4-r6,lr} ;183
000150 f7fff7ff B.W SCSI_ReadCapacity10_Cmd
|L4.340|
000154 e8bde8bd POP {r4-r6,lr} ;186
000158 f7fff7ff B.W SCSI_TestUnitReady_Cmd
|L4.348|
00015c e000 B |L4.352|
|L4.350|
00015e e00b B |L4.376|
|L4.352|
000160 e9d3e9d3 LDRD r1,r2,[r3,#4] ;189
000164 e8bde8bd POP {r4-r6,lr} ;189
000168 f7fff7ff B.W SCSI_Read10_Cmd
|L4.364|
00016c e9d3e9d3 LDRD r1,r2,[r3,#4] ;192
000170 e8bde8bd POP {r4-r6,lr} ;192
000174 f7fff7ff B.W SCSI_Write10_Cmd
|L4.376|
000178 2002 MOVS r0,#2 ;252
00017a f7fff7ff BL Bot_Abort
00017e 7b60 LDRB r0,[r4,#0xd] ;253 ; CBW
000180 2220 MOVS r2,#0x20 ;253
000182 e77c B |L4.126|
;;;255 }
;;;256 }
;;;257
ENDP
|L4.388|
000184 00000000 DCD ||.data||
|L4.392|
000188 00000040 DCD ||.bss||+0x40
|L4.396|
00018c 43425355 DCD 0x43425355
|L4.400|
000190 00000000 DCD Max_Lun
AREA ||i.Mass_Storage_Out||, CODE, READONLY, ALIGN=2
Mass_Storage_Out PROC
;;;81 void Mass_Storage_Out(void)
;;;82 {
000000 b570 PUSH {r4-r6,lr}
;;;83 u8 CMD;
;;;84 CMD = CBW.CB[0];
000002 4c17 LDR r4,|L5.96|
;;;85 Data_Len = GetEPRxCount(ENDP2);
000004 2002 MOVS r0,#2
000006 7be6 LDRB r6,[r4,#0xf] ;84 ; CBW
000008 f7fff7ff BL GetEPRxCount
00000c 4d15 LDR r5,|L5.100|
;;;86
;;;87 PMAToUserBufferCopy(Bulk_Data_Buff, ENDP2_RXADDR, Data_Len);
00000e b282 UXTH r2,r0
000010 8068 STRH r0,[r5,#2] ;85 ; Data_Len
000012 21d8 MOVS r1,#0xd8
000014 f1a4f1a4 SUB r0,r4,#0x40
000018 f7fff7ff BL PMAToUserBufferCopy
;;;88
;;;89 switch (Bot_State)
00001c 7828 LDRB r0,[r5,#0] ; Bot_State
00001e b150 CBZ r0,|L5.54|
000020 2801 CMP r0,#1
000022 d11a BNE |L5.90|
;;;90 {
;;;91 case BOT_IDLE:
;;;92 CBW_Decode();
;;;93 break;
;;;94 case BOT_DATA_OUT:
;;;95 if (CMD == SCSI_WRITE10)
000024 2e2a CMP r6,#0x2a
000026 d10a BNE |L5.62|
;;;96 {
;;;97 SCSI_Write10_Cmd(CBW.bLUN , SCSI_LBA , SCSI_BlkLen);
000028 e9d5e9d5 LDRD r1,r2,[r5,#4]
00002c 7b60 LDRB r0,[r4,#0xd] ; CBW
00002e e8bde8bd POP {r4-r6,lr}
000032 f7fff7ff B.W SCSI_Write10_Cmd
|L5.54|
000036 e8bde8bd POP {r4-r6,lr} ;92
00003a f7fff7ff B.W CBW_Decode
|L5.62|
;;;98 break;
;;;99 }
;;;100 Bot_Abort(DIR_OUT);
00003e 2001 MOVS r0,#1
|L5.64|
;;;101 Set_Scsi_Sense_Data(CBW.bLUN, ILLEGAL_REQUEST, INVALID_FIELED_IN_COMMAND);
;;;102 Set_CSW (CSW_PHASE_ERROR, SEND_CSW_DISABLE);
;;;103 break;
;;;104 default:
;;;105 Bot_Abort(BOTH_DIR);
000040 f7fff7ff BL Bot_Abort
;;;106 Set_Scsi_Sense_Data(CBW.bLUN, ILLEGAL_REQUEST, INVALID_FIELED_IN_COMMAND);
000044 7b60 LDRB r0,[r4,#0xd] ; CBW
000046 2224 MOVS r2,#0x24
000048 2105 MOVS r1,#5
00004a f7fff7ff BL Set_Scsi_Sense_Data
;;;107 Set_CSW (CSW_PHASE_ERROR, SEND_CSW_DISABLE);
00004e e8bde8bd POP {r4-r6,lr}
000052 2100 MOVS r1,#0
000054 2002 MOVS r0,#2
000056 f7fff7ff B.W Set_CSW
|L5.90|
00005a 2002 MOVS r0,#2 ;105
;;;108 break;
00005c e7f0 B |L5.64|
;;;109 }
;;;110 }
;;;111
ENDP
00005e 0000 DCW 0x0000
|L5.96|
000060 00000040 DCD ||.bss||+0x40
|L5.100|
000064 00000000 DCD ||.data||
AREA ||i.Transfer_Data_Request||, CODE, READONLY, ALIGN=2
Transfer_Data_Request PROC
;;;266 void Transfer_Data_Request(u8* Data_Pointer, u16 Data_Len)
;;;267 {
000000 b510 PUSH {r4,lr}
000002 460c MOV r4,r1
;;;268 UserToPMABufferCopy(Data_Pointer, ENDP1_TXADDR, Data_Len);
000004 460a MOV r2,r1
000006 2198 MOVS r1,#0x98
000008 f7fff7ff BL UserToPMABufferCopy
;;;269
;;;270 SetEPTxCount(ENDP1, Data_Len);
00000c 4621 MOV r1,r4
00000e 2001 MOVS r0,#1
000010 f7fff7ff BL SetEPTxCount
;;;271 SetEPTxStatus(ENDP1, EP_TX_VALID);
000014 2130 MOVS r1,#0x30
000016 2001 MOVS r0,#1
000018 f7fff7ff BL SetEPTxStatus
;;;272 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
;;;273 CSW.dDataResidue -= Data_Len;
000022 4804 LDR r0,|L6.52|
000024 6881 LDR r1,[r0,#8] ; CSW
000026 1b09 SUBS r1,r1,r4
;;;274 CSW.bStatus = CSW_CMD_PASSED;
000028 6081 STR r1,[r0,#8] ; CSW
00002a 2100 MOVS r1,#0
00002c 7301 STRB r1,[r0,#0xc] ; CSW
;;;275 }
00002e bd10 POP {r4,pc}
;;;276
ENDP
|L6.48|
000030 00000000 DCD ||.data||
|L6.52|
000034 00000060 DCD ||.bss||+0x60
AREA ||.data||, DATA, ALIGN=2
Bot_State
000000 0000 DCB 0x00,0x00
Data_Len
000002 0000 DCB 0x00,0x00
SCSI_LBA
000004 00000000 DCD 0x00000000
SCSI_BlkLen
000008 00000000 DCD 0x00000000
AREA ||.bss||, DATA, NOINIT, ALIGN=2
Bulk_Data_Buff
% 64
||CBW||
% 32
||CSW||
% 16
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -