SD card initialization problem - CMD16 wrong response
I've add 8 clock by sending 0xFF through SPI after receiving respond and now I get the correct respond. Don't add it with read block command, it could flush additional 1 byte from offset.

uint8_t SDCard_Initialize(void)         {
   uint8_t i;
   //Send 80 pulses to active SD card
   for(i = 0; i &lt; 10; i++)                      
      SPI_ByteTransfer(0xFF);               //Each byte send = 8 pulses
   GPIO_SPI-&gt;BRR = GPIO_CS;                 //Enable SD card CS pin
   SDCard_SendCommand(CMD0, 0, 0x4A);       //SD card go to Idle state
   if(!SDCard_CheckRespond(0x01))
      return 1;                             //Error code 1

   /* ADD 8 CLOCK AFTER RECEIVE RESPONSE */
   **SPI_ByteTransfer(0xFF);**

   for(i = 0; i &lt; 10; i++)                      {               
       SDCard_SendCommand(CMD1, 0, 0xFF);   //SD card active operations
       if(SDCard_CheckRespond(0x00))        
          break;                                                                        
   }    
   if(i == 10)
       return 2;                           //Error code 2

   /* ADD 8 CLOCK AFTER RECEIVE RESPONSE */
   **SPI_ByteTransfer(0xFF);**

   SDCard_SendCommand(CMD16, 512, 0xFF);  //SD card active operations
   if(!SDCard_CheckRespond(0x00))
       return 3;

   /* ADD 8 CLOCK AFTER RECEIVE RESPONSE */
   **SPI_ByteTransfer(0xFF);**

   GPIO_SPI-&gt;BSRR = GPIO_CS;               //Disable SD card CS pin
   return 0;
}