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

📄 msd.txt

📁 MP3_PLAYER.rar
💻 TXT
📖 第 1 页 / 共 4 页
字号:
;;;240          rvalue = MSD_RESPONSE_FAILURE;
;;;241        }
;;;242      }
;;;243    
;;;244      /* MSD chip select high */
;;;245      MSD_CS_HIGH();
;;;246      /* Send dummy byte: 8 Clock pulses of delay */
;;;247      MSD_WriteByte(DUMMY);
;;;248      /* Returns the reponse */
;;;249      return rvalue;
;;;250    }
000036  e8bd87f0          POP      {r4-r10,pc}
                  |L11.58|
00003a  f7fffffe          BL       MSD_WriteByte
00003e  20fe              MOVS     r0,#0xfe              ;217
000040  f7fffffe          BL       MSD_WriteByte
000044  2400              MOVS     r4,#0                 ;219
000046  f44f7800          MOV      r8,#0x200             ;219
                  |L11.74|
00004a  7828              LDRB     r0,[r5,#0]            ;222
00004c  f7fffffe          BL       MSD_WriteByte
000050  1c6d              ADDS     r5,r5,#1              ;224
000052  1c64              ADDS     r4,r4,#1              ;219
000054  4544              CMP      r4,r8                 ;219
000056  d3f8              BCC      |L11.74|
000058  f5067600          ADD      r6,r6,#0x200          ;227
00005c  f7fffffe          BL       MSD_ReadByte
000060  f7fffffe          BL       MSD_ReadByte
000064  f7fffffe          BL       MSD_GetDataResponse
000068  2805              CMP      r0,#5                 ;232
00006a  d101              BNE      |L11.112|
00006c  2400              MOVS     r4,#0                 ;235
00006e  e000              B        |L11.114|
                  |L11.112|
000070  24ff              MOVS     r4,#0xff              ;240
                  |L11.114|
000072  1e7f              SUBS     r7,r7,#1              ;204
000074  d2d2              BCS      |L11.28|
000076  2108              MOVS     r1,#8                 ;245
000078  4650              MOV      r0,r10                ;245
00007a  f7fffffe          BL       GPIO_SetBits
00007e  20ff              MOVS     r0,#0xff              ;247
000080  f7fffffe          BL       MSD_WriteByte
000084  4620              MOV      r0,r4                 ;249
000086  e7d6              B        |L11.54|
;;;251    
                          ENDP

                  |L11.136|
000088  40011800          DCD      0x40011800

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

                  MSD_ReadBuffer PROC
;;;263    u8 MSD_ReadBuffer(u8* pBuffer, u32 ReadAddr, u32 NumByteToRead)
;;;264    {
000000  e92d47f0          PUSH     {r4-r10,lr}
;;;265      u32 i = 0, NbrOfBlock = 0, Offset = 0;
;;;266      u8 rvalue = MSD_RESPONSE_FAILURE;
;;;267    
;;;268      /* Calculate number of blocks to read */
;;;269      NbrOfBlock = NumByteToRead / BLOCK_SIZE;
;;;270      /* MSD chip select low */
;;;271      MSD_CS_LOW();
000004  f8dfa074          LDR      r10,|L12.124|
000008  4605              MOV      r5,r0                 ;264
00000a  4689              MOV      r9,r1                 ;264
00000c  2600              MOVS     r6,#0                 ;265
00000e  24ff              MOVS     r4,#0xff              ;266
000010  0a57              LSRS     r7,r2,#9              ;269
000012  2108              MOVS     r1,#8
000014  4650              MOV      r0,r10
000016  f7fffffe          BL       GPIO_ResetBits
00001a  f44f7800          MOV      r8,#0x200
00001e  e021              B        |L12.100|
                  |L12.32|
;;;272    
;;;273      /* Data transfer */
;;;274      while (NbrOfBlock --)
;;;275      {
;;;276        /* Send CMD17 (MSD_READ_SINGLE_BLOCK) to read one block */
;;;277        MSD_SendCmd (MSD_READ_SINGLE_BLOCK, ReadAddr + Offset, 0xFF);
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,|L12.58|
;;;280        {
;;;281          return  MSD_RESPONSE_FAILURE;
000034  20ff              MOVS     r0,#0xff
                  |L12.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}
                  |L12.58|
00003a  20fe              MOVS     r0,#0xfe              ;284
00003c  f7fffffe          BL       MSD_GetResponse
000040  b978              CBNZ     r0,|L12.98|
000042  2400              MOVS     r4,#0                 ;287
                  |L12.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      |L12.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        |L12.100|
                  |L12.98|
000062  24ff              MOVS     r4,#0xff              ;305
                  |L12.100|
000064  1e7f              SUBS     r7,r7,#1              ;274
000066  d2db              BCS      |L12.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        |L12.54|
;;;316    
                          ENDP

00007a  0000              DCW      0x0000
                  |L12.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,|L13.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,|L13.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,|L13.60|
00002e  466e              MOV      r6,sp
                  |L13.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      |L13.48|
                  |L13.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
                  |L13.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]

⌨️ 快捷键说明

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