Firmware/STM32

stm32 SDIO SD 카드 테스트 / FR_NOT_READY

또난 2023. 1. 15. 11:59

 STM32F401 로 Cube-IDE 테스트 

포트 설정

클럭은 84M 로 하면 최대 42M로만 설정됨.

 

 

인터럽트 설정

 

DMA 설정

 

H/W 에 풀업 없어서 내부 풀업 설정..클럭은 하지 말라고 하는데..해도 동작 확인됨.

 

USE LFN 만 Enable

 

 

DMA 활성화

 

SD 카드 확인 입력 포트 설정안하면 위에 같이 경고창 나옴.

 

 

================== 추가사항 =====

STM32F4 펌웨어 버그가 있는것 같다.

1.26.2 에서 잘 동작하는데.. 1.27.1로 업데이트 하고 SD 카드 마운트 하면  FR_NOT_READY 를 리턴한다.

이것 때문에  H/W 디버깅만 계속하고..하루종일 개고생함...참나...

HAL 라이브러리 비교하면서 원인 찾으려다..시간이 없어서...나중에 확인해봐야 겠다..

 

여기 유사한 내용 있음..이런..ㅡㅡ;

https://community.st.com/s/question/0D53W000020H9NGSA0/sdcard-does-not-work-frnotready-when-migrating-from-fwf4-v1270-to-newer-fwf4-v1271

 

SDCARD does not work (FR_NOT_READY) when migrating from FW_F4 V1.27.0 to newer FW_F4 V1.27.1

 

community.st.com

401_RBold.zip
0.69MB

디버깅에서 test 를 1로 설정하면 kts12.txt 에 틱값 를 저장한다.

 

 while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
	  HAL_Delay(100);

	  if(test == 1){

		       retSD = f_mount(&SDFatFS, SDPath, 1);
		         if(retSD == FR_OK)
		         {
		       	 // d_msg("f_mount OK %d\r\n", retSD);

		         }
		         else {
		       	  //d_msg("f_mount NG %d\r\n", retSD);
		         }
		         retSD = f_open(&SDFile, "kts1.txt", FA_OPEN_APPEND|FA_READ|FA_WRITE);

		           if(retSD == FR_OK)
		           {
		         	  //d_msg("f_open OK %d\r\n", retSD);
		        	   sprintf(SD_data, "\r\n%ld", uwTick);
		         	  retSD = f_write(&SDFile,SD_data, 10, &bw);
		         	  if(retSD == FR_OK){
		         		  //d_msg("f_write OK %d\r\n", retSD);
		         		  f_close(&SDFile);
		         	  }

		           }
		           else {
		         	 // d_msg("f_open NG %d\r\n", retSD);
		           }
		           test = 0;
	  }

  }
  /* USER CODE END 3 */
}

=============  23.03.25 ==============

stm32f215 에서 테스트 

펌웨어 버전은 1.9.0

4 bits bus 설정하면  자동 생성 코드가 하기와 같이 1B로 적용됨.

 

HAL_SD_InitCard 

1B로 설정된 부분을 4B로 변경해야 정상 작동함.

 

구형 버전인지..FA_OPEN_APPEND 이게 없음..

 

retSD = f_mount(&SDFatFS, (TCHAR const*)SDPath, 1);

 

SD 카드 종류(용량)에 따라 1로 적용하면 FR_NOT_READY 발생되는데 저장은 정상적임..

0으로 설정할 경우.. FR_OK 가 되긴 하는데.. 저장이 안됨..

 

mount 리턴값은 확인 하지 않는게 좋을듯..

 

특이한건 .... 동일한 코드 Keil 컴파일러(사이즈제한 평가판)는 동작에 아무 문제 없다.

(Cube IDE만 동작 불안정함.)

 

최종 결론.

FW 버전차이로 문제되는 것, SDIO_BUS_WIDE_4B 도 변경안해도... Keil 은 잘됨..

대신 4 bit 동작은 실제 스코프로 확인해봐야 할듯.

Keil  컴파일러 사용해야 함.

 

FW F2 Ver1.9.3 최근 버전으로 cube, keil..테스트 코드.

f215_sdio_keil_193.zip
0.66MB
f215_sdio_cubeide (2).zip
0.64MB

혹시나 해서 cube ide 1.12.0 최근 버전으로 했더니 역시 안됨..ㅎㅎ

한달가량 H/W 문제로 보고 디버깅한 시간이 아깝다. ㅜㅜ