📄 usb_bot.txt
字号:
00011a d12d BNE |L2.376|
|L2.284|
00011c e8bd4070 POP {r4-r6,lr} ;237
000120 f7ffbffe B.W SCSI_Invalid_Cmd
|L2.292|
000124 e8bd4070 POP {r4-r6,lr} ;162
000128 f7ffbffe B.W SCSI_RequestSense_Cmd
00012c e8bd4070 POP {r4-r6,lr} ;171
000130 f7ffbffe B.W SCSI_Start_Stop_Unit_Cmd
000134 e8bd4070 POP {r4-r6,lr} ;174
000138 f7ffbffe B.W SCSI_ModeSense6_Cmd
|L2.316|
00013c e8bd4070 POP {r4-r6,lr} ;177
000140 f7ffbffe B.W SCSI_ModeSense10_Cmd
000144 e8bd4070 POP {r4-r6,lr} ;180
000148 f7ffbffe B.W SCSI_ReadFormatCapacity_Cmd
|L2.332|
00014c e8bd4070 POP {r4-r6,lr} ;183
000150 f7ffbffe B.W SCSI_ReadCapacity10_Cmd
|L2.340|
000154 e8bd4070 POP {r4-r6,lr} ;186
000158 f7ffbffe B.W SCSI_TestUnitReady_Cmd
|L2.348|
00015c e000 B |L2.352|
|L2.350|
00015e e00b B |L2.376|
|L2.352|
000160 e9d31201 LDRD r1,r2,[r3,#4] ;189
000164 e8bd4070 POP {r4-r6,lr} ;189
000168 f7ffbffe B.W SCSI_Read10_Cmd
|L2.364|
00016c e9d31201 LDRD r1,r2,[r3,#4] ;192
000170 e8bd4070 POP {r4-r6,lr} ;192
000174 f7ffbffe B.W SCSI_Write10_Cmd
|L2.376|
000178 2002 MOVS r0,#2 ;252
00017a f7fffffe BL Bot_Abort
00017e 7b60 LDRB r0,[r4,#0xd] ;253 ; CBW
000180 2220 MOVS r2,#0x20 ;253
000182 e77c B |L2.126|
;;;255 }
;;;256 }
;;;257
ENDP
|L2.388|
DCD ||.data||
|L2.392|
DCD ||.bss||+0x40
|L2.396|
DCD 0x43425355
|L2.400|
DCD Max_Lun
AREA ||i.Mass_Storage_In||, CODE, READONLY, ALIGN=2
Mass_Storage_In PROC
;;;46 *******************************************************************************/
;;;47 void Mass_Storage_In(void)
000000 b510 PUSH {r4,lr}
;;;48 {
;;;49 switch (Bot_State)
000002 4912 LDR r1,|L3.76|
000004 7808 LDRB r0,[r1,#0] ; Bot_State
000006 2802 CMP r0,#2
000008 d00a BEQ |L3.32|
;;;50 {
;;;51 case BOT_CSW_Send:
;;;52 case BOT_ERROR:
;;;53 Bot_State = BOT_IDLE;
;;;54 SetEPRxStatus(ENDP2, EP_RX_VALID);/* enable the Endpoint to recive the next cmd*/
00000a f44f5440 MOV r4,#0x3000
00000e 2803 CMP r0,#3 ;49
000010 d011 BEQ |L3.54|
000012 2804 CMP r0,#4 ;49
000014 d001 BEQ |L3.26|
000016 2805 CMP r0,#5 ;49
000018 d117 BNE |L3.74|
|L3.26|
00001a 2000 MOVS r0,#0 ;53
00001c 7008 STRB r0,[r1,#0] ;53
;;;55 break;
00001e e00e B |L3.62|
|L3.32|
;;;56 case BOT_DATA_IN:
;;;57 switch (CBW.CB[0])
000020 480b LDR r0,|L3.80|
000022 7bc2 LDRB r2,[r0,#0xf] ; CBW
000024 2a28 CMP r2,#0x28
000026 d110 BNE |L3.74|
;;;58 {
;;;59 case SCSI_READ10:
;;;60 SCSI_Read10_Cmd(CBW.bLUN , SCSI_LBA , SCSI_BlkLen);
000028 688a LDR r2,[r1,#8] ; SCSI_BlkLen
00002a 7b40 LDRB r0,[r0,#0xd] ; CBW
00002c 6849 LDR r1,[r1,#4] ; SCSI_LBA
00002e e8bd4010 POP {r4,lr}
000032 f7ffbffe B.W SCSI_Read10_Cmd
|L3.54|
;;;61 break;
;;;62 }
;;;63 break;
;;;64 case BOT_DATA_IN_LAST:
;;;65 Set_CSW (CSW_CMD_PASSED, SEND_CSW_ENABLE);
000036 2101 MOVS r1,#1
000038 2000 MOVS r0,#0
00003a f7fffffe BL Set_CSW
|L3.62|
;;;66 SetEPRxStatus(ENDP2, EP_RX_VALID);
00003e 4621 MOV r1,r4
000040 e8bd4010 POP {r4,lr}
000044 2002 MOVS r0,#2
000046 f7ffbffe B.W SetEPRxStatus
|L3.74|
;;;67 break;
;;;68
;;;69 default:
;;;70 break;
;;;71 }
;;;72 }
00004a bd10 POP {r4,pc}
;;;73
ENDP
|L3.76|
DCD ||.data||
|L3.80|
DCD ||.bss||+0x40
AREA ||i.Mass_Storage_Out||, CODE, READONLY, ALIGN=2
Mass_Storage_Out PROC
;;;80 *******************************************************************************/
;;;81 void Mass_Storage_Out(void)
000000 b570 PUSH {r4-r6,lr}
;;;82 {
;;;83 u8 CMD;
;;;84 CMD = CBW.CB[0];
000002 4c17 LDR r4,|L4.96|
;;;85 Data_Len = GetEPRxCount(ENDP2);
000004 2002 MOVS r0,#2
000006 7be6 LDRB r6,[r4,#0xf] ;84 ; CBW
000008 f7fffffe BL GetEPRxCount
00000c 4d15 LDR r5,|L4.100|
;;;86
;;;87 PMAToUserBufferCopy(Bulk_Data_Buff, ENDP2_RXADDR, Data_Len);
00000e b282 UXTH r2,r0
000010 8068 STRH r0,[r5,#2] ;85
000012 21d8 MOVS r1,#0xd8
000014 f1a40040 SUB r0,r4,#0x40
000018 f7fffffe BL PMAToUserBufferCopy
;;;88
;;;89 switch (Bot_State)
00001c 7828 LDRB r0,[r5,#0] ; Bot_State
00001e b150 CBZ r0,|L4.54|
000020 2801 CMP r0,#1
000022 d11a BNE |L4.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 |L4.62|
;;;96 {
;;;97 SCSI_Write10_Cmd(CBW.bLUN , SCSI_LBA , SCSI_BlkLen);
000028 e9d51201 LDRD r1,r2,[r5,#4]
00002c 7b60 LDRB r0,[r4,#0xd] ; CBW
00002e e8bd4070 POP {r4-r6,lr}
000032 f7ffbffe B.W SCSI_Write10_Cmd
|L4.54|
000036 e8bd4070 POP {r4-r6,lr} ;92
00003a f7ffbffe B.W CBW_Decode
|L4.62|
;;;98 break;
;;;99 }
;;;100 Bot_Abort(DIR_OUT);
00003e 2001 MOVS r0,#1
|L4.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 f7fffffe 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 f7fffffe BL Set_Scsi_Sense_Data
;;;107 Set_CSW (CSW_PHASE_ERROR, SEND_CSW_DISABLE);
00004e e8bd4070 POP {r4-r6,lr}
000052 2100 MOVS r1,#0
000054 2002 MOVS r0,#2
000056 f7ffbffe B.W Set_CSW
|L4.90|
00005a 2002 MOVS r0,#2 ;105
;;;108 break;
00005c e7f0 B |L4.64|
;;;109 }
;;;110 }
;;;111
ENDP
00005e 0000 DCW 0x0000
|L4.96|
DCD ||.bss||+0x40
|L4.100|
DCD ||.data||
AREA ||i.Set_CSW||, CODE, READONLY, ALIGN=2
Set_CSW PROC
;;;284 *******************************************************************************/
;;;285 void Set_CSW (u8 CSW_Status, u8 Send_Permission)
000000 b510 PUSH {r4,lr}
;;;286 {
000002 460c MOV r4,r1
;;;287 CSW.dSignature = BOT_CSW_SIGNATURE;
000004 490e LDR r1,|L5.64|
000006 4a0d LDR r2,|L5.60|
;;;288 CSW.bStatus = CSW_Status;
000008 600a STR r2,[r1,#0] ; CSW
00000a 7308 STRB r0,[r1,#0xc]
;;;289
;;;290 UserToPMABufferCopy(((u8 *)& CSW), ENDP1_TXADDR, CSW_DATA_LENGTH);
00000c 220d MOVS r2,#0xd
00000e 2198 MOVS r1,#0x98
000010 480b LDR r0,|L5.64|
000012 f7fffffe BL UserToPMABufferCopy
;;;291
;;;292 SetEPTxCount(ENDP1, CSW_DATA_LENGTH);
000016 210d MOVS r1,#0xd
000018 2001 MOVS r0,#1
00001a f7fffffe BL SetEPTxCount
;;;293 Bot_State = BOT_ERROR;
00001e 2105 MOVS r1,#5
000020 4808 LDR r0,|L5.68|
;;;294 if (Send_Permission)
000022 2c00 CMP r4,#0
000024 7001 STRB r1,[r0,#0] ;293
000026 d007 BEQ |L5.56|
;;;295 {
;;;296 Bot_State = BOT_CSW_Send;
000028 2104 MOVS r1,#4
00002a 7001 STRB r1,[r0,#0]
;;;297 SetEPTxStatus(ENDP1, EP_TX_VALID);
00002c 2130 MOVS r1,#0x30
00002e e8bd4010 POP {r4,lr}
000032 2001 MOVS r0,#1
000034 f7ffbffe B.W SetEPTxStatus
|L5.56|
;;;298 }
;;;299 }
000038 bd10 POP {r4,pc}
;;;300
ENDP
00003a 0000 DCW 0x0000
|L5.60|
DCD 0x53425355
|L5.64|
DCD ||.bss||+0x60
|L5.68|
DCD ||.data||
AREA ||i.Transfer_Data_Request||, CODE, READONLY, ALIGN=2
Transfer_Data_Request PROC
;;;265 *******************************************************************************/
;;;266 void Transfer_Data_Request(u8* Data_Pointer, u16 Data_Len)
000000 b510 PUSH {r4,lr}
;;;267 {
000002 460c MOV r4,r1
;;;268 UserToPMABufferCopy(Data_Pointer, ENDP1_TXADDR, Data_Len);
000004 460a MOV r2,r1
000006 2198 MOVS r1,#0x98
000008 f7fffffe BL UserToPMABufferCopy
;;;269
;;;270 SetEPTxCount(ENDP1, Data_Len);
00000c 4621 MOV r1,r4
00000e 2001 MOVS r0,#1
000010 f7fffffe BL SetEPTxCount
;;;271 SetEPTxStatus(ENDP1, EP_TX_VALID);
000014 2130 MOVS r1,#0x30
000016 2001 MOVS r0,#1
000018 f7fffffe BL SetEPTxStatus
;;;272 Bot_State = BOT_DATA_IN_LAST;
00001c 4904 LDR r1,|L6.48|
00001e 2003 MOVS r0,#3
000020 7008 STRB r0,[r1,#0]
;;;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]
;;;275 }
00002e bd10 POP {r4,pc}
;;;276
ENDP
|L6.48|
DCD ||.data||
|L6.52|
DCD ||.bss||+0x60
AREA ||.bss||, DATA, NOINIT, ALIGN=2
Bulk_Data_Buff
% 64
||CBW||
% 32
||CSW||
% 16
AREA ||.data||, DATA, ALIGN=2
Bot_State
000000 0000 DCB 0x00,0x00
Data_Len
000002 0000 DCB 0x00,0x00
SCSI_LBA
DCD 0x00000000
SCSI_BlkLen
DCD 0x00000000
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -