⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 usb_bot.txt

📁 STM32F103ZET6+UCOSII+UCGUI源码
💻 TXT
📖 第 1 页 / 共 2 页
字号:
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 + -