[ST_MICRO]/STM32F43x2015.03.14 22:00

STM32F439 EVM - SD카드를 이용한 BMP파일 출력 테스트

 STM32F439 EVM - SD카드를 이용한 BMP파일 출력 테스트



STM32F439 EVM 보드 에는 SDIO방식의 SD Card 연결할 수 있는 SD 소켓이 할당되어 있고 이를 이용하여 SD Card의 BMP파일을 TFT LCD에 출력하는 테스트를 진행해 보았다.




STM32F439 7" TFT-LCD 출력 테스트 동영상




STM32F439 SDIO 초기화 코드
uint8_t BSP_SD_Init(void)
  uint8_t SD_state = MSD_OK;
  
  /* uSD device interface configuration */
  uSdHandle.Instance = SDIO;

  uSdHandle.Init.ClockEdge           = SDIO_CLOCK_EDGE_RISING;
  uSdHandle.Init.ClockBypass         = SDIO_CLOCK_BYPASS_DISABLE;
  uSdHandle.Init.ClockPowerSave      = SDIO_CLOCK_POWER_SAVE_DISABLE;
  uSdHandle.Init.BusWide             = SDIO_BUS_WIDE_1B;
  uSdHandle.Init.HardwareFlowControl = SDIO_HARDWARE_FLOW_CONTROL_DISABLE;
  uSdHandle.Init.ClockDiv            = SDIO_TRANSFER_CLK_DIV;
  
  /* Configure IO functionalities for SD detect pin */
  //BSP_IO_Init(); 
  
  /* Check if the SD card is plugged in the slot */
  if(BSP_SD_IsDetected() != SD_PRESENT)
  {
    return MSD_ERROR;
  }
  
  /* HAL SD initialization */
  SD_MspInit();
  if(HAL_SD_Init(&uSdHandle, &uSdCardInfo) != SD_OK)
  {
    SD_state = MSD_ERROR;
  }
  
  /* Configure SD Bus width */
  if(SD_state == MSD_OK)
  {
    /* Enable wide operation */
    if(HAL_SD_WideBusOperation_Config(&uSdHandle, SDIO_BUS_WIDE_4B) != SD_OK)
    {
      SD_state = MSD_ERROR;
    }
    else
    {
      SD_state = MSD_OK;
    }
  }
  
  return  SD_state;
}



STM32F439 SD Card를 이용한 BMP파일 출력 테스트 예제코드
    //SD 카드 초기화
    if(FATFS_LinkDriver(&SD_Driver, SDPath) == 0)
    {
        if(f_mount(&SDFatFs, (TCHAR const*)SDPath, 0) != FR_OK)
        {
            Led2On();
            Error_Handler();

            while(1);
        }
        else
        {
            //파일 리스트 출력
            //res = print_files("");
            Led1On();
            
            
            //------------------------------------------------------------------
            //BMP파일 출력테스트
            InitBmpFileRead();
            
            //BMP파일 읽어와서
            if(OpenReadBmpFile(ImageBuffer, (const char*)"1_3.bmp"))
            {
                BSP_LCD_SelectLayer(1);
                
                //출력
                BSP_LCD_DrawBitmap(0, 0, ImageBuffer);  
                BSP_LCD_SetTransparency(1, 255);            
            }
            //------------------------------------------------------------------
}
}




STM32F439 BMP 이미지 7" TFT-LCD에 출력 결과









Posted by nexp

댓글을 달아 주세요

[MCU]/CANTUS2011.04.03 01:30

[CANTUS EVM] SD Card 테스트

[CANTUS EVM] SD Card 테스트



CANTUS 는 SDIO를 지원하므로 SD Card를 고속으로 접근할 수 있다. [CANTUS EVN]보드 뒷면에는 T-Flash를 연결할 수 있도록 해서 SDIO를 테스트 해 볼 수 있다.

[CANTUS EVM] SD Card 회로도





CANTUS개발환경의에는 SD Card제어를위한 라이버러리를 제공기 때문에 쉽게 테스트 가능하다.
#include "system.h"
#include "serial.h"

unsigned int scan_files (char* path)
{
 unsigned int file_cnt = 0;
    FRESULT res;
    FILINFO fno;
    DIR dir;
    int i;
    char *fn;
 
#if _USE_LFN
    static char lfn[_MAX_LFN * (_DF1S ? 2 : 1) + 1];
    fno.lfname = lfn;
    fno.lfsize = sizeof(lfn);
#endif

 DebugPrint("Open..");
    res = f_opendir(&dir, path);
 
    if (res == FR_OK) {
        i = strlen(path);
  DebugPrint("OK.");
        for (;;) {
            res = f_readdir(&dir, &fno);
            if (res != FR_OK || fno.fname[0] == 0) break;
#if _USE_LFN
            fn = *fno.lfname ? fno.lfname : fno.fname;
#else
            fn = fno.fname;
#endif
            if (fno.fattrib & AM_DIR) {
                DebugPrint("[D]%s\r\n",fn);
            } else {
                DebugPrint("%s/%s : \t\t %dbyte\r\n", path, fn,fno.fsize);
            }
        }
    }
 else{
  DebugPrint("path(%s) not found:Error(%d)\r\n",path,res);
  
 }
 
    return file_cnt;
}

int main()
{
 FATFS fs;
 int file_cnt;
 
 SystemInit();
 
 DebugInit(BAUD_115200);
 DebugPrint("CANTUS SD Card Test3\r\n");
  
 DebugPrint("System Clock(%dMhz)\r\n",GetAHBclock()/1000000); 

 Led1Init();
 Led1On();

 DebugPrint("Mount..."); 
 if(f_mount(DRIVE_SDCARD,&fs) != FR_OK)
 {
  DebugPrint("Error");
  while(1);
 }
 else DebugPrint("OK\r\n");
 
 DebugPrint("File Search:\r\n");
 
 file_cnt = scan_files("1:");
 DebugPrint("file count:%d\r\n", file_cnt);
 while(1);

 return 1;
}




CANTUS SD Card테스트 결과
SD Memory Card
Identification Mode Start
the mandatory maximum operating frequency of SD Memory Card : 25Mhz
SD Memory Size : 485Mbyte ,Blocksize:512byte
SD CARD Initialize Completed
SDCard operating frequency:18800640
OK.
File Search:
1:/a_3.bmp :    192054byte
1:/a_12.bmp :    192054byte
1:/img1.bmp :    192054byte
1:/img2.bmp :    192054byte
file count : 4
Posted by nexp

댓글을 달아 주세요