마이크로 컨트롤러 STM32F401RET6 기반의 Nucleo F401RE 보드를 사용하고 있습니다. 보드에 마이크로 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가 HAL 라이브러리를 사용하여 SD 카드와 통신하지 않습니다. 나는 당신에게 더 나은 운이 있는지보기 위해 또 다른 SD 카드를 가지고 시험해 볼 것이다. – staringlizard