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

📄 usb_scsi.txt

📁 STM32F103ZET6+UCOSII+UCGUI源码
💻 TXT
📖 第 1 页 / 共 3 页
字号:
; generated by ARM C/C++ Compiler with , RVCT4.0 [Build 524] for uVision
; commandline ArmCC [--split_sections --debug -c --asm --interleave -o.\Obj\usb_scsi.o --depend=.\Obj\usb_scsi.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_scsi.c]
                          THUMB

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

                  SCSI_Address_Management PROC
;;;396    *******************************************************************************/
;;;397    bool SCSI_Address_Management(u8 lun , u8 Cmd , u32 LBA , u32 BlockNbr)
000000  b570              PUSH     {r4-r6,lr}
;;;398    {
;;;399    
;;;400      if ((LBA + BlockNbr) > Mass_Block_Count[lun] )
000002  4c16              LDR      r4,|L1.92|
000004  441a              ADD      r2,r2,r3
000006  f8546020          LDR      r6,[r4,r0,LSL #2]
00000a  2405              MOVS     r4,#5
00000c  4d14              LDR      r5,|L1.96|
00000e  42b2              CMP      r2,r6
000010  d90a              BLS      |L1.40|
;;;401      {
;;;402        if (Cmd == SCSI_WRITE10)
000012  292a              CMP      r1,#0x2a
000014  d102              BNE      |L1.28|
;;;403        {
;;;404          Bot_Abort(BOTH_DIR);
000016  2002              MOVS     r0,#2
000018  f7fffffe          BL       Bot_Abort
                  |L1.28|
;;;405        }
;;;406        Bot_Abort(DIR_IN);
00001c  2000              MOVS     r0,#0
00001e  f7fffffe          BL       Bot_Abort
000022  70ac              STRB     r4,[r5,#2]
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        |L1.74|
                  |L1.40|
;;;410      }
;;;411    
;;;412    
;;;413      if (CBW.dDataLength != BlockNbr * Mass_Block_Size[lun])
000028  4e0f              LDR      r6,|L1.104|
00002a  4a0e              LDR      r2,|L1.100|
00002c  f8560020          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      |L1.88|
;;;414      {
;;;415        if (Cmd == SCSI_WRITE10)
000038  292a              CMP      r1,#0x2a
00003a  d101              BNE      |L1.64|
;;;416        {
;;;417          Bot_Abort(BOTH_DIR);
00003c  2002              MOVS     r0,#2
00003e  e000              B        |L1.66|
                  |L1.64|
;;;418        }
;;;419        else
;;;420        {
;;;421          Bot_Abort(DIR_IN);
000040  2000              MOVS     r0,#0
                  |L1.66|
000042  f7fffffe          BL       Bot_Abort
000046  70ac              STRB     r4,[r5,#2]
000048  2024              MOVS     r0,#0x24
                  |L1.74|
00004a  7328              STRB     r0,[r5,#0xc]
;;;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  f7fffffe          BL       Set_CSW
;;;425        return (FALSE);
000054  2000              MOVS     r0,#0
;;;426      }
;;;427      return (TRUE);
;;;428    }
000056  bd70              POP      {r4-r6,pc}
                  |L1.88|
000058  2001              MOVS     r0,#1                 ;427
00005a  bd70              POP      {r4-r6,pc}
;;;429    /******************* (C) COPYRIGHT 2008 STMicroelectronics *****END OF FILE****/
                          ENDP

                  |L1.92|
                          DCD      Mass_Block_Count
                  |L1.96|
                          DCD      Scsi_Sense_Data
                  |L1.100|
                          DCD      ||CBW||
                  |L1.104|
                          DCD      Mass_Block_Size

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

                  SCSI_Format_Cmd PROC
;;;346    *******************************************************************************/
;;;347    void SCSI_Format_Cmd(u8 lun)
000000  b510              PUSH     {r4,lr}
;;;348    {
;;;349      if (MAL_GetStatus(lun))
000002  f7fffffe          BL       MAL_GetStatus
000006  b168              CBZ      r0,|L2.36|
000008  480a              LDR      r0,|L2.52|
00000a  2102              MOVS     r1,#2
00000c  7081              STRB     r1,[r0,#2]
00000e  213a              MOVS     r1,#0x3a
000010  7301              STRB     r1,[r0,#0xc]
;;;350      {
;;;351        Set_Scsi_Sense_Data(CBW.bLUN, NOT_READY, MEDIUM_NOT_PRESENT);
;;;352        Set_CSW (CSW_CMD_FAILED, SEND_CSW_ENABLE);
000012  2101              MOVS     r1,#1
000014  4608              MOV      r0,r1
000016  f7fffffe          BL       Set_CSW
;;;353        Bot_Abort(DIR_IN);
00001a  e8bd4010          POP      {r4,lr}
00001e  2000              MOVS     r0,#0
000020  f7ffbffe          B.W      Bot_Abort
                  |L2.36|
;;;354        return;
;;;355      }
;;;356      else
;;;357      {
;;;358        NAND_Format();
000024  f7fffffe          BL       NAND_Format
;;;359        Set_CSW (CSW_CMD_PASSED, SEND_CSW_ENABLE);
000028  2101              MOVS     r1,#1
00002a  e8bd4010          POP      {r4,lr}
00002e  2000              MOVS     r0,#0
000030  f7ffbffe          B.W      Set_CSW
;;;360      }
;;;361    }
;;;362    /*******************************************************************************
                          ENDP

                  |L2.52|
                          DCD      Scsi_Sense_Data

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

                  SCSI_Inquiry_Cmd PROC
;;;47     *******************************************************************************/
;;;48     void SCSI_Inquiry_Cmd(u8 lun)
000000  4908              LDR      r1,|L3.36|
;;;49     {
;;;50       u8* Inquiry_Data;
;;;51       u16 Inquiry_Data_Length;
;;;52     
;;;53       if (CBW.CB[1] & 0x01)/*Evpd is set*/
000002  7c0a              LDRB     r2,[r1,#0x10]  ; CBW
000004  07d2              LSLS     r2,r2,#31
000006  d002              BEQ      |L3.14|
;;;54       {
;;;55         Inquiry_Data = Page00_Inquiry_Data;
000008  4807              LDR      r0,|L3.40|
;;;56         Inquiry_Data_Length = 5;
00000a  2105              MOVS     r1,#5
00000c  e007              B        |L3.30|
                  |L3.14|
;;;57       }
;;;58       else
;;;59       {
;;;60     
;;;61         if ( lun == 0)
00000e  b908              CBNZ     r0,|L3.20|
;;;62         {
;;;63           Inquiry_Data = Standard_Inquiry_Data;
000010  4806              LDR      r0,|L3.44|
000012  e000              B        |L3.22|
                  |L3.20|
;;;64         }
;;;65         else
;;;66         {
;;;67           Inquiry_Data = Standard_Inquiry_Data2;
000014  4806              LDR      r0,|L3.48|
                  |L3.22|
;;;68         }
;;;69     
;;;70         if (CBW.CB[4] <= STANDARD_INQUIRY_DATA_LEN)
000016  7cc9              LDRB     r1,[r1,#0x13]  ; CBW
000018  2924              CMP      r1,#0x24
00001a  d900              BLS      |L3.30|
;;;71           Inquiry_Data_Length = CBW.CB[4];
;;;72         else
;;;73           Inquiry_Data_Length = STANDARD_INQUIRY_DATA_LEN;
00001c  2124              MOVS     r1,#0x24
                  |L3.30|
;;;74     
;;;75       }
;;;76       Transfer_Data_Request(Inquiry_Data, Inquiry_Data_Length);
00001e  f7ffbffe          B.W      Transfer_Data_Request
;;;77     }
;;;78     
                          ENDP

000022  0000              DCW      0x0000
                  |L3.36|
                          DCD      ||CBW||
                  |L3.40|
                          DCD      Page00_Inquiry_Data
                  |L3.44|
                          DCD      Standard_Inquiry_Data
                  |L3.48|
                          DCD      Standard_Inquiry_Data2

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

                  SCSI_Invalid_Cmd PROC
;;;368    *******************************************************************************/
;;;369    void SCSI_Invalid_Cmd(u8 lun)
000000  b510              PUSH     {r4,lr}
;;;370    {
;;;371      if (CBW.dDataLength == 0)
000002  480b              LDR      r0,|L4.48|
000004  6881              LDR      r1,[r0,#8]  ; CBW
000006  b111              CBZ      r1,|L4.14|
;;;372      {
;;;373        Bot_Abort(DIR_IN);
;;;374      }
;;;375      else
;;;376      {
;;;377        if ((CBW.bmFlags & 0x80) != 0)
000008  7b00              LDRB     r0,[r0,#0xc]  ; CBW
00000a  0600              LSLS     r0,r0,#24
00000c  d501              BPL      |L4.18|
                  |L4.14|
00000e  2000              MOVS     r0,#0                 ;373
000010  e000              B        |L4.20|
                  |L4.18|
;;;378        {
;;;379          Bot_Abort(DIR_IN);
;;;380        }
;;;381        else
;;;382        {
;;;383          Bot_Abort(BOTH_DIR);
000012  2002              MOVS     r0,#2
                  |L4.20|
000014  f7fffffe          BL       Bot_Abort
000018  4806              LDR      r0,|L4.52|
00001a  2105              MOVS     r1,#5                 ;379
00001c  7081              STRB     r1,[r0,#2]            ;379
00001e  2120              MOVS     r1,#0x20              ;379
000020  7301              STRB     r1,[r0,#0xc]          ;379
;;;384        }
;;;385      }
;;;386      Set_Scsi_Sense_Data(CBW.bLUN, ILLEGAL_REQUEST, INVALID_COMMAND);
;;;387      Set_CSW (CSW_CMD_FAILED, SEND_CSW_DISABLE);
000022  2100              MOVS     r1,#0
000024  e8bd4010          POP      {r4,lr}
000028  2001              MOVS     r0,#1
00002a  f7ffbffe          B.W      Set_CSW
;;;388    }
;;;389    
                          ENDP

00002e  0000              DCW      0x0000
                  |L4.48|
                          DCD      ||CBW||
                  |L4.52|
                          DCD      Scsi_Sense_Data

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

                  SCSI_ModeSense10_Cmd PROC
;;;155    *******************************************************************************/
;;;156    void SCSI_ModeSense10_Cmd (u8 lun)
000000  2108              MOVS     r1,#8
;;;157    {
;;;158      Transfer_Data_Request(Mode_Sense10_data, MODE_SENSE10_DATA_LEN);

⌨️ 快捷键说明

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