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

📄 sdmmc_spi.lst

📁 Tried to make CAN logger on AT91sam7X-ek, but have no idea how to implement FATFs... -( I m just a
💻 LST
📖 第 1 页 / 共 5 页
字号:
    160          // Cmd12 MCI + SPI
    161          #define   AT91C_STOP_TRANSMISSION_CMD (12)
    162          // Cmd13 MCI + SPI
    163          #define   AT91C_SEND_STATUS_CMD       (13)
    164          // Cmd15 MCI
    165          //#define AT91C_GO_INACTIVE_STATE_CMD (15)
    166          // Cmd58 SPI
    167          #define   AT91C_READ_OCR_CMD          (58)
    168          // Cmd59 SPI
    169          #define   AT91C_CRC_ON_OFF_CMD        (59)
    170          //#define AT91C_MMC_ALL_SEND_CID_CMD         (2)
    171          //#define AT91C_MMC_SET_RELATIVE_ADDR_CMD    (3)
    172          //#define AT91C_MMC_READ_DAT_UNTIL_STOP_CMD (11)
    173          //#define AT91C_STOP_TRANSMISSION_SYNC_CMD  (12)
    174          
    175          //*------------------------------------------------
    176          //* Class 2 commands: Block oriented Read commands
    177          //*------------------------------------------------
    178          // Cmd16
    179          #define AT91C_SET_BLOCKLEN_CMD          (16)
    180          // Cmd17
    181          #define AT91C_READ_SINGLE_BLOCK_CMD     (17)
    182          // Cmd18
    183          #define AT91C_READ_MULTIPLE_BLOCK_CMD   (18)
    184          
    185          //*------------------------------------------------
    186          //* Class 4 commands: Block oriented write commands
    187          //*------------------------------------------------
    188          // Cmd24
    189          #define AT91C_WRITE_BLOCK_CMD           (24)
    190          // Cmd25
    191          #define AT91C_WRITE_MULTIPLE_BLOCK_CMD  (25)
    192          // Cmd27
    193          //#define AT91C_PROGRAM_CSD_CMD         (27)
    194          
    195          //*----------------------------------------
    196          //* Class 5 commands: Erase commands
    197          //*----------------------------------------
    198          // Cmd32
    199          //#define AT91C_TAG_SECTOR_START_CMD    (32)
    200          // Cmd33
    201          //#define AT91C_TAG_SECTOR_END_CMD      (33)
    202          // Cmd38
    203          //#define AT91C_ERASE_CMD               (38)
    204          
    205          //*----------------------------------------
    206          //* Class 7 commands: Lock commands
    207          //*----------------------------------------
    208          // Cmd42
    209          //#define AT91C_LOCK_UNLOCK             (42)
    210          
    211          //*-----------------------------------------------
    212          // Class 8 commands: Application specific commands
    213          //*-----------------------------------------------
    214          // Cmd55
    215          #define AT91C_APP_CMD                   (55)
    216          // cmd 56
    217          //#define AT91C_GEN_CMD                 (56)
    218          // ACMD6
    219          #define AT91C_SDCARD_SET_BUS_WIDTH_CMD            (6)
    220          // ACMD13
    221          //#define AT91C_SDCARD_STATUS_CMD                 (13)
    222          // ACMD22
    223          //#define AT91C_SDCARD_SEND_NUM_WR_BLOCKS_CMD     (22)
    224          // ACMD23
    225          //#define AT91C_SDCARD_SET_WR_BLK_ERASE_COUNT_CMD (23)
    226          // ACMD41
    227          #define AT91C_SDCARD_APP_OP_COND_CMD              (41)
    228          // ACMD42
    229          //#define AT91C_SDCARD_SET_CLR_CARD_DETECT_CMD    (42)
    230          // ACMD51
    231          #define AT91C_SDCARD_SEND_SCR_CMD                 (51)
    232          
    233          //------------------------------------------------------------------------------
    234          //         Local functions
    235          //------------------------------------------------------------------------------
    236          
    237          //------------------------------------------------------------------------------
    238          /// Sends the current SD card driver command to the card.
    239          /// Returns 0 if successful; Otherwise, returns the transfer status code or
    240          /// SD_ERROR_DRIVER if there was a problem with the SD transfer.
    241          /// \param pSd  Pointer to a SdCard driver instance.
    242          //------------------------------------------------------------------------------

   \                                 In section .text, align 4, keep-with-next
    243          static unsigned char SendCommand(SdCard *pSd)
    244          {
   \                     SendCommand:
   \   00000000   38402DE9           PUSH     {R3-R5,LR}
    245              SdCmd *pCommand = &(pSd->command);
   \   00000004   044080E2           ADD      R4,R0,#+4
    246              SdDriver *pSdDriver = pSd->pSdDriver;
   \   00000008   005090E5           LDR      R5,[R0, #+0]
    247              unsigned char error;
    248              unsigned int i;
    249          
    250              // Send command
    251              SDSPI_NCS((SdSpi *)pSdDriver);
   \   0000000C   0500A0E1           MOV      R0,R5
   \   00000010   ........           BL       SDSPI_NCS
    252          
    253              error = SDSPI_SendCommand((SdSpi *)pSdDriver, (SdSpiCmd *)pCommand);
   \   00000014   0410A0E1           MOV      R1,R4
   \   00000018   0500A0E1           MOV      R0,R5
   \   0000001C   ........           BL       SDSPI_SendCommand
   \   00000020   0010B0E1           MOVS     R1,R0
    254              if (error) {
   \   00000024   0300000A           BEQ      ??SendCommand_0
    255                  TRACE_ERROR("SPI SendCommand: Failed to send command (%d)\n\r", error);
   \   00000028   54009FE5           LDR      R0,??SendCommand_1  ;; `?<Constant "-E- SPI SendCommand: ...">`
   \   0000002C   ........           BL       printf
    256                  return SD_ERROR_DRIVER;
   \   00000030   0100A0E3           MOV      R0,#+1
   \   00000034   110000EA           B        ??SendCommand_2
    257              }
    258          
    259              // Wait for command to complete
    260              while (!SDSPI_IsTxComplete((SdSpiCmd *)pCommand));
   \                     ??SendCommand_0:
   \   00000038   0400A0E1           MOV      R0,R4
   \   0000003C   ........           BL       SDSPI_IsTxComplete
   \   00000040   000050E3           CMP      R0,#+0
   \   00000044   FBFFFF0A           BEQ      ??SendCommand_0
    261              if(pCommand->cmd == AT91C_STOP_TRANSMISSION_CMD) {
   \   00000048   040094E5           LDR      R0,[R4, #+4]
   \   0000004C   0C0050E3           CMP      R0,#+12
   \   00000050   0900001A           BNE      ??SendCommand_3
    262                  if( 1 == SDSPI_Wait((SdSpi *)pSdDriver, 2) ) {
   \   00000054   0210A0E3           MOV      R1,#+2
   \   00000058   0500A0E1           MOV      R0,R5
   \   0000005C   ........           BL       SDSPI_Wait
   \   00000060   010050E3           CMP      R0,#+1
    263                      TRACE_ERROR("SPI \n\r");
   \   00000064   1C009F05           LDREQ    R0,??SendCommand_1+0x4  ;; `?<Constant "-E- SPI \\n\\r">`
   \   00000068   ........           BLEQ     printf
    264                  }
    265                  while (SDSPI_WaitDataBusy((SdSpi *)pSdDriver) == 1);
   \                     ??SendCommand_4:
   \   0000006C   0500A0E1           MOV      R0,R5
   \   00000070   ........           BL       SDSPI_WaitDataBusy
   \   00000074   010050E3           CMP      R0,#+1
   \   00000078   FBFFFF0A           BEQ      ??SendCommand_4
    266              }
    267          
    268              // Delay between sending commands, only for MMC card test.
    269              if((pSd->cardType == CARD_MMC)
    270               ||(pSd->cardType == UNKNOWN_CARD)
    271               ||(pSd->cardType == CARD_SD)) {
    272          
    273                  for(i=0; i < MMC_DELAY; i++);
    274              }
    275          
    276              return pCommand->status;
   \                     ??SendCommand_3:
   \   0000007C   0000D4E5           LDRB     R0,[R4, #+0]
   \                     ??SendCommand_2:
   \   00000080   ........           B        ??Subroutine6_0
   \                     ??SendCommand_1:
   \   00000084   ........           DC32     `?<Constant "-E- SPI SendCommand: ...">`
   \   00000088   ........           DC32     `?<Constant "-E- SPI \\n\\r">`
    277          }

   \                                 In section .text, align 4, keep-with-next
   \                     ??Subroutine6_0:
   \   00000000   3240BDE8           POP      {R1,R4,R5,LR}
   \   00000004   1EFF2FE1           BX       LR               ;; return
    278          
    279          //------------------------------------------------------------------------------
    280          //------------------------------------------------------------------------------

   \                                 In section .text, align 4, keep-with-next
    281          void DecodeR1(unsigned char R1)
    282          {
    283              if( (R1 & R1_SPI_IDLE)==R1_SPI_IDLE) {
    284                  TRACE_DEBUG("R1_SPI_IDLE\n\r");
    285              }
    286              if( (R1 & R1_SPI_ERASE_RESET)==R1_SPI_ERASE_RESET) {
    287                  TRACE_DEBUG("R1_SPI_ERASE_RESET\n\r");
    288              }
    289              if( (R1 & R1_SPI_ILLEGAL_COMMAND)==R1_SPI_ILLEGAL_COMMAND) {
    290                  TRACE_DEBUG("R1_SPI_ILLEGAL_COMMAND\n\r");
    291              }
    292              if( (R1 & R1_SPI_COM_CRC)==R1_SPI_COM_CRC) {
    293                  TRACE_DEBUG("R1_SPI_COM_CRC\n\r");
    294              }
    295              if( (R1 & R1_SPI_ERASE_SEQ)==R1_SPI_ERASE_SEQ) {
    296                  TRACE_DEBUG("R1_SPI_ERASE_SEQ\n\r");
    297              }
    298              if( (R1 & R1_SPI_ADDRESS)==R1_SPI_ADDRESS) {
    299                  TRACE_DEBUG("R1_SPI_ADDRESS\n\r");
    300              }
    301              if( (R1 & R1_SPI_PARAMETER)==R1_SPI_PARAMETER) {
    302                  TRACE_DEBUG("R1_SPI_PARAMETER\n\r");
    303              }
    304          }
   \                     DecodeR1:
   \   00000000   1EFF2FE1           BX       LR               ;; return
    305          
    306          //------------------------------------------------------------------------------
    307          //------------------------------------------------------------------------------

   \                                 In section .text, align 4, keep-with-next
    308          void DecodeR2(unsigned char R2)
    309          {
    310              if( (R2 & R2_SPI_CARD_LOCKED)==R2_SPI_CARD_LOCKED) {
    311                  TRACE_DEBUG("R2_SPI_CARD_LOCKED\n\r");
    312              }
    313              if( (R2 & R2_SPI_WP_ERASE_SKIP)==R2_SPI_WP_ERASE_SKIP) {
    314                  TRACE_DEBUG("R2_SPI_WP_ERASE_SKIP/R2_SPI_LOCK_UNLOCK_FAIL\n\r");
    315              }
    316              if( (R2 & R2_SPI_ERROR)==R2_SPI_ERROR) {
    317                  TRACE_DEBUG("R2_SPI_ERROR\n\r");
    318              }
    319              if( (R2 & R2_SPI_CC_ERROR)==R2_SPI_CC_ERROR) {
    320                  TRACE_DEBUG("R2_SPI_CC_ERROR\n\r");
    321              }
    322              if( (R2 & R2_SPI_CARD_ECC_ERROR)==R2_SPI_CARD_ECC_ERROR) {
    323                  TRACE_DEBUG("R2_SPI_CARD_ECC_ERROR\n\r");
    324              }
    325              if( (R2 & R2_SPI_WP_VIOLATION)==R2_SPI_WP_VIOLATION) {
    326                  TRACE_DEBUG("R2_SPI_WP_VIOLATION\n\r");
    327              }
    328              if( (R2 & R2_SPI_ERASE_PARAM)==R2_SPI_ERASE_PARAM) {
    329                  TRACE_DEBUG("R2_SPI_ERASE_PARAM\n\r");
    330              }
    331              if( (R2 & R2_SPI_OUT_OF_RANGE)==R2_SPI_OUT_OF_RANGE) {
    332                  TRACE_DEBUG("R2_SPI_OUT_OF_RANGE/R2_SPI_CSD_OVERWRITE\n\r");
    333              }
    334          }
   \                     DecodeR2:
   \   00000000   1EFF2FE1           BX       LR               ;; return
    335          
    336          //------------------------------------------------------------------------------
    337          /// Check SPI mode response 1.
    338          /// Returns 0 if no error; Otherwise, returns error.
    339          /// \param pResp  Pointer to response token.
    340          //------------------------------------------------------------------------------

   \                                 In section .text, align 4, keep-with-next

⌨️ 快捷键说明

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