📄 usb_bot.txt
字号:
; generated by ARM C/C++ Compiler with , RVCT4.0 [Build 524] for uVision
; commandline ArmCC [--split_sections --debug -c --asm --interleave -o.\Obj\usb_bot.o --depend=.\Obj\usb_bot.d --device=DARMSTM --apcs=interwork -O3 -I..\..\include -I..\..\..\FWLib\library\inc -I..\..\..\USBLib\library\inc -I..\..\Config -I..\..\GUI\Core -I..\..\GUI\Font -I..\..\GUI\ConvertColor -I..\..\GUI\AntiAlias -I..\..\GUI\ConvertMono -I..\..\GUI\JPEG -I..\..\GUI\MemDev -I..\..\GUI\MultiLayer -I..\..\GUI\Widget -I..\..\GUI\WM -IC:\Keil\ARM\INC\ST\STM32F10x ..\..\source\usb_bot.c]
THUMB
AREA ||i.Bot_Abort||, CODE, READONLY, ALIGN=1
Bot_Abort PROC
;;;307 *******************************************************************************/
;;;308 void Bot_Abort(u8 Direction)
000000 b510 PUSH {r4,lr}
;;;309 {
;;;310 switch (Direction)
000002 b178 CBZ r0,|L1.36|
;;;311 {
;;;312 case DIR_IN :
;;;313 SetEPTxStatus(ENDP1, EP_TX_STALL);
;;;314 break;
;;;315 case DIR_OUT :
;;;316 SetEPRxStatus(ENDP2, EP_RX_STALL);
000004 f44f5480 MOV r4,#0x1000
000008 2801 CMP r0,#1 ;310
00000a d005 BEQ |L1.24|
00000c 2802 CMP r0,#2 ;310
00000e d10f BNE |L1.48|
;;;317 break;
;;;318 case BOTH_DIR :
;;;319 SetEPTxStatus(ENDP1, EP_TX_STALL);
000010 2110 MOVS r1,#0x10
000012 2001 MOVS r0,#1
000014 f7fffffe BL SetEPTxStatus
|L1.24|
000018 4621 MOV r1,r4 ;316
00001a e8bd4010 POP {r4,lr} ;316
00001e 2002 MOVS r0,#2 ;316
000020 f7ffbffe B.W SetEPRxStatus
|L1.36|
000024 2110 MOVS r1,#0x10 ;313
000026 e8bd4010 POP {r4,lr} ;313
00002a 2001 MOVS r0,#1 ;313
00002c f7ffbffe B.W SetEPTxStatus
|L1.48|
;;;320 SetEPRxStatus(ENDP2, EP_RX_STALL);
;;;321 break;
;;;322 default:
;;;323 break;
;;;324 }
;;;325 }
000030 bd10 POP {r4,pc}
;;;326
ENDP
AREA ||i.CBW_Decode||, CODE, READONLY, ALIGN=2
CBW_Decode PROC
;;;119 *******************************************************************************/
;;;120 void CBW_Decode(void)
000000 b570 PUSH {r4-r6,lr}
;;;121 {
;;;122 u32 Counter;
;;;123
;;;124 for (Counter = 0; Counter < Data_Len; Counter++)
000002 4b60 LDR r3,|L2.388|
;;;125 {
;;;126 *((u8 *)&CBW + Counter) = Bulk_Data_Buff[Counter];
000004 4c60 LDR r4,|L2.392|
000006 2000 MOVS r0,#0 ;124
000008 8859 LDRH r1,[r3,#2] ;124
00000a f1a40240 SUB r2,r4,#0x40
00000e e002 B |L2.22|
|L2.16|
000010 5c15 LDRB r5,[r2,r0]
000012 5425 STRB r5,[r4,r0]
000014 1c40 ADDS r0,r0,#1 ;124
|L2.22|
000016 4288 CMP r0,r1 ;124
000018 d3fa BCC |L2.16|
;;;127 }
;;;128 CSW.dTag = CBW.dTag;
00001a 485b LDR r0,|L2.392|
00001c 6862 LDR r2,[r4,#4] ; CBW
00001e 3020 ADDS r0,r0,#0x20
;;;129 CSW.dDataResidue = CBW.dDataLength;
000020 6042 STR r2,[r0,#4] ; CSW
000022 68a2 LDR r2,[r4,#8] ; CBW
;;;130 if (Data_Len != BOT_CBW_PACKET_LENGTH)
000024 6082 STR r2,[r0,#8] ; CSW
000026 291f CMP r1,#0x1f
000028 d007 BEQ |L2.58|
;;;131 {
;;;132 Bot_Abort(BOTH_DIR);
00002a 2002 MOVS r0,#2
00002c f7fffffe BL Bot_Abort
;;;133 /* reset the CBW.dSignature to desible the clear feature until receiving a Mass storage reset*/
;;;134 CBW.dSignature = 0;
000030 2000 MOVS r0,#0
;;;135 Set_Scsi_Sense_Data(CBW.bLUN, ILLEGAL_REQUEST, PARAMETER_LIST_LENGTH_ERROR);
000032 6020 STR r0,[r4,#0] ; CBW
000034 7b60 LDRB r0,[r4,#0xd] ; CBW
000036 221a MOVS r2,#0x1a
;;;136 Set_CSW (CSW_CMD_FAILED, SEND_CSW_DISABLE);
;;;137 return;
000038 e021 B |L2.126|
|L2.58|
;;;138 }
;;;139
;;;140 if ((CBW.CB[0] == SCSI_READ10 ) || (CBW.CB[0] == SCSI_WRITE10 ))
00003a 7be1 LDRB r1,[r4,#0xf] ; CBW
00003c 2928 CMP r1,#0x28
00003e d001 BEQ |L2.68|
000040 292a CMP r1,#0x2a
000042 d10a BNE |L2.90|
|L2.68|
;;;141 {
;;;142 /* Calculate Logical Block Address */
;;;143 SCSI_LBA = (CBW.CB[2] << 24) | (CBW.CB[3] << 16) | (CBW.CB[4] << 8) | CBW.CB[5];
000044 f8d40011 LDR r0,[r4,#0x11] ; CBW
000048 7d22 LDRB r2,[r4,#0x14] ; CBW
00004a ba00 REV r0,r0
00004c f02000ff BIC r0,r0,#0xff
000050 4310 ORRS r0,r0,r2
;;;144 /* Calculate the Number of Blocks to transfer */
;;;145 SCSI_BlkLen = (CBW.CB[7] << 8) | CBW.CB[8];
000052 6058 STR r0,[r3,#4] ; SCSI_LBA
000054 8ae0 LDRH r0,[r4,#0x16] ; CBW
000056 ba40 REV16 r0,r0
000058 6098 STR r0,[r3,#8] ; SCSI_BlkLen
|L2.90|
;;;146 }
;;;147
;;;148 if (CBW.dSignature == BOT_CBW_SIGNATURE)
00005a 4a4c LDR r2,|L2.396|
00005c 6820 LDR r0,[r4,#0] ; CBW
00005e 4290 CMP r0,r2
000060 d17d BNE |L2.350|
;;;149 {
;;;150 /* Valid CBW */
;;;151 if ((CBW.bLUN > Max_Lun) || (CBW.bCBLength < 1) || (CBW.bCBLength > 16))
000062 4a4b LDR r2,|L2.400|
000064 7b60 LDRB r0,[r4,#0xd] ; CBW
000066 6812 LDR r2,[r2,#0] ; Max_Lun
000068 4290 CMP r0,r2
00006a d803 BHI |L2.116|
00006c 7ba2 LDRB r2,[r4,#0xe] ; CBW
00006e b10a CBZ r2,|L2.116|
000070 2a10 CMP r2,#0x10
000072 d90d BLS |L2.144|
|L2.116|
;;;152 {
;;;153 Bot_Abort(BOTH_DIR);
000074 2002 MOVS r0,#2
000076 f7fffffe BL Bot_Abort
;;;154 Set_Scsi_Sense_Data(CBW.bLUN, ILLEGAL_REQUEST, INVALID_FIELED_IN_COMMAND);
00007a 7b60 LDRB r0,[r4,#0xd] ; CBW
00007c 2224 MOVS r2,#0x24
|L2.126|
;;;155 Set_CSW (CSW_CMD_FAILED, SEND_CSW_DISABLE);
;;;156 }
;;;157 else
;;;158 {
;;;159 switch (CBW.CB[0])
;;;160 {
;;;161 case SCSI_REQUEST_SENSE:
;;;162 SCSI_RequestSense_Cmd (CBW.bLUN);
;;;163 break;
;;;164 case SCSI_INQUIRY:
;;;165 SCSI_Inquiry_Cmd(CBW.bLUN);
;;;166 break;
;;;167 case SCSI_START_STOP_UNIT:
;;;168 SCSI_Start_Stop_Unit_Cmd(CBW.bLUN);
;;;169 break;
;;;170 case SCSI_ALLOW_MEDIUM_REMOVAL:
;;;171 SCSI_Start_Stop_Unit_Cmd(CBW.bLUN);
;;;172 break;
;;;173 case SCSI_MODE_SENSE6:
;;;174 SCSI_ModeSense6_Cmd (CBW.bLUN);
;;;175 break;
;;;176 case SCSI_MODE_SENSE10:
;;;177 SCSI_ModeSense10_Cmd (CBW.bLUN);
;;;178 break;
;;;179 case SCSI_READ_FORMAT_CAPACITIES:
;;;180 SCSI_ReadFormatCapacity_Cmd(CBW.bLUN);
;;;181 break;
;;;182 case SCSI_READ_CAPACITY10:
;;;183 SCSI_ReadCapacity10_Cmd(CBW.bLUN);
;;;184 break;
;;;185 case SCSI_TEST_UNIT_READY:
;;;186 SCSI_TestUnitReady_Cmd(CBW.bLUN);
;;;187 break;
;;;188 case SCSI_READ10:
;;;189 SCSI_Read10_Cmd(CBW.bLUN, SCSI_LBA , SCSI_BlkLen);
;;;190 break;
;;;191 case SCSI_WRITE10:
;;;192 SCSI_Write10_Cmd(CBW.bLUN, SCSI_LBA , SCSI_BlkLen);
;;;193 break;
;;;194 case SCSI_VERIFY10:
;;;195 SCSI_Verify10_Cmd(CBW.bLUN);
;;;196 break;
;;;197 case SCSI_FORMAT_UNIT:
;;;198 SCSI_Format_Cmd(CBW.bLUN);
;;;199 break;
;;;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 f7fffffe BL Set_Scsi_Sense_Data
;;;254 Set_CSW (CSW_CMD_FAILED, SEND_CSW_DISABLE);
000084 e8bd4070 POP {r4-r6,lr}
000088 2100 MOVS r1,#0
00008a 2001 MOVS r0,#1
00008c f7ffbffe B.W Set_CSW
|L2.144|
000090 2925 CMP r1,#0x25 ;159
000092 d05b BEQ |L2.332|
000094 dc20 BGT |L2.216|
000096 2915 CMP r1,#0x15 ;159
000098 d040 BEQ |L2.284|
00009a dc13 BGT |L2.196|
00009c 2908 CMP r1,#8 ;159
00009e d03d BEQ |L2.284|
0000a0 dc08 BGT |L2.180|
0000a2 b3b1 CBZ r1,|L2.274|
0000a4 2903 CMP r1,#3 ;159
0000a6 d03d BEQ |L2.292|
0000a8 2904 CMP r1,#4 ;159
0000aa d165 BNE |L2.376|
0000ac e8bd4070 POP {r4-r6,lr} ;198
0000b0 f7ffbffe B.W SCSI_Format_Cmd
|L2.180|
0000b4 290a CMP r1,#0xa ;159
0000b6 d031 BEQ |L2.284|
0000b8 2912 CMP r1,#0x12 ;159
0000ba d15d BNE |L2.376|
0000bc e8bd4070 POP {r4-r6,lr} ;165
0000c0 f7ffbffe B.W SCSI_Inquiry_Cmd
|L2.196|
0000c4 391a SUBS r1,r1,#0x1a ;159
0000c6 290a CMP r1,#0xa ;159
0000c8 d256 BCS |L2.376|
0000ca e8dff001 TBB [pc,r1] ;159
0000ce 332f DCB 0x33,0x2f
0000d0 55272f55 DCB 0x55,0x27,0x2f,0x55
0000d4 5555553b DCB 0x55,0x55,0x55,0x3b
|L2.216|
0000d8 298a CMP r1,#0x8a ;159
0000da d01f BEQ |L2.284|
0000dc dc11 BGT |L2.258|
0000de 2955 CMP r1,#0x55 ;159
0000e0 d01c BEQ |L2.284|
0000e2 dc09 BGT |L2.248|
0000e4 2928 CMP r1,#0x28 ;159
0000e6 d039 BEQ |L2.348|
0000e8 292a CMP r1,#0x2a ;159
0000ea d03f BEQ |L2.364|
0000ec 292f CMP r1,#0x2f ;159
0000ee d143 BNE |L2.376|
0000f0 e8bd4070 POP {r4-r6,lr} ;195
0000f4 f7ffbffe B.W SCSI_Verify10_Cmd
|L2.248|
0000f8 295a CMP r1,#0x5a ;159
0000fa d01f BEQ |L2.316|
0000fc 2988 CMP r1,#0x88 ;159
0000fe d13b BNE |L2.376|
000100 e00c B |L2.284|
|L2.258|
000102 29a8 CMP r1,#0xa8 ;159
000104 d00a BEQ |L2.284|
000106 dc05 BGT |L2.276|
000108 298f CMP r1,#0x8f ;159
00010a d007 BEQ |L2.284|
00010c 299e CMP r1,#0x9e ;159
00010e d133 BNE |L2.376|
000110 e004 B |L2.284|
|L2.274|
000112 e01f B |L2.340|
|L2.276|
000114 29aa CMP r1,#0xaa ;159
000116 d001 BEQ |L2.284|
000118 29af CMP r1,#0xaf ;159
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -