처음으로 SD-Card 를 납땜을 해서, 동작이 잘 되는지 확인을 해 봤습니다.
테스트 방법은, uSD-Card 를 마운트 하고 디렉토리 스캔을 해서 USB_CDC 로 터미널에 뿌려서
안에 넣어둔 파일이 제대로 보이는지 확인하면 되겠습니다.
다음은 보드에 uSD-Card 를 납땜한 모습입니다.
uSD-Card 회로도는 다음과 같습니다. STM32F4xx 에 SDIO-4bit 방식으로 연결했습니다.
다음은 ST 사의 CUBEMX 툴로 SDIO-4BIT 를 추가한 핀맵입니다.
다음은 디렉토리 스캔 함수 인데, 출처는 기억이 안납니다. main.c 파일에 붙여서 사용하면 됩니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 | void f_opendir_scan(void) { #if _USE_LFN TCHAR lfn[_MAX_LFN + 1]; fno.lfname = lfn; fno.lfsize = sizeof lfn; #endif TCHAR path[200] = ""; res = f_mount(&fs32,SD_Path,1); printf("SD Mount : res f_mount : %02X\n\r",res); if (res == FR_OK) { res = f_opendir(&dir,path); printf("res f_open : %02X\n\r",res); if (res == FR_OK) { while(1) { char *fn; res = f_readdir(&dir, &fno); if (res != FR_OK) printf("res = %d f_readdir\n\r", res); if ((res != FR_OK) || (fno.fname[0] == 0)) break; #if _USE_LFN fn = *fno.lfname ? fno.lfname : fno.fname; #else fn = fno.fname; #endif printf("%c%c%c%c ", ((fno.fattrib & AM_DIR) ? 'D' : '-'), ((fno.fattrib & AM_RDO) ? 'R' : '-'), ((fno.fattrib & AM_SYS) ? 'S' : '-'), ((fno.fattrib & AM_HID) ? 'H' : '-') ); printf("%10d ", fno.fsize); printf("%s/%s\n\r", path, fn); } } res = f_mount(0,SD_Path,0); printf("SD Unmount : res f_mount : %02X\n\r",res); } } | cs |
다음은 main() 함수에서, 파일 변수들 정의해 봏고, 디렉토리 스캔함수를 호출해 주면 됩니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | /* Private variables ---------------------------------------------------------*/ HAL_SD_ErrorTypedef res_sd; FRESULT res; FILINFO fno; FIL fil; DIR dir; FATFS fs32; uint32_t byteswritten, bytesread; /* File write/read counts */ 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_DMA_Init(); MX_TIM2_Init(); MX_USB_DEVICE_Init(); MX_SDIO_SD_Init(); MX_FATFS_Init(); /* USER CODE BEGIN 2 */ // HAL_GPIO_WritePin(SDPWR_GPIO_Port, SDPWR_Pin, GPIO_PIN_RESET); HAL_Delay(500); HAL_TIM_Base_Start_IT(&htim2); f_opendir_scan(); while (1) { } } | cs |
그리고 나서 프로그램을 다운로드 하고 실행을 하니, uSD-Card 의 내용이 보입니다.
납땜이 제대로 잘 됐군요.^^
'STM32F4' 카테고리의 다른 글
[STM32F4xx] CUBEMX ver 4.2 버그 많아서 못쓰겄네. (0) | 2018.09.05 |
---|---|
[STM32F4xx] CUBEMX ver 4.2 버그 (HSE RCC Initialize Fail) (0) | 2018.09.05 |
[STM32F4xx] CUBEMX ver 4.2 새로운 라이브러리 [LIBJPEG] (0) | 2018.09.04 |
[STM32F4xx] TIM PWM_CHxN 출력 (PWM One Pulse mode) (4) | 2018.09.04 |
[STM32F4xx] uSD-Card USB MSC(Mass Storage Class: KEIL S/W) (2/2) (1) | 2018.09.03 |