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

📄 usb_scsi.txt

📁 STM32F103ZET6+UCOSII+UCGUI源码
💻 TXT
📖 第 1 页 / 共 3 页
字号:
;;;173      {
;;;174        Request_Sense_data_Length = CBW.CB[4];
;;;175      }
;;;176      else
;;;177      {
;;;178        Request_Sense_data_Length = REQUEST_SENSE_DATA_LEN;
000008  2112              MOVS     r1,#0x12
                  |L10.10|
;;;179      }
;;;180      Transfer_Data_Request(Scsi_Sense_Data, Request_Sense_data_Length);
00000a  4802              LDR      r0,|L10.20|
00000c  f7ffbffe          B.W      Transfer_Data_Request
;;;181    }
;;;182    
                          ENDP

                  |L10.16|
                          DCD      ||CBW||
                  |L10.20|
                          DCD      Scsi_Sense_Data

                          AREA ||i.SCSI_Start_Stop_Unit_Cmd||, CODE, READONLY, ALIGN=1

                  SCSI_Start_Stop_Unit_Cmd PROC
;;;203    *******************************************************************************/
;;;204    void SCSI_Start_Stop_Unit_Cmd(u8 lun)
000000  2101              MOVS     r1,#1
;;;205    {
;;;206      Set_CSW (CSW_CMD_PASSED, SEND_CSW_ENABLE);
000002  2000              MOVS     r0,#0
000004  f7ffbffe          B.W      Set_CSW
;;;207    }
;;;208    
                          ENDP


                          AREA ||i.SCSI_TestUnitReady_Cmd||, CODE, READONLY, ALIGN=2

                  SCSI_TestUnitReady_Cmd PROC
;;;325    *******************************************************************************/
;;;326    void SCSI_TestUnitReady_Cmd(u8 lun)
000000  b510              PUSH     {r4,lr}
;;;327    {
;;;328      if (MAL_GetStatus(lun))
000002  f7fffffe          BL       MAL_GetStatus
000006  b168              CBZ      r0,|L12.36|
000008  4809              LDR      r0,|L12.48|
00000a  2102              MOVS     r1,#2
00000c  7081              STRB     r1,[r0,#2]
00000e  213a              MOVS     r1,#0x3a
000010  7301              STRB     r1,[r0,#0xc]
;;;329      {
;;;330        Set_Scsi_Sense_Data(CBW.bLUN, NOT_READY, MEDIUM_NOT_PRESENT);
;;;331        Set_CSW (CSW_CMD_FAILED, SEND_CSW_ENABLE);
000012  2101              MOVS     r1,#1
000014  4608              MOV      r0,r1
000016  f7fffffe          BL       Set_CSW
;;;332        Bot_Abort(DIR_IN);
00001a  e8bd4010          POP      {r4,lr}
00001e  2000              MOVS     r0,#0
000020  f7ffbffe          B.W      Bot_Abort
                  |L12.36|
;;;333        return;
;;;334      }
;;;335      else
;;;336      {
;;;337        Set_CSW (CSW_CMD_PASSED, SEND_CSW_ENABLE);
000024  2101              MOVS     r1,#1
000026  e8bd4010          POP      {r4,lr}
00002a  2000              MOVS     r0,#0
00002c  f7ffbffe          B.W      Set_CSW
;;;338      }
;;;339    }
;;;340    /*******************************************************************************
                          ENDP

                  |L12.48|
                          DCD      Scsi_Sense_Data

                          AREA ||i.SCSI_Valid_Cmd||, CODE, READONLY, ALIGN=2

                  SCSI_Valid_Cmd PROC
;;;307    *******************************************************************************/
;;;308    void SCSI_Valid_Cmd(u8 lun)
000000  b510              PUSH     {r4,lr}
;;;309    {
;;;310      if (CBW.dDataLength != 0)
000002  480a              LDR      r0,|L13.44|
000004  6880              LDR      r0,[r0,#8]  ; CBW
000006  b150              CBZ      r0,|L13.30|
;;;311      {
;;;312        Bot_Abort(BOTH_DIR);
000008  2002              MOVS     r0,#2
00000a  f7fffffe          BL       Bot_Abort
00000e  4808              LDR      r0,|L13.48|
000010  2105              MOVS     r1,#5
000012  7081              STRB     r1,[r0,#2]
000014  2120              MOVS     r1,#0x20
000016  7301              STRB     r1,[r0,#0xc]
;;;313        Set_Scsi_Sense_Data(CBW.bLUN, ILLEGAL_REQUEST, INVALID_COMMAND);
;;;314        Set_CSW (CSW_CMD_FAILED, SEND_CSW_DISABLE);
000018  2100              MOVS     r1,#0
00001a  2001              MOVS     r0,#1
00001c  e001              B        |L13.34|
                  |L13.30|
;;;315      }
;;;316      else
;;;317        Set_CSW (CSW_CMD_PASSED, SEND_CSW_ENABLE);
00001e  2101              MOVS     r1,#1
000020  2000              MOVS     r0,#0
                  |L13.34|
000022  e8bd4010          POP      {r4,lr}
000026  f7ffbffe          B.W      Set_CSW
;;;318    }
;;;319    /*******************************************************************************
                          ENDP

00002a  0000              DCW      0x0000
                  |L13.44|
                          DCD      ||CBW||
                  |L13.48|
                          DCD      Scsi_Sense_Data

                          AREA ||i.SCSI_Verify10_Cmd||, CODE, READONLY, ALIGN=2

                  SCSI_Verify10_Cmd PROC
;;;287    *******************************************************************************/
;;;288    void SCSI_Verify10_Cmd(u8 lun)
000000  b510              PUSH     {r4,lr}
;;;289    {
;;;290      if ((CBW.dDataLength == 0) && !(CBW.CB[1] & BLKVFY))/* BLKVFY not set*/
000002  480b              LDR      r0,|L14.48|
000004  6881              LDR      r1,[r0,#8]  ; CBW
000006  b929              CBNZ     r1,|L14.20|
000008  7c00              LDRB     r0,[r0,#0x10]  ; CBW
00000a  0740              LSLS     r0,r0,#29
00000c  d402              BMI      |L14.20|
;;;291      {
;;;292        Set_CSW (CSW_CMD_PASSED, SEND_CSW_ENABLE);
00000e  2101              MOVS     r1,#1
000010  2000              MOVS     r0,#0
000012  e009              B        |L14.40|
                  |L14.20|
;;;293      }
;;;294      else
;;;295      {
;;;296        Bot_Abort(BOTH_DIR);
000014  2002              MOVS     r0,#2
000016  f7fffffe          BL       Bot_Abort
00001a  4806              LDR      r0,|L14.52|
00001c  2105              MOVS     r1,#5
00001e  7081              STRB     r1,[r0,#2]
000020  2124              MOVS     r1,#0x24
000022  7301              STRB     r1,[r0,#0xc]
;;;297        Set_Scsi_Sense_Data(CBW.bLUN, ILLEGAL_REQUEST, INVALID_FIELED_IN_COMMAND);
;;;298        Set_CSW (CSW_CMD_FAILED, SEND_CSW_DISABLE);
000024  2100              MOVS     r1,#0
000026  2001              MOVS     r0,#1
                  |L14.40|
000028  e8bd4010          POP      {r4,lr}
00002c  f7ffbffe          B.W      Set_CSW
;;;299      }
;;;300    }
;;;301    /*******************************************************************************
                          ENDP

                  |L14.48|
                          DCD      ||CBW||
                  |L14.52|
                          DCD      Scsi_Sense_Data

                          AREA ||i.SCSI_Write10_Cmd||, CODE, READONLY, ALIGN=2

                  SCSI_Write10_Cmd PROC
;;;251    *******************************************************************************/
;;;252    void SCSI_Write10_Cmd(u8 lun , u32 LBA , u32 BlockNbr)
000000  b570              PUSH     {r4-r6,lr}
;;;253    {
;;;254    
;;;255      if (Bot_State == BOT_IDLE)
000002  4d16              LDR      r5,|L15.92|
000004  782c              LDRB     r4,[r5,#0]  ; Bot_State
000006  bb14              CBNZ     r4,|L15.78|
;;;256      {
;;;257        if (!(SCSI_Address_Management(CBW.bLUN, SCSI_WRITE10 , LBA, BlockNbr)))/*address out of range*/
000008  4c15              LDR      r4,|L15.96|
00000a  4613              MOV      r3,r2
00000c  460a              MOV      r2,r1
00000e  7b60              LDRB     r0,[r4,#0xd]  ; CBW
000010  212a              MOVS     r1,#0x2a
000012  f7fffffe          BL       SCSI_Address_Management
000016  2800              CMP      r0,#0
000018  d01f              BEQ      |L15.90|
;;;258        {
;;;259          return;
;;;260        }
;;;261    
;;;262        if ((CBW.bmFlags & 0x80) == 0)
00001a  7b20              LDRB     r0,[r4,#0xc]  ; CBW
00001c  0600              LSLS     r0,r0,#24
00001e  d408              BMI      |L15.50|
;;;263        {
;;;264          Bot_State = BOT_DATA_OUT;
000020  2001              MOVS     r0,#1
000022  7028              STRB     r0,[r5,#0]
;;;265          SetEPRxStatus(ENDP2, EP_RX_VALID);
000024  e8bd4070          POP      {r4-r6,lr}
000028  f44f5140          MOV      r1,#0x3000
00002c  2002              MOVS     r0,#2
00002e  f7ffbffe          B.W      SetEPRxStatus
                  |L15.50|
;;;266        }
;;;267        else
;;;268        {
;;;269          Bot_Abort(DIR_IN);
000032  2000              MOVS     r0,#0
000034  f7fffffe          BL       Bot_Abort
000038  480a              LDR      r0,|L15.100|
00003a  2105              MOVS     r1,#5
00003c  7081              STRB     r1,[r0,#2]
00003e  2124              MOVS     r1,#0x24
000040  7301              STRB     r1,[r0,#0xc]
;;;270          Set_Scsi_Sense_Data(CBW.bLUN, ILLEGAL_REQUEST, INVALID_FIELED_IN_COMMAND);
;;;271          Set_CSW (CSW_CMD_FAILED, SEND_CSW_DISABLE);
000042  e8bd4070          POP      {r4-r6,lr}
000046  2100              MOVS     r1,#0
000048  2001              MOVS     r0,#1
00004a  f7ffbffe          B.W      Set_CSW
                  |L15.78|
;;;272        }
;;;273        return;
;;;274      }
;;;275      else if (Bot_State == BOT_DATA_OUT)
00004e  2c01              CMP      r4,#1
000050  d103              BNE      |L15.90|
;;;276      {
;;;277        Write_Memory(lun , LBA , BlockNbr);
000052  e8bd4070          POP      {r4-r6,lr}
000056  f7ffbffe          B.W      Write_Memory
                  |L15.90|
;;;278      }
;;;279    }
00005a  bd70              POP      {r4-r6,pc}
;;;280    
                          ENDP

                  |L15.92|
                          DCD      Bot_State
                  |L15.96|
                          DCD      ||CBW||
                  |L15.100|
                          DCD      Scsi_Sense_Data

                          AREA ||i.Set_Scsi_Sense_Data||, CODE, READONLY, ALIGN=2

                  Set_Scsi_Sense_Data PROC
;;;190    *******************************************************************************/
;;;191    void Set_Scsi_Sense_Data(u8 lun, u8 Sens_Key, u8 Asc)
000000  4801              LDR      r0,|L16.8|
;;;192    {
;;;193      Scsi_Sense_Data[2] = Sens_Key;
000002  7081              STRB     r1,[r0,#2]
;;;194      Scsi_Sense_Data[12] = Asc;
000004  7302              STRB     r2,[r0,#0xc]
;;;195    }
000006  4770              BX       lr
;;;196    
                          ENDP

                  |L16.8|
                          DCD      Scsi_Sense_Data

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -