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

📄 usb_scsi.txt

📁 STM32外部SRAM用作datamemery的程序 开发环境MDK
💻 TXT
📖 第 1 页 / 共 3 页
字号:
000004  2912              CMP      r1,#0x12
000006  d900              BLS      |L7.10|
;;;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
                  |L7.10|
;;;179      }
;;;180      Transfer_Data_Request(Scsi_Sense_Data, Request_Sense_data_Length);
00000a  4802              LDR      r0,|L7.20|
00000c  f7fff7ff          B.W      Transfer_Data_Request
;;;181    }
;;;182    
                          ENDP

                  |L7.16|
000010  00000000          DCD      ||CBW||
                  |L7.20|
000014  00000000          DCD      Scsi_Sense_Data

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

                  SCSI_Start_Stop_Unit_Cmd PROC
;;;205    {
;;;206      Set_CSW (CSW_CMD_PASSED, SEND_CSW_ENABLE);
000000  2101              MOVS     r1,#1
000002  2000              MOVS     r0,#0
000004  f7fff7ff          B.W      Set_CSW
;;;207    }
;;;208    
                          ENDP


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

                  SCSI_Address_Management PROC
;;;397    bool SCSI_Address_Management(u8 lun , u8 Cmd , u32 LBA , u32 BlockNbr)
;;;398    {
000000  b570              PUSH     {r4-r6,lr}
;;;399    
;;;400      if ((LBA + BlockNbr) > Mass_Block_Count[lun] )
000002  4c16              LDR      r4,|L9.92|
000004  441a              ADD      r2,r2,r3
000006  f854f854          LDR      r6,[r4,r0,LSL #2]
00000a  2505              MOVS     r5,#5
00000c  4c14              LDR      r4,|L9.96|
00000e  42b2              CMP      r2,r6
000010  d90a              BLS      |L9.40|
;;;401      {
;;;402        if (Cmd == SCSI_WRITE10)
000012  292a              CMP      r1,#0x2a
000014  d102              BNE      |L9.28|
;;;403        {
;;;404          Bot_Abort(BOTH_DIR);
000016  2002              MOVS     r0,#2
000018  f7fff7ff          BL       Bot_Abort
                  |L9.28|
;;;405        }
;;;406        Bot_Abort(DIR_IN);
00001c  2000              MOVS     r0,#0
00001e  f7fff7ff          BL       Bot_Abort
000022  70a5              STRB     r5,[r4,#2]  ; Scsi_Sense_Data
000024  2021              MOVS     r0,#0x21
;;;407        Set_Scsi_Sense_Data(lun, ILLEGAL_REQUEST, ADDRESS_OUT_OF_RANGE);
;;;408        Set_CSW (CSW_CMD_FAILED, SEND_CSW_DISABLE);
;;;409        return (FALSE);
000026  e010              B        |L9.74|
                  |L9.40|
;;;410      }
;;;411    
;;;412    
;;;413      if (CBW.dDataLength != BlockNbr * Mass_Block_Size[lun])
000028  4e0f              LDR      r6,|L9.104|
00002a  4a0e              LDR      r2,|L9.100|
00002c  f856f856          LDR      r0,[r6,r0,LSL #2]
000030  6892              LDR      r2,[r2,#8]  ; CBW
000032  4358              MULS     r0,r3,r0
000034  4282              CMP      r2,r0
000036  d00f              BEQ      |L9.88|
;;;414      {
;;;415        if (Cmd == SCSI_WRITE10)
000038  292a              CMP      r1,#0x2a
00003a  d101              BNE      |L9.64|
;;;416        {
;;;417          Bot_Abort(BOTH_DIR);
00003c  2002              MOVS     r0,#2
00003e  e000              B        |L9.66|
                  |L9.64|
;;;418        }
;;;419        else
;;;420        {
;;;421          Bot_Abort(DIR_IN);
000040  2000              MOVS     r0,#0
                  |L9.66|
000042  f7fff7ff          BL       Bot_Abort
000046  70a5              STRB     r5,[r4,#2]  ; Scsi_Sense_Data
000048  2024              MOVS     r0,#0x24
                  |L9.74|
00004a  7320              STRB     r0,[r4,#0xc]  ; Scsi_Sense_Data
;;;422        }
;;;423        Set_Scsi_Sense_Data(CBW.bLUN, ILLEGAL_REQUEST, INVALID_FIELED_IN_COMMAND);
;;;424        Set_CSW (CSW_CMD_FAILED, SEND_CSW_DISABLE);
00004c  2100              MOVS     r1,#0
00004e  2001              MOVS     r0,#1
000050  f7fff7ff          BL       Set_CSW
;;;425        return (FALSE);
000054  2000              MOVS     r0,#0
;;;426      }
;;;427      return (TRUE);
;;;428    }
000056  bd70              POP      {r4-r6,pc}
                  |L9.88|
000058  2001              MOVS     r0,#1                 ;427
00005a  bd70              POP      {r4-r6,pc}
;;;429    /******************* (C) COPYRIGHT 2008 STMicroelectronics *****END OF FILE****/
                          ENDP

                  |L9.92|
00005c  00000000          DCD      Mass_Block_Count
                  |L9.96|
000060  00000000          DCD      Scsi_Sense_Data
                  |L9.100|
000064  00000000          DCD      ||CBW||
                  |L9.104|
000068  00000000          DCD      Mass_Block_Size

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

                  SCSI_Read10_Cmd PROC
;;;216    void SCSI_Read10_Cmd(u8 lun , u32 LBA , u32 BlockNbr)
;;;217    {
000000  e92de92d          PUSH     {r4-r8,lr}
;;;218    
;;;219      if (Bot_State == BOT_IDLE)
000004  4d16              LDR      r5,|L10.96|
000006  4606              MOV      r6,r0                 ;217
000008  7828              LDRB     r0,[r5,#0]  ; Bot_State
00000a  460f              MOV      r7,r1                 ;217
00000c  4690              MOV      r8,r2                 ;217
00000e  b9e0              CBNZ     r0,|L10.74|
;;;220      {
;;;221        if (!(SCSI_Address_Management(CBW.bLUN, SCSI_READ10, LBA, BlockNbr)))/*address out of range*/
000010  4c14              LDR      r4,|L10.100|
000012  4643              MOV      r3,r8
000014  7b60              LDRB     r0,[r4,#0xd]  ; CBW
000016  463a              MOV      r2,r7
000018  2128              MOVS     r1,#0x28
00001a  f7fff7ff          BL       SCSI_Address_Management
00001e  2800              CMP      r0,#0
000020  d01c              BEQ      |L10.92|
;;;222        {
;;;223          return;
;;;224        }
;;;225    
;;;226        if ((CBW.bmFlags & 0x80) != 0)
000022  7b20              LDRB     r0,[r4,#0xc]  ; CBW
000024  0600              LSLS     r0,r0,#24
;;;227        {
;;;228          Bot_State = BOT_DATA_IN;
000026  f04ff04f          MOV      r0,#2
00002a  d501              BPL      |L10.48|
00002c  7028              STRB     r0,[r5,#0]  ; Bot_State
;;;229          Read_Memory(lun, LBA , BlockNbr);
00002e  e00e              B        |L10.78|
                  |L10.48|
;;;230        }
;;;231        else
;;;232        {
;;;233          Bot_Abort(BOTH_DIR);
000030  f7fff7ff          BL       Bot_Abort
000034  480c              LDR      r0,|L10.104|
000036  2105              MOVS     r1,#5
000038  7081              STRB     r1,[r0,#2]  ; Scsi_Sense_Data
00003a  2124              MOVS     r1,#0x24
00003c  7301              STRB     r1,[r0,#0xc]  ; Scsi_Sense_Data
;;;234          Set_Scsi_Sense_Data(CBW.bLUN, ILLEGAL_REQUEST, INVALID_FIELED_IN_COMMAND);
;;;235          Set_CSW (CSW_CMD_FAILED, SEND_CSW_ENABLE);
00003e  e8bde8bd          POP      {r4-r8,lr}
000042  2101              MOVS     r1,#1
000044  4608              MOV      r0,r1
000046  f7fff7ff          B.W      Set_CSW
                  |L10.74|
;;;236        }
;;;237        return;
;;;238      }
;;;239      else if (Bot_State == BOT_DATA_IN)
00004a  2802              CMP      r0,#2
00004c  d106              BNE      |L10.92|
                  |L10.78|
;;;240      {
;;;241        Read_Memory(lun , LBA , BlockNbr);
00004e  4642              MOV      r2,r8
000050  4639              MOV      r1,r7
000052  4630              MOV      r0,r6
000054  e8bde8bd          POP      {r4-r8,lr}
000058  f7fff7ff          B.W      Read_Memory
                  |L10.92|
;;;242      }
;;;243    }
00005c  e8bde8bd          POP      {r4-r8,pc}
;;;244    
                          ENDP

                  |L10.96|
000060  00000000          DCD      Bot_State
                  |L10.100|
000064  00000000          DCD      ||CBW||
                  |L10.104|
000068  00000000          DCD      Scsi_Sense_Data

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

                  SCSI_Write10_Cmd PROC
;;;252    void SCSI_Write10_Cmd(u8 lun , u32 LBA , u32 BlockNbr)
;;;253    {
000000  b570              PUSH     {r4-r6,lr}
;;;254    
;;;255      if (Bot_State == BOT_IDLE)
000002  4d16              LDR      r5,|L11.92|
000004  782c              LDRB     r4,[r5,#0]  ; Bot_State
000006  bb14              CBNZ     r4,|L11.78|
;;;256      {
;;;257        if (!(SCSI_Address_Management(CBW.bLUN, SCSI_WRITE10 , LBA, BlockNbr)))/*address out of range*/
000008  4c15              LDR      r4,|L11.96|
00000a  4613              MOV      r3,r2
00000c  460a              MOV      r2,r1
00000e  7b60              LDRB     r0,[r4,#0xd]  ; CBW
000010  212a              MOVS     r1,#0x2a
000012  f7fff7ff          BL       SCSI_Address_Management
000016  2800              CMP      r0,#0
000018  d01f              BEQ      |L11.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      |L11.50|
;;;263        {
;;;264          Bot_State = BOT_DATA_OUT;
000020  2001              MOVS     r0,#1
000022  7028              STRB     r0,[r5,#0]  ; Bot_State
;;;265          SetEPRxStatus(ENDP2, EP_RX_VALID);
000024  e8bde8bd          POP      {r4-r6,lr}
000028  f44ff44f          MOV      r1,#0x3000
00002c  2002              MOVS     r0,#2
00002e  f7fff7ff          B.W      SetEPRxStatus
                  |L11.50|
;;;266        }
;;;267        else
;;;268        {
;;;269          Bot_Abort(DIR_IN);
000032  2000              MOVS     r0,#0
000034  f7fff7ff          BL       Bot_Abort
000038  480a              LDR      r0,|L11.100|
00003a  2105              MOVS     r1,#5
00003c  7081              STRB     r1,[r0,#2]  ; Scsi_Sense_Data
00003e  2124              MOVS     r1,#0x24
000040  7301              STRB     r1,[r0,#0xc]  ; Scsi_Sense_Data

⌨️ 快捷键说明

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