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

📄 sdcmd.lis

📁 mega128的串口发送文件.可以发送0X55上位机使用串口调试工具就可以接收了.
💻 LIS
📖 第 1 页 / 共 5 页
字号:
 047E           ; /********************************************************************************************************************
 047E           ; ** 函数名称: INT8U SD_ReadSingleBlock()                               Name:     INT8U SD_ReadSingleBlock()
 047E           ; ** 功能描述: 读单块命令                                                               Function: read single block command
 047E           ; ** 输   入: INT32U blockaddr: 块地址                         Input:    INT32U blockaddr: block address
 047E           ; ** 输   出: 0:   正确    >0:   错误码                                Output:   0:  right     >0:  error code
 047E           ; *********************************************************************************************************************/
 047E           ; uint8 SD_ReadSingleBlock(uint32 blockaddr)
 047E           ; {
 047E                   .dbline 240
 047E           ;       return (SD_BlockCommand(CMD17, CMD17_R, blockaddr)); /* 读单块命令 command that read single block */
 047E FE01              movw R30,R28
 0480 2480              ldd R2,z+4
 0482 3580              ldd R3,z+5
 0484 4680              ldd R4,z+6
 0486 5780              ldd R5,z+7
 0488 2882              std y+0,R2
 048A 3982              std y+1,R3
 048C 4A82              std y+2,R4
 048E 5B82              std y+3,R5
 0490 21E0              ldi R18,1
 0492 01E1              ldi R16,17
 0494 08DF              xcall _SD_BlockCommand
 0496                   .dbline -2
 0496           L45:
 0496 2896              adiw R28,8
 0498                   .dbline 0 ; func end
 0498 0895              ret
 049A                   .dbsym l blockaddr 4 l
 049A                   .dbend
 049A                   .dbfunc e SD_ReadMultipleBlock _SD_ReadMultipleBlock fc
 049A           ;      blockaddr -> y+4
                        .even
 049A           _SD_ReadMultipleBlock::
 049A 0E940000          xcall push_arg4
 049E 2497              sbiw R28,4
 04A0                   .dbline -1
 04A0                   .dbline 250
 04A0           ; }
 04A0           ; 
 04A0           ; /********************************************************************************************************************
 04A0           ; ** 函数名称: INT8U SD_ReadMultipleBlock()                     Name:     INT8U SD_ReadMultipleBlock()
 04A0           ; ** 功能描述: 读多块命令                                                               Function: read multiple block command 
 04A0           ; ** 输   入: INT32U blockaddr: 块地址                         Input:    INT32U blockaddr: block address
 04A0           ; ** 输   出: 0:   正确    >0:   错误码                                Output:   0:  right             >0:  error code
 04A0           ; *********************************************************************************************************************/
 04A0           ; uint8 SD_ReadMultipleBlock(uint32 blockaddr)
 04A0           ; {
 04A0                   .dbline 251
 04A0           ;       return (SD_BlockCommand(CMD18, CMD18_R, blockaddr)); /* 读多块命令 command that read multiple block */
 04A0 FE01              movw R30,R28
 04A2 2480              ldd R2,z+4
 04A4 3580              ldd R3,z+5
 04A6 4680              ldd R4,z+6
 04A8 5780              ldd R5,z+7
 04AA 2882              std y+0,R2
 04AC 3982              std y+1,R3
 04AE 4A82              std y+2,R4
 04B0 5B82              std y+3,R5
 04B2 21E0              ldi R18,1
 04B4 02E1              ldi R16,18
 04B6 F7DE              xcall _SD_BlockCommand
 04B8                   .dbline -2
 04B8           L46:
 04B8 2896              adiw R28,8
 04BA                   .dbline 0 ; func end
 04BA 0895              ret
 04BC                   .dbsym l blockaddr 4 l
 04BC                   .dbend
 04BC                   .dbfunc e SD_WriteSingleBlock _SD_WriteSingleBlock fc
 04BC           ;      blockaddr -> y+4
                        .even
 04BC           _SD_WriteSingleBlock::
 04BC 0E940000          xcall push_arg4
 04C0 2497              sbiw R28,4
 04C2                   .dbline -1
 04C2                   .dbline 261
 04C2           ; }
 04C2           ; 
 04C2           ; /********************************************************************************************************************
 04C2           ; ** 函数名称: INT8U SD_WriteSingleBlock()                      Name:     INT8U SD_WriteSingleBlock()
 04C2           ; ** 功能描述: 写单块命令                                                               Function: write single block command
 04C2           ; ** 输   入: INT32U blockaddr: block address          Input:    INT32U blockaddr: block address
 04C2           ; ** 输   出: 0:   正确    >0:   错误码                                Output:   0:  right             >0:  error code
 04C2           ; *********************************************************************************************************************/
 04C2           ; uint8 SD_WriteSingleBlock(uint32 blockaddr)
 04C2           ; {
 04C2                   .dbline 262
 04C2           ;       return (SD_BlockCommand(CMD24, CMD24_R, blockaddr)); /* 写单块命令 command that write single block */
 04C2 FE01              movw R30,R28
 04C4 2480              ldd R2,z+4
 04C6 3580              ldd R3,z+5
 04C8 4680              ldd R4,z+6
 04CA 5780              ldd R5,z+7
 04CC 2882              std y+0,R2
 04CE 3982              std y+1,R3
 04D0 4A82              std y+2,R4
 04D2 5B82              std y+3,R5
 04D4 21E0              ldi R18,1
 04D6 08E1              ldi R16,24
 04D8 E6DE              xcall _SD_BlockCommand
 04DA                   .dbline -2
 04DA           L47:
 04DA 2896              adiw R28,8
 04DC                   .dbline 0 ; func end
 04DC 0895              ret
 04DE                   .dbsym l blockaddr 4 l
 04DE                   .dbend
 04DE                   .dbfunc e SD_WriteMultipleBlock _SD_WriteMultipleBlock fc
 04DE           ;      blockaddr -> y+4
                        .even
 04DE           _SD_WriteMultipleBlock::
 04DE 0E940000          xcall push_arg4
 04E2 2497              sbiw R28,4
 04E4                   .dbline -1
 04E4                   .dbline 272
 04E4           ; }
 04E4           ; 
 04E4           ; /********************************************************************************************************************
 04E4           ; ** 函数名称: INT8U SD_WriteMultipleBlock()                    Name:     INT8U SD_WriteMultipleBlock()
 04E4           ; ** 功能描述: 写多块命令                                                               Function: write multiple block command
 04E4           ; ** 输   入: INT32U blockaddr: 块地址                         Input:    INT32U blockaddr: block address
 04E4           ; ** 输   出: 0:   正确    >0:   错误码                                Output:   0:  right     >0:  error code
 04E4           ; *********************************************************************************************************************/
 04E4           ; uint8 SD_WriteMultipleBlock(uint32 blockaddr)
 04E4           ; {
 04E4                   .dbline 273
 04E4           ;       return (SD_BlockCommand(CMD25, CMD25_R, blockaddr)); /* 写多块命令 command that write multiple block */
 04E4 FE01              movw R30,R28
 04E6 2480              ldd R2,z+4
 04E8 3580              ldd R3,z+5
 04EA 4680              ldd R4,z+6
 04EC 5780              ldd R5,z+7
 04EE 2882              std y+0,R2
 04F0 3982              std y+1,R3
 04F2 4A82              std y+2,R4
 04F4 5B82              std y+3,R5
 04F6 21E0              ldi R18,1
 04F8 09E1              ldi R16,25
 04FA D5DE              xcall _SD_BlockCommand
 04FC                   .dbline -2
 04FC           L48:
 04FC 2896              adiw R28,8
 04FE                   .dbline 0 ; func end
 04FE 0895              ret
 0500                   .dbsym l blockaddr 4 l
 0500                   .dbend
                        .area lit(rom, con, rel)
 0010           L50:
 0010 0000              .byte 0,0
 0012 0000              .byte 0,0
                        .area text(rom, con, rel)
 0500                   .dbfile D:\new_sd\SD\SD\sdcmd.c
 0500                   .dbfunc e SD_ReadOCR _SD_ReadOCR fc
 0500           ;          param -> y+9
 0500           ;           resp -> y+4
 0500           ;            tmp -> R20
 0500           ;         recbuf -> R22,R23
 0500           ;         ocrlen -> R20
                        .even
 0500           _SD_ReadOCR::
 0500 0E940000          xcall push_gset2
 0504 B901              movw R22,R18
 0506 402F              mov R20,R16
 0508 2D97              sbiw R28,13
 050A                   .dbline -1
 050A                   .dbline 384
 050A           ; }
 050A           ; 
 050A           ; /********************************************************************************************************************
 050A           ; ** 函数名称: INT8U SD_ProgramCSD()                                            Name:     INT8U SD_ProgramCSD()
 050A           ; ** 功能描述: 写CSD寄存器                                                              Function: write CSD register
 050A           ; ** 输   入: INT8U *buff               : CSD寄存器内容                Input:    INT8U *buff             : the content of CSD register 
 050A           ;                        INT8U len                       : CSD寄存器长度                                  INT8U len                       : the length of CSD register
 050A           ; ** 输   出: 0:   正确    >0:   错误码                                        Output:   0:  right             >0:  error code
 050A           ; ********************************************************************************************************************/
 050A           ; #if SD_ProgramCSD_EN
 050A           ; uint8 SD_ProgramCSD(uint8 len, uint8 *buff)
 050A           ; {
 050A           ;       uint8 param[4] = {0,0,0,0},resp,ret;
 050A           ;       
 050A           ;       if (len != 16) return SD_ERR_USER_PARAM;
 050A           ; 
 050A           ;       ret = SD_SendCmd(CMD27, param, CMD27_R, &resp);         /* 发送写CSD寄存器命令 send command that write CSD */
 050A           ;       if (ret != SD_NO_ERR)
 050A           ;               return ret;
 050A           ;                       
 050A           ;     if (resp != 0)    
 050A           ;         return SD_ERR_CMD_RESP;
 050A           ;               
 050A           ;       buff[15] = (SD_GetCRC7(buff, 15) << 1) + 0x01;          /* 计算CSD中的crc 位域 calculate crc field in CSD */
 050A           ;               
 050A           ;       return(SD_WriteBlockData(0, 16, buff));
 050A           ; }
 050A           ; 
 050A           ; /********************************************************************************************************************
 050A           ; ** 函数名称: INT8U SD_GetCRC7()                                               Name:     INT8U SD_GetCRC7()
 050A           ; ** 功能描述: 计算CRC7                                                         Function: calculate crc7
 050A           ; ** 输   入: INT8U *pSource: 数据                                     Input:    INT8U *pSource: data
 050A           ;                        INT16U len    : 数据长度                                                 INT16U len   : data length
 050A           ; ** 输   出: CRC7码                                                                   Output:   CRC7 code
 050A           ; *********************************************************************************************************************/
 050A           ; uint8 SD_GetCRC7(INT8U *pSource, INT16U len)
 050A           ; {
 050A           ;       uint8 i = 0, j;
 050A           ;       uint8 reg = 0;
 050A           ;       
 050A           ;       do
 050A           ;       {
 050A           ;           for (j = 0; j < 8; j++)
 050A           ;           {
 050A           ;                       reg <<= 1;
 050A           ;                       reg ^= ((((pSource[i] << j) ^ reg) & 0x80) ? 0x9 : 0);
 050A           ;           }
 050A           ;           
 050A           ;           i++;
 050A           ;           
 050A           ;       }while(i < len);
 050A           ;       
 050A           ;       return reg;
 050A           ; }     
 050A           ; #endif        
 050A           ; 
 050A           ; #if SD_EraseBlock_EN
 050A           ; /********************************************************************************************************************
 050A           ; ** 函数名称: INT8U SD_EraseStartBlock()                               Name:     INT8U SD_EraseStartBlock()
 050A           ; ** 功能描述: 设置块擦除起始地址                                               Function: select the start block address of erasing operation 
 050A           ; ** 输   入: INT32U startblock: 块地址                                Input:    INT32U startblock     : block address
 050A           ; ** 输   出: 0:   正确    >0:   错误码                                Output:   0:  right        >0:  error code
 050A           ; *********************************************************************************************************************/
 050A           ; uint8 SD_EraseStartBlock(INT32U startblock)
 050A           ; {
 050A           ;       return (SD_BlockCommand(CMD32, CMD32_R, startblock));   /* 发送擦除起始块地址 send the start block address of erasing operation */
 050A           ; }
 050A           ; 
 050A           ; /********************************************************************************************************************
 050A           ; ** 函数名称: INT8U SD_EraseEndBlock()                         Name:     INT8U SD_EraseEndBlock()
 050A           ; ** 功能描述: 设置块擦除终止地址                                               Function: select the end block address of erasing operation  
 050A           ; ** 输   入: INT32U endblock: 块地址                          Input:    INT32U Length : block address
 050A           ; ** 输   出: 0:   正确    >0:   错误码                                Output:   0:  right        >0:  error code
 050A           ; *********************************************************************************************************************/
 050A           ; uint8 SD_EraseEndBlock(INT32U endblock)
 050A           ; {
 050A           ;       return (SD_BlockCommand(CMD33, CMD33_R, endblock));     /* 发送擦除终止块地址 send the end block address of erasing operation */
 050A           ; }
 050A           ; 
 050A           ; /********************************************************************************************************************
 050A           ; ** 函数名称: INT8U SD_EraseSelectedBlock()                    Name:     INT8U SD_EraseSelectedBlock()
 050A           ; ** 功能描述: 擦除已选中的块                                                   Function: erase block selected
 050A           ; ** 输   入: 无                                                                               Input:    NULL
 050A           ; ** 输   出: 0:   正确    >0:   错误码                                Output:   0:  right             >0:  error code
 050A           ; *********************************************************************************************************************/
 050A           ; uint8 SD_EraseSelectedBlock(void)
 050A           ; {
 050A           ;       uint8 param[4],resp,tmp;
 050A           ;       
 050A           ;       SD_PackParam(param, 0);
 050A           ;       
 050A           ;       tmp = SD_SendCmd(CMD38, param, CMD38_R, &resp);             /* 擦除所选择的块  erase blocks selected */

⌨️ 快捷键说明

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