1

私は、マイクロコントローラ STM32F401RET6 に基づくボード Nucleo F401RE を使用しています。ボードに Micro SD スロットを接続し、SD カードにデータを書き込んだり、SD カードからデータを読み取ったりすることに興味があります。ソフトウェア STM32CubeX を使用してコードを生成し、特に組み込み関数を備えた SD ライブラリを使用しました。配列を特定の配列に書き込み、後で同じデータを読み取ろうとする単純なコードを作成しようとしました。コードは次のとおりです。

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 チェックに失敗しました)」という意味です。何が欠けていますか?ハードウェア構成を何度も確認したところ、micro SD カードが正しくマイコンに接続されています。必要に応じて、HAL 組み込み関数の実装を追加できます。ありがとうございました。

4

2 に答える 2