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

📄 msd.txt

📁 MP3_PLAYER.rar
💻 TXT
📖 第 1 页 / 共 4 页
字号:
000020  eb090106          ADD      r1,r9,r6
000024  22ff              MOVS     r2,#0xff
000026  2011              MOVS     r0,#0x11
000028  f7fffffe          BL       MSD_SendCmd
;;;278        /* Check if the MSD acknowledged the read block command: R1 response (0x00: no errors) */
;;;279        if (MSD_GetResponse(MSD_RESPONSE_NO_ERROR))
00002c  2000              MOVS     r0,#0
00002e  f7fffffe          BL       MSD_GetResponse
000032  b110              CBZ      r0,|L11.58|
;;;280        {
;;;281          return  MSD_RESPONSE_FAILURE;
000034  20ff              MOVS     r0,#0xff
                  |L11.54|
;;;282        }
;;;283        /* Now look for the data token to signify the start of the data */
;;;284        if (!MSD_GetResponse(MSD_START_DATA_SINGLE_BLOCK_READ))
;;;285        {
;;;286          /* Read the MSD block data : read NumByteToRead data */
;;;287          for (i = 0; i < BLOCK_SIZE; i++)
;;;288          {
;;;289            /* Read the pointed data */
;;;290            *pBuffer = MSD_ReadByte();
;;;291            /* Point to the next location where the byte read will be saved */
;;;292            pBuffer++;
;;;293          }
;;;294          /* Set next read address*/
;;;295          Offset += 512;
;;;296          /* get CRC bytes (not really needed by us, but required by MSD) */
;;;297          MSD_ReadByte();
;;;298          MSD_ReadByte();
;;;299          /* Set response value to success */
;;;300          rvalue = MSD_RESPONSE_NO_ERROR;
;;;301        }
;;;302        else
;;;303        {
;;;304          /* Set response value to failure */
;;;305          rvalue = MSD_RESPONSE_FAILURE;
;;;306        }
;;;307      }
;;;308    
;;;309      /* MSD chip select high */
;;;310      MSD_CS_HIGH();
;;;311      /* Send dummy byte: 8 Clock pulses of delay */
;;;312      MSD_WriteByte(DUMMY);
;;;313      /* Returns the reponse */
;;;314      return rvalue;
;;;315    }
000036  e8bd87f0          POP      {r4-r10,pc}
                  |L11.58|
00003a  20fe              MOVS     r0,#0xfe              ;284
00003c  f7fffffe          BL       MSD_GetResponse
000040  b978              CBNZ     r0,|L11.98|
000042  2400              MOVS     r4,#0                 ;287
                  |L11.68|
000044  f7fffffe          BL       MSD_ReadByte
000048  1c64              ADDS     r4,r4,#1              ;287
00004a  f8050b01          STRB     r0,[r5],#1            ;290
00004e  4544              CMP      r4,r8                 ;287
000050  d3f8              BCC      |L11.68|
000052  f5067600          ADD      r6,r6,#0x200          ;295
000056  f7fffffe          BL       MSD_ReadByte
00005a  f7fffffe          BL       MSD_ReadByte
00005e  2400              MOVS     r4,#0                 ;300
000060  e000              B        |L11.100|
                  |L11.98|
000062  24ff              MOVS     r4,#0xff              ;305
                  |L11.100|
000064  1e7f              SUBS     r7,r7,#1              ;274
000066  d2db              BCS      |L11.32|
000068  2108              MOVS     r1,#8                 ;310
00006a  4650              MOV      r0,r10                ;310
00006c  f7fffffe          BL       GPIO_SetBits
000070  20ff              MOVS     r0,#0xff              ;312
000072  f7fffffe          BL       MSD_WriteByte
000076  4620              MOV      r0,r4                 ;314
000078  e7dd              B        |L11.54|
;;;316    
                          ENDP

00007a  0000              DCW      0x0000
                  |L11.124|
00007c  40011800          DCD      0x40011800

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

                  MSD_GetCSDRegister PROC
;;;327    u8 MSD_GetCSDRegister(sMSD_CSD* MSD_csd)
;;;328    {
000000  e92d41ff          PUSH     {r0-r8,lr}
;;;329      u32 i = 0;
;;;330      u8 rvalue = MSD_RESPONSE_FAILURE;
;;;331      u8 CSD_Tab[16];
;;;332    
;;;333      /* MSD chip select low */
;;;334      MSD_CS_LOW();
000004  4f65              LDR      r7,|L12.412|
000006  4604              MOV      r4,r0                 ;328
000008  2500              MOVS     r5,#0                 ;329
00000a  26ff              MOVS     r6,#0xff              ;330
00000c  2108              MOVS     r1,#8
00000e  4638              MOV      r0,r7
000010  f7fffffe          BL       GPIO_ResetBits
;;;335      /* Send CMD9 (CSD register) or CMD10(CSD register) */
;;;336      MSD_SendCmd(MSD_SEND_CSD, 0, 0xFF);
000014  22ff              MOVS     r2,#0xff
000016  2100              MOVS     r1,#0
000018  2009              MOVS     r0,#9
00001a  f7fffffe          BL       MSD_SendCmd
;;;337    
;;;338      /* Wait for response in the R1 format (0x00 is no errors) */
;;;339      if (!MSD_GetResponse(MSD_RESPONSE_NO_ERROR))
00001e  2000              MOVS     r0,#0
000020  f7fffffe          BL       MSD_GetResponse
000024  b988              CBNZ     r0,|L12.74|
;;;340      {
;;;341        if (!MSD_GetResponse(MSD_START_DATA_SINGLE_BLOCK_READ))
000026  20fe              MOVS     r0,#0xfe
000028  f7fffffe          BL       MSD_GetResponse
00002c  b930              CBNZ     r0,|L12.60|
00002e  466e              MOV      r6,sp
                  |L12.48|
;;;342        {
;;;343          for (i = 0; i < 16; i++)
;;;344          {
;;;345            /* Store CSD register value on CSD_Tab */
;;;346            CSD_Tab[i] = MSD_ReadByte();
000030  f7fffffe          BL       MSD_ReadByte
000034  5570              STRB     r0,[r6,r5]
000036  1c6d              ADDS     r5,r5,#1              ;343
000038  2d10              CMP      r5,#0x10              ;343
00003a  d3f9              BCC      |L12.48|
                  |L12.60|
;;;347          }
;;;348        }
;;;349        /* Get CRC bytes (not really needed by us, but required by MSD) */
;;;350        MSD_WriteByte(DUMMY);
00003c  20ff              MOVS     r0,#0xff
00003e  f7fffffe          BL       MSD_WriteByte
;;;351        MSD_WriteByte(DUMMY);
000042  20ff              MOVS     r0,#0xff
000044  f7fffffe          BL       MSD_WriteByte
;;;352        /* Set response value to success */
;;;353        rvalue = MSD_RESPONSE_NO_ERROR;
000048  2600              MOVS     r6,#0
                  |L12.74|
;;;354      }
;;;355    
;;;356      /* MSD chip select high */
;;;357      MSD_CS_HIGH();
00004a  2108              MOVS     r1,#8
00004c  4638              MOV      r0,r7
00004e  f7fffffe          BL       GPIO_SetBits
;;;358      /* Send dummy byte: 8 Clock pulses of delay */
;;;359      MSD_WriteByte(DUMMY);
000052  20ff              MOVS     r0,#0xff
000054  f7fffffe          BL       MSD_WriteByte
;;;360    
;;;361      /* Byte 0 */
;;;362      MSD_csd->CSDStruct = (CSD_Tab[0] & 0xC0) >> 6;
000058  f89d0000          LDRB     r0,[sp,#0]
00005c  0981              LSRS     r1,r0,#6
00005e  7021              STRB     r1,[r4,#0]
;;;363      MSD_csd->SysSpecVersion = (CSD_Tab[0] & 0x3C) >> 2;
000060  f3c00183          UBFX     r1,r0,#2,#4
000064  7061              STRB     r1,[r4,#1]
;;;364      MSD_csd->Reserved1 = CSD_Tab[0] & 0x03;
000066  f0000003          AND      r0,r0,#3
00006a  70a0              STRB     r0,[r4,#2]
;;;365      /* Byte 1 */
;;;366      MSD_csd->TAAC = CSD_Tab[1] ;
00006c  f89d0001          LDRB     r0,[sp,#1]
000070  70e0              STRB     r0,[r4,#3]
;;;367      /* Byte 2 */
;;;368      MSD_csd->NSAC = CSD_Tab[2];
000072  f89d0002          LDRB     r0,[sp,#2]
000076  7120              STRB     r0,[r4,#4]
;;;369      /* Byte 3 */
;;;370      MSD_csd->MaxBusClkFrec = CSD_Tab[3];
000078  f89d0003          LDRB     r0,[sp,#3]
00007c  7160              STRB     r0,[r4,#5]
;;;371      /* Byte 4 */
;;;372      MSD_csd->CardComdClasses = CSD_Tab[4] << 4;
00007e  f89d0004          LDRB     r0,[sp,#4]
000082  0100              LSLS     r0,r0,#4
000084  80e0              STRH     r0,[r4,#6]
;;;373      /* Byte 5 */
;;;374      MSD_csd->CardComdClasses |= (CSD_Tab[5] & 0xF0) >> 4;
000086  88e1              LDRH     r1,[r4,#6]
000088  f89d0005          LDRB     r0,[sp,#5]
00008c  ea411110          ORR      r1,r1,r0,LSR #4
000090  80e1              STRH     r1,[r4,#6]
;;;375      MSD_csd->RdBlockLen = CSD_Tab[5] & 0x0F;
000092  f000000f          AND      r0,r0,#0xf
000096  7220              STRB     r0,[r4,#8]
;;;376      /* Byte 6 */
;;;377      MSD_csd->PartBlockRead = (CSD_Tab[6] & 0x80) >> 7;
000098  f89d0006          LDRB     r0,[sp,#6]
00009c  09c1              LSRS     r1,r0,#7
00009e  7261              STRB     r1,[r4,#9]
;;;378      MSD_csd->WrBlockMisalign = (CSD_Tab[6] & 0x40) >> 6;
0000a0  f3c01180          UBFX     r1,r0,#6,#1
0000a4  72a1              STRB     r1,[r4,#0xa]
;;;379      MSD_csd->RdBlockMisalign = (CSD_Tab[6] & 0x20) >> 5;
0000a6  f3c01140          UBFX     r1,r0,#5,#1
0000aa  72e1              STRB     r1,[r4,#0xb]
;;;380      MSD_csd->DSRImpl = (CSD_Tab[6] & 0x10) >> 4;
0000ac  f3c01100          UBFX     r1,r0,#4,#1
0000b0  7321              STRB     r1,[r4,#0xc]
;;;381      MSD_csd->Reserved2 = 0; /* Reserved */
0000b2  2100              MOVS     r1,#0
0000b4  7361              STRB     r1,[r4,#0xd]
;;;382      MSD_csd->DeviceSize = (CSD_Tab[6] & 0x03) << 10;
0000b6  0780              LSLS     r0,r0,#30
0000b8  0d00              LSRS     r0,r0,#20
0000ba  81e0              STRH     r0,[r4,#0xe]
;;;383      /* Byte 7 */
;;;384      MSD_csd->DeviceSize |= (CSD_Tab[7]) << 2;
0000bc  89e0              LDRH     r0,[r4,#0xe]
0000be  f89d2007          LDRB     r2,[sp,#7]
0000c2  ea400082          ORR      r0,r0,r2,LSL #2
0000c6  81e0              STRH     r0,[r4,#0xe]
;;;385      /* Byte 8 */
;;;386      MSD_csd->DeviceSize |= (CSD_Tab[8] & 0xC0) >> 6;
0000c8  89e2              LDRH     r2,[r4,#0xe]
0000ca  f89d0008          LDRB     r0,[sp,#8]
0000ce  ea421290          ORR      r2,r2,r0,LSR #6
0000d2  81e2              STRH     r2,[r4,#0xe]
;;;387      MSD_csd->MaxRdCurrentVDDMin = (CSD_Tab[8] & 0x38) >> 3;
0000d4  f3c002c2          UBFX     r2,r0,#3,#3
0000d8  7422              STRB     r2,[r4,#0x10]
;;;388      MSD_csd->MaxRdCurrentVDDMax = (CSD_Tab[8] & 0x07);
0000da  f0000007          AND      r0,r0,#7
0000de  7460              STRB     r0,[r4,#0x11]
;;;389      /* Byte 9 */
;;;390      MSD_csd->MaxWrCurrentVDDMin = (CSD_Tab[9] & 0xE0) >> 5;
0000e0  f89d0009          LDRB     r0,[sp,#9]
0000e4  0942              LSRS     r2,r0,#5
0000e6  74a2              STRB     r2,[r4,#0x12]
;;;391      MSD_csd->MaxWrCurrentVDDMax = (CSD_Tab[9] & 0x1C) >> 2;
0000e8  f3c00282          UBFX     r2,r0,#2,#3
0000ec  74e2              STRB     r2,[r4,#0x13]
;;;392      MSD_csd->DeviceSizeMul = (CSD_Tab[9] & 0x03) << 1;
0000ee  0780              LSLS     r0,r0,#30
0000f0  0f40              LSRS     r0,r0,#29
0000f2  7520              STRB     r0,[r4,#0x14]
;;;393      /* Byte 10 */
;;;394      MSD_csd->DeviceSizeMul |= (CSD_Tab[10] & 0x80) >> 7;
0000f4  7d22              LDRB     r2,[r4,#0x14]
0000f6  f89d000a          LDRB     r0,[sp,#0xa]
0000fa  ea4212d0          ORR      r2,r2,r0,LSR #7
0000fe  7522              STRB     r2,[r4,#0x14]
;;;395      MSD_csd->EraseGrSize = (CSD_Tab[10] & 0x7C) >> 2;
000100  f3c00284          UBFX     r2,r0,#2,#5
000104  7562              STRB     r2,[r4,#0x15]
;;;396      MSD_csd->EraseGrMul = (CSD_Tab[10] & 0x03) << 3;
000106  0780              LSLS     r0,r0,#30
000108  0ec0              LSRS     r0,r0,#27
00010a  75a0              STRB     r0,[r4,#0x16]
;;;397      /* Byte 11 */
;;;398      MSD_csd->EraseGrMul |= (CSD_Tab[11] & 0xE0) >> 5;
00010c  7da2              LDRB     r2,[r4,#0x16]
00010e  f89d000b          LDRB     r0,[sp,#0xb]
000112  ea421250          ORR      r2,r2,r0,LSR #5
000116  75a2              STRB     r2,[r4,#0x16]
;;;399      MSD_csd->WrProtectGrSize = (CSD_Tab[11] & 0x1F);
000118  f000001f          AND      r0,r0,#0x1f
00011c  75e0              STRB     r0,[r4,#0x17]
;;;400      /* Byte 12 */
;;;401      MSD_csd->WrProtectGrEnable = (CSD_Tab[12] & 0x80) >> 7;
00011e  f89d000c          LDRB     r0,[sp,#0xc]
000122  09c2              LSRS     r2,r0,#7
000124  7622              STRB     r2,[r4,#0x18]
;;;402      MSD_csd->ManDeflECC = (CSD_Tab[12] & 0x60) >> 5;
000126  f3c01241          UBFX     r2,r0,#5,#2
00012a  7662              STRB     r2,[r4,#0x19]
;;;403      MSD_csd->WrSpeedFact = (CSD_Tab[12] & 0x1C) >> 2;
00012c  f3c00282          UBFX     r2,r0,#2,#3
000130  76a2              STRB     r2,[r4,#0x1a]
;;;404      MSD_csd->MaxWrBlockLen = (CSD_Tab[12] & 0x03) << 2;
000132  0780              LSLS     r0,r0,#30
000134  0f00              LSRS     r0,r0,#28
000136  76e0              STRB     r0,[r4,#0x1b]
;;;405      /* Byte 13 */
;;;406      MSD_csd->MaxWrBlockLen |= (CSD_Tab[13] & 0xc0) >> 6;
000138  7ee2              LDRB     r2,[r4,#0x1b]
00013a  f89d000d          LDRB     r0,[sp,#0xd]
00013e  ea421290          ORR      r2,r2,r0,LSR #6
000142  76e2              STRB     r2,[r4,#0x1b]
;;;407      MSD_csd->WriteBlockPaPartial = (CSD_Tab[13] & 0x20) >> 5;
000144  f3c01240          UBFX     r2,r0,#5,#1
000148  7722              STRB     r2,[r4,#0x1c]
;;;408      MSD_csd->Reserved3 = 0;
00014a  7761              STRB     r1,[r4,#0x1d]
;;;409      MSD_csd->ContentProtectAppli = (CSD_Tab[13] & 0x01);
00014c  f0000001          AND      r0,r0,#1
000150  77a0              STRB     r0,[r4,#0x1e]
;;;410      /* Byte 14 */
;;;411      MSD_csd->FileFormatGrouop = (CSD_Tab[14] & 0x80) >> 7;
000152  f89d000e          LDRB     r0,[sp,#0xe]
000156  09c1              LSRS     r1,r0,#7
000158  77e1              STRB     r1,[r4,#0x1f]
;;;412      MSD_csd->CopyFlag = (CSD_Tab[14] & 0x40) >> 6;
00015a  f3c01180          UBFX     r1,r0,#6,#1
00015e  f8841020          STRB     r1,[r4,#0x20]
;;;413      MSD_csd->PermWrProtect = (CSD_Tab[14] & 0x20) >> 5;
000162  f3c01140          UBFX     r1,r0,#5,#1
000166  f8841021          STRB     r1,[r4,#0x21]
;;;414      MSD_csd->TempWrProtect = (CSD_Tab[14] & 0x10) >> 4;
00016a  f3c01100          UBFX     r1,r0,#4,#1
00016e  f8841022          STRB     r1,[r4,#0x22]
;;;415      MSD_csd->FileFormat = (CSD_Tab[14] & 0x0C) >> 2;
000172  f3c00181          UBFX     r1,r0,#2,#2
000176  f8841023          STRB     r1,[r4,#0x23]
;;;416      MSD_csd->ECC = (CSD_Tab[14] & 0x03);
00017a  f0000003          AND      r0,r0,#3
00017e  f8840024          STRB     r0,[r4,#0x24]
;;;417      /* Byte 15 */
;;;418      MSD_csd->CRC_Check = (CSD_Tab[15] & 0xFE) >> 1;
000182  f89d000f          LDRB     r0,[sp,#0xf]
000186  0840              LSRS     r0,r0,#1
000188  f8840025          STRB     r0,[r4,#0x25]
;;;419      MSD_csd->Reserved4 = 1;
00018c  2001              MOVS     r0,#1
00018e  f8840026          STRB     r0,[r4,#0x26]
;;;420    
;;;421      /* Return the reponse */
;;;422      return rvalue;
000192  4630              MOV      r0,r6
;;;423    }
000194  b004              ADD      sp,sp,#0x10
000196  e8bd81f0          POP      {r4-r8,pc}
;;;424    
                          ENDP

00019a  0000              DCW      0x0000
                  |L12.412|
00019c  40011800          DCD      0x40011800

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

                  MSD_GetCIDRegister PROC
;;;435    u8 MSD_GetCIDRegister(sMSD_CID* MSD_cid)
;;;436    {
000000  e92d41ff          PUSH     {r0-r8,lr}
;;;437      u32 i = 0;
;;;438      u8 rvalue = MSD_RESPONSE_FAILURE;
;;;439      u8 CID_Tab[16];

⌨️ 快捷键说明

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