我正在尝试使用STM32F405芯片写入MicroSD卡
引脚连接正确,MicroSD卡插槽上的每个引脚都可以使用HAL_GPIO_WritePin写入。 (用ossciloscope搞定)我正在使用CubeMX为TrueStudio生成初始化代码,所以希望一切顺利。但是当我运行以下代码时,f_mount返回FR_DISK_ERR
。 MicroSD卡可以写入和读取。如果我使用不同的设备号,即“1:”,我会得到FR_INVALID_DRIVE
所以我的问题是:除了有缺陷的MicroSD卡之外,什么可能导致FR_DISK_ERR
?
到目前为止,这是我的代码:
int main(void)
{
/* USER CODE BEGIN 1 */
/* USER CODE END 1 */
/* MCU Configuration----------------------------------------------------------*/
/* 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_SDIO_SD_Init();
MX_FATFS_Init();
/* USER CODE BEGIN WHILE */
FATFS fileSystem;
FIL testFile;
uint8_t testBuffer[16] = "SD write success";
UINT testBytes;
FRESULT res;
while((res = f_mount(&fileSystem, SD_MOUNT_PATH, 1)) != FR_OK){
printf("%d", res); //used to debug res, only for TrueStudio Debugger
}
uint8_t path[13] = "testfile.txt";
path[12] = '\0';
res = f_open(&testFile, (char*)path, FA_WRITE | FA_CREATE_ALWAYS);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_6, GPIO_PIN_RESET);
res = f_write(&testFile, testBuffer, 16, &testBytes);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_7, GPIO_PIN_RESET);
res = f_close(&testFile);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET);
}
调用MX_FATFS_Init()
FATFS_LinkDriver(&SD_Driver, SD_Path)
中的并返回0.
答案 0 :(得分:0)
如果没有SD_MOUNT_PATH宏,f_mount调用是否如下所示:
f_mount(&fileSystem, "0:", 1)
?'
你是说f_open,f_write返回FR_OK,即使f_mount失败了吗?!
FR_DISK_ERR通常表示disk_read()或disk_write()失败。在使用f_mount()之间以及在fatfs函数调用之间尝试给出100ms或1秒的延迟。