マイクロコントローラSTM32F401RET6に基づくNucleo F401REボードを使用しています。ボードにMicro SDスロットを接続し、SDカードにデータを書き込み、そこからデータを読み込むことに興味がありました。私は、STM32CubeXソフトウェアを使用してコードを生成しました。特に組み込み関数を持つSDライブラリを生成しました。私は、特定の配列に配列を書き込んで、後で同じデータを読み込もうとする単純なコードを書き込もうとしました。コードは以下の通りである:マイクロコントローラからマイクロSDカードにデータを書き込むSTM32F401RET6
uint32_t to_send[512] = {1, 2, 3, 4, 5};
uint32_t to_receive[512];
int main(void)
{
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* Configure the system clock */
SystemClock_Config();
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_USART2_UART_Init();
MX_SDIO_SD_Init();
char buffer[14] = "Hello, world\n";
uint64_t address = 0x00;
HAL_SD_ErrorTypedef write_result = HAL_SD_WriteBlocks(&hsd, to_send, address, 512, 1);
HAL_SD_ErrorTypedef read_result = HAL_SD_ReadBlocks(&hsd, to_receive, 0x00, 512, 1);
HAL_UART_Transmit(&huart2, (uint8_t *) &write_result, 1, 1000);
HAL_UART_Transmit(&huart2, (uint8_t *) &read_result, 1, 1000);
while (1)
{
//HAL_UART_Transmit(&huart2, (uint8_t *)buffer, 14, 1000);
HAL_UART_Transmit(&huart2, (uint8_t *)to_receive, 512, 1000);
}
けれども、私は(、データを書き込むには、関数HAL_SD_WriteBlocksを成功していない)ことを意味し、値SD_CMD_CRC_FAILを返します:「コマンド応答を受信(ただし、CRCチェックに失敗しました)」 。私は何が欠けていますか?ハードウェア構成を何度も確認したところ、マイクロSDカードはマイクロコントローラに正しく接続されていました。必要に応じて、HAL組み込み関数の実装を追加できます。ありがとうございました。
どのセクタが書き込まれているかにかかわらず、このエラーが発生しますか?別のセクターに書き込むようにしてください。他のSDカードで試してみませんか? – staringlizard
まだ同じです。私はSDカードを交換しようとしなかったが、それはコンピュータ上で読むことができるので、それは大丈夫だと思う。 –
お使いのPCはSDカードとの通信にHALライブラリを使用していません。私は別のSDカードで試して、あなたがより良い運があるかどうかを見てみましょう。 – staringlizard