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

📄 usb_scsi.txt

📁 STM32F103ZET6+UCOSII+UCGUI源码
💻 TXT
📖 第 1 页 / 共 3 页
字号:
000002  4801              LDR      r0,|L5.8|
000004  f7ffbffe          B.W      Transfer_Data_Request
;;;159    }
;;;160    
                          ENDP

                  |L5.8|
                          DCD      Mode_Sense10_data

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

                  SCSI_ModeSense6_Cmd PROC
;;;143    *******************************************************************************/
;;;144    void SCSI_ModeSense6_Cmd (u8 lun)
000000  2104              MOVS     r1,#4
;;;145    {
;;;146      Transfer_Data_Request(Mode_Sense6_data, MODE_SENSE6_DATA_LEN);
000002  4801              LDR      r0,|L6.8|
000004  f7ffbffe          B.W      Transfer_Data_Request
;;;147    }
;;;148    
                          ENDP

                  |L6.8|
                          DCD      Mode_Sense6_data

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

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

                  |L7.96|
                          DCD      Bot_State
                  |L7.100|
                          DCD      ||CBW||
                  |L7.104|
                          DCD      Scsi_Sense_Data

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

                  SCSI_ReadCapacity10_Cmd PROC
;;;113    *******************************************************************************/
;;;114    void SCSI_ReadCapacity10_Cmd(u8 lun)
000000  b510              PUSH     {r4,lr}
;;;115    {
000002  4604              MOV      r4,r0
;;;116    
;;;117      if (MAL_GetStatus(lun))
000004  f7fffffe          BL       MAL_GetStatus
000008  b168              CBZ      r0,|L8.38|
00000a  4814              LDR      r0,|L8.92|
00000c  2102              MOVS     r1,#2
00000e  7081              STRB     r1,[r0,#2]
000010  213a              MOVS     r1,#0x3a
000012  7301              STRB     r1,[r0,#0xc]
;;;118      {
;;;119        Set_Scsi_Sense_Data(CBW.bLUN, NOT_READY, MEDIUM_NOT_PRESENT);
;;;120        Set_CSW (CSW_CMD_FAILED, SEND_CSW_ENABLE);
000014  2101              MOVS     r1,#1
000016  4608              MOV      r0,r1
000018  f7fffffe          BL       Set_CSW
;;;121        Bot_Abort(DIR_IN);
00001c  e8bd4010          POP      {r4,lr}
000020  2000              MOVS     r0,#0
000022  f7ffbffe          B.W      Bot_Abort
                  |L8.38|
;;;122        return;
;;;123      }
;;;124    
;;;125      ReadCapacity10_Data[0] = (u8)(Mass_Block_Count[lun] - 1 >> 24);
000026  480e              LDR      r0,|L8.96|
000028  f8501024          LDR      r1,[r0,r4,LSL #2]
00002c  480d              LDR      r0,|L8.100|
00002e  1e49              SUBS     r1,r1,#1
000030  0e0a              LSRS     r2,r1,#24
000032  7002              STRB     r2,[r0,#0]
;;;126      ReadCapacity10_Data[1] = (u8)(Mass_Block_Count[lun] - 1 >> 16);
000034  0c0a              LSRS     r2,r1,#16
000036  7042              STRB     r2,[r0,#1]
;;;127      ReadCapacity10_Data[2] = (u8)(Mass_Block_Count[lun] - 1 >>  8);
000038  0a0a              LSRS     r2,r1,#8
00003a  7082              STRB     r2,[r0,#2]
;;;128      ReadCapacity10_Data[3] = (u8)(Mass_Block_Count[lun] - 1);
00003c  70c1              STRB     r1,[r0,#3]
;;;129    
;;;130      ReadCapacity10_Data[4] = (u8)(Mass_Block_Size[lun] >>  24);
00003e  490a              LDR      r1,|L8.104|
000040  f8511024          LDR      r1,[r1,r4,LSL #2]
000044  0e0a              LSRS     r2,r1,#24
000046  7102              STRB     r2,[r0,#4]
;;;131      ReadCapacity10_Data[5] = (u8)(Mass_Block_Size[lun] >>  16);
000048  0c0a              LSRS     r2,r1,#16
00004a  7142              STRB     r2,[r0,#5]
;;;132      ReadCapacity10_Data[6] = (u8)(Mass_Block_Size[lun] >>  8);
00004c  0a0a              LSRS     r2,r1,#8
00004e  7182              STRB     r2,[r0,#6]
;;;133      ReadCapacity10_Data[7] = (u8)(Mass_Block_Size[lun]);
000050  71c1              STRB     r1,[r0,#7]
;;;134      Transfer_Data_Request(ReadCapacity10_Data, READ_CAPACITY10_DATA_LEN);
000052  e8bd4010          POP      {r4,lr}
000056  2108              MOVS     r1,#8
000058  f7ffbffe          B.W      Transfer_Data_Request
;;;135    }
;;;136    
                          ENDP

                  |L8.92|
                          DCD      Scsi_Sense_Data
                  |L8.96|
                          DCD      Mass_Block_Count
                  |L8.100|
                          DCD      ReadCapacity10_Data
                  |L8.104|
                          DCD      Mass_Block_Size

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

                  SCSI_ReadFormatCapacity_Cmd PROC
;;;85     *******************************************************************************/
;;;86     void SCSI_ReadFormatCapacity_Cmd(u8 lun)
000000  b510              PUSH     {r4,lr}
;;;87     {
000002  4604              MOV      r4,r0
;;;88     
;;;89       if (MAL_GetStatus(lun) != 0 )
000004  f7fffffe          BL       MAL_GetStatus
000008  b168              CBZ      r0,|L9.38|
00000a  4813              LDR      r0,|L9.88|
00000c  2102              MOVS     r1,#2
00000e  7081              STRB     r1,[r0,#2]
000010  213a              MOVS     r1,#0x3a
000012  7301              STRB     r1,[r0,#0xc]
;;;90       {
;;;91         Set_Scsi_Sense_Data(CBW.bLUN, NOT_READY, MEDIUM_NOT_PRESENT);
;;;92         Set_CSW (CSW_CMD_FAILED, SEND_CSW_ENABLE);
000014  2101              MOVS     r1,#1
000016  4608              MOV      r0,r1
000018  f7fffffe          BL       Set_CSW
;;;93         Bot_Abort(DIR_IN);
00001c  e8bd4010          POP      {r4,lr}
000020  2000              MOVS     r0,#0
000022  f7ffbffe          B.W      Bot_Abort
                  |L9.38|
;;;94         return;
;;;95       }
;;;96       ReadFormatCapacity_Data[4] = (u8)(Mass_Block_Count[lun] >> 24);
000026  480d              LDR      r0,|L9.92|
000028  f8501024          LDR      r1,[r0,r4,LSL #2]
00002c  480c              LDR      r0,|L9.96|
00002e  0e0a              LSRS     r2,r1,#24
000030  7102              STRB     r2,[r0,#4]
;;;97       ReadFormatCapacity_Data[5] = (u8)(Mass_Block_Count[lun] >> 16);
000032  0c0a              LSRS     r2,r1,#16
000034  7142              STRB     r2,[r0,#5]
;;;98       ReadFormatCapacity_Data[6] = (u8)(Mass_Block_Count[lun] >>  8);
000036  0a0a              LSRS     r2,r1,#8
000038  7182              STRB     r2,[r0,#6]
;;;99       ReadFormatCapacity_Data[7] = (u8)(Mass_Block_Count[lun]);
00003a  71c1              STRB     r1,[r0,#7]
;;;100    
;;;101      ReadFormatCapacity_Data[9] = (u8)(Mass_Block_Size[lun] >>  16);
00003c  4909              LDR      r1,|L9.100|
00003e  f8511024          LDR      r1,[r1,r4,LSL #2]
000042  0c0a              LSRS     r2,r1,#16
000044  7242              STRB     r2,[r0,#9]
;;;102      ReadFormatCapacity_Data[10] = (u8)(Mass_Block_Size[lun] >>  8);
000046  0a0a              LSRS     r2,r1,#8
000048  7282              STRB     r2,[r0,#0xa]
;;;103      ReadFormatCapacity_Data[11] = (u8)(Mass_Block_Size[lun]);
00004a  72c1              STRB     r1,[r0,#0xb]
;;;104      Transfer_Data_Request(ReadFormatCapacity_Data, READ_FORMAT_CAPACITY_DATA_LEN);
00004c  e8bd4010          POP      {r4,lr}
000050  210c              MOVS     r1,#0xc
000052  f7ffbffe          B.W      Transfer_Data_Request
;;;105    }
;;;106    
                          ENDP

000056  0000              DCW      0x0000
                  |L9.88|
                          DCD      Scsi_Sense_Data
                  |L9.92|
                          DCD      Mass_Block_Count
                  |L9.96|
                          DCD      ReadFormatCapacity_Data
                  |L9.100|
                          DCD      Mass_Block_Size

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

                  SCSI_RequestSense_Cmd PROC
;;;167    *******************************************************************************/
;;;168    void SCSI_RequestSense_Cmd (u8 lun)
000000  4803              LDR      r0,|L10.16|
;;;169    {
;;;170      u8 Request_Sense_data_Length;
;;;171    
;;;172      if (CBW.CB[4] <= REQUEST_SENSE_DATA_LEN)
000002  7cc1              LDRB     r1,[r0,#0x13]  ; CBW
000004  2912              CMP      r1,#0x12
000006  d900              BLS      |L10.10|

⌨️ 快捷键说明

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