BASIC4MCU | 질문게시판 | stm32에서 USB에 파일 생성 및 저장을 하려는데
페이지 정보
작성자 라칸 작성일2024-08-23 17:42 조회224회 댓글1건본문
간단하게 아래 코드를 만들어서 테스트를 해보는데
f_mount(&USBDISKFatFs, (TCHAR const*)USBDISKPath, 0);는 일단 error가 안나는데
f_open(&file, "TEST.TXT", FA_CREATE_ALWAYS | FA_WRITE); 이 부분을 실행하니까 하드폴트가 발생하는데
일단 task 스택을 4096정도로 했는데도 하드폴트가 나와서 스택 사이즈가 문제가 아닌거 같은데 뭐가 문제가 될 수 있나요?
//USB
FATFS USBDISKFatFs; // FatFs 파일 시스템 객체
TCHAR USBDISKPath[4]; // 드라이브 경로, 예: "0:" 또는 "1:"
FIL file; // 파일 구조체
FRESULT res; // 결과 코드
char sData[1024];
void TestFileSystem(void)
{
FIL file;
FRESULT res;
const char *test_text = "Hello, STM32!";
res = f_mount(&USBDISKFatFs, (TCHAR const*)USBDISKPath, 0);
if (res != FR_OK) {
Error_Handler();
return;
}
res = f_open(&file, "TEST.TXT", FA_CREATE_ALWAYS | FA_WRITE);
if (res != FR_OK) {
Error_Handler();
return;
}
UINT bytes_written;
res = f_write(&file, test_text, strlen(test_text), &bytes_written);
if (res != FR_OK || bytes_written != strlen(test_text)) {
Error_Handler();
}
f_close(&file);
f_mount(NULL, (TCHAR const*)USBDISKPath, 0); // Unmount
}
void mainTask(void const * argument)
{
/* init code for USB_HOST */
MX_USB_HOST_Init();
/* USER CODE BEGIN 5 */
/* Infinite loop */
for(;;)
{
if (osSemaphoreWait(SPHandle, osWaitForever) == osOK)
{
TestFileSystem();
osSemaphoreRelease(SPHandle);
}
vTaskDelay(pdMS_TO_TICKS(1000));
}
/* USER CODE END 5 */
}
경로가 제대로 마운트 안되고 있는건가요?
댓글 1
조회수 224master님의 댓글
master 작성일
인터넷 Tutorial에서 USB 드라이브의 섹터 크기에 맞게 MAX_SS 값을 4096으로 변경하도록 가이드하고 있는데 테스트에 사용한 USB 드라이브의 경우에는 이렇게 4096으로 늘려서 테스트를 하는 경우에 DISK ERR 가 발생하였다.
https://blog.naver.com/eziya76/220957569445
비슷한 오류를 웹검색해서 찾아보세요