我正在使用基于微控制器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卡,但是我可以在电脑上阅读,所以我猜这没关系。 –
您的电脑不使用HAL库与SD卡通信。我会尝试与另一张SD卡,看看你是否有更好的运气。 – staringlizard