當我發送CMD0命令是(0x40 0x00 0x00 0x00 0x00 0x95),我試圖初始化STM32F303上使用SPI SD卡,我試圖看看來自MOSI在示波器上,我看到了不同的信號,如下所示。請注意SPI的速度是281.25kBits/s。任何幫助,將不勝感激。在STM32F303上使用SPI SD卡初始化問題
這裏是我使用從MOSI
uint8_t cmd0[6]={0x40,0x00,0x00,0x00,0x00,0x95};
FATFS_CS_HIGH;
HAL_SPI_Transmit(&hspi1, (uint8_t*)0xff, 1, 10);
for(int i=0;i<10;i++)
{
HAL_SPI_Transmit(&hspi1, (uint8_t*)0xff, 1, 10);
}
FATFS_CS_LOW;
while(1){
HAL_SPI_Transmit(&hspi1, (uint8_t *)cmd0[0], 1, 10);
HAL_SPI_Transmit(&hspi1, (uint8_t *)cmd0[1], 1, 10);
HAL_SPI_Transmit(&hspi1, (uint8_t *)cmd0[2], 1, 10);
HAL_SPI_Transmit(&hspi1, (uint8_t *)cmd0[3], 1,10);
HAL_SPI_Transmit(&hspi1,(uint8_t *) cmd0[4], 1, 10);
HAL_SPI_Transmit(&hspi1, (uint8_t *)cmd0[5], 1, 10);
}
現在我發送正確命令,我可以看到它的範圍測試這個輸出的代碼的一部分。然而,我沒有得到SDcard(SanDisk Ultra 40MB/s ... 16GB)的0x01響應(我收到0xff)我正在使用以下代碼:
FATFS_CS_HIGH;
for (int i = 0; i < 10; i++) {
HAL_SPI_Transmit(&hspi1, &dumb, 1, 10);
while (HAL_SPI_GetState(&hspi1) != HAL_SPI_STATE_READY);
}
FATFS_CS_LOW;
HAL_SPI_Transmit(&hspi1, cmd0, 6, 10);
while (HAL_SPI_GetState(&hspi1) != HAL_SPI_STATE_READY);
for (int i = 0; i < 10; i++) {
HAL_SPI_Transmit(&hspi1, &dumb, 1, 10);
while (HAL_SPI_GetState(&hspi1) != HAL_SPI_STATE_READY);
}
HAL_SPI_Receive(&hspi1, &c, 1, 10);
你能解釋什麼應該發生的人誰可能有一個答案,也包括你試圖解決這個問題到目前爲止 – mike510a
對不起,我不明白你的意思。 –