Guest User

Untitled

a guest
Jan 4th, 2026
63
0
24 days
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 0.96 KB | None | 0 0
  1. // .....
  2. char buffer[512];
  3. //......
  4.  
  5.     SDMMC1->IDMABSIZE = (sizeof(buffer)/4/8) << SDMMC_IDMABSIZE_IDMABNDT_Pos;
  6.     SDMMC1->IDMACTRL |= SDMMC_IDMA_IDMAEN_Msk;
  7.     SDMMC1->IDMABASER = (unsigned int)buffer;
  8.  
  9.     SDMMC1->DLEN   = sizeof(buffer);
  10.     SDMMC1->DTIMER = 0xFFFFFFFF;           // max timeout
  11.     SDMMC1->DCTRL = (9<<SDMMC_DCTRL_DBLOCKSIZE_Pos) |
  12.         SDMMC_DCTRL_DTDIR     // read
  13.         | SDMMC_DCTRL_DTEN;
  14.  
  15.     while(!(SDMMC1->STA & SDMMC_STA_DPSMACT));
  16.  
  17.     SDMMC1->ICR |= 0xFFFFFFFF;
  18.    
  19.     SDMMC1->ARG = lba;
  20.     SDMMC1->CMD = (17 << SDMMC_CMD_CMDINDEX_Pos) |
  21.                     SDMMC_CMD_WAITRESP_0 |
  22.                     SDMMC_CMD_CPSMEN;
  23.    
  24.     while (!(SDMMC1->STA & (SDMMC_STA_CMDSENT | SDMMC_STA_CMDREND | SDMMC_STA_CTIMEOUT | SDMMC_STA_CCRCFAIL)));
  25.  
  26.     if(SDMMC1->STA & SDMMC_STA_CTIMEOUT || SDMMC1->STA & SDMMC_STA_CCRCFAIL){
  27.         return ;    
  28.     }
  29.  
  30. // here infinite loop. I use debugger to check buffer value.
Advertisement
Add Comment
Please, Sign In to add comment