이 매뉴얼은 JK전자(JK Electronics) 에 의해서 번역, 수정, 작성 되었고 소유권 또한
JK전자(JK Electronics)
의 것입니다. 소유권자의 허가를 받지 않고 무단으로 수정, 삭제하거나 배포 할 수 없습니다.



 

SD Memory 카드 SPI 3.3V/5.0V 인터페이스 모듈 Atmega2560 제어 예제


 
* Update history

- 2013.4.18 : 초기 Release


  1. Atmega2560 Rabbit 개발보드와 연결 실험

(1) Atmega2560 Rabbit 개발보드와 SPI 인터페이스로 연결 합니다.

전원은 3.3V/5V 모두 사용가능 합니다.

(2) 제어 소스(ATMEGA2560 Avrstudio 4.14 Build589 프로젝트 소스 다운로드 )

FAT32형식의 SD메모리의 디렉토리와 파일을 읽어서 UART를 통해서 Display 해주는 예제 입니다.

SPI_SCK_PIN_NO --> PB1
SPI_MOSI_PIN_NO --> PB2
SPI_MISO_PIN_NO --> PB3
SPI_CS_PIN_NO --> PB0




#include "hw_config.h"
#include "led.h"
#include "uart.h"
#include "mmc_sd.h"
#include "diskio.h"
#include "ff.h"

static FATFS fs;            // Work area (file system object) for logical drive
static char path[20= {""};   
static DIR dirs;
static FILINFO finfo;

void sd_file_list(void)
{
  u32 sd_size;
  char tx_data[16]; 


  if( disk_initialize(0== 0 )
    usart0_puts("\r\nsd initialize success.\r\n");
  else
    usart0_puts("\r\nsd initialize failed.\r\n");
  
#if 1


  f_mount(0,&fs);

  usart0_puts("\r\nf_mount()\r\n");  

  if (f_opendir (&dirs, path) == FR_OK) 
    {
      usart0_puts("\r\nf_opendir()\r\n");  
        while (f_readdir (&dirs, &finfo) == FR_OK)  
      {
        usart0_puts("\r\nf_readdir()\r\n");  
      usart0_format_puts ("\r\n%s", finfo.fname);
          if (!(finfo.fattrib & AM_DIR)) 
          {
            
              if (!finfo.fname[0])  
              {
                usart0_puts("\r\nfinfo.fname\r\n");  
                  break;         

        }
              usart0_format_puts ("\r\n%s", finfo.fname);
          }                      
        }



  }
#endif
  sd_size = SD_GetCapacity();

#ifdef USE_AVR_STUDIO
  ultoa( sd_size, tx_data, 10);
#else
  ultoa( tx_data, sd_size, 10);
#endif
  usart0_format_puts("\r\nCapacity=%s Bytes\r\n", tx_data);
}

void main(void)
{

  CLI();  // all interrupt disable

  bsp_led_gpio_init();

#if 1
  bsp_usart0_gpio_init();
  

  if( F_CPU == 8000000UL )   
  {
    bsp_usart0_init(F_CPU, EBaud38400, EData8, EParNone, EStop1, FALSE );
  }
  else
  {
    bsp_usart0_init(F_CPU, EBaud115200, EData8, EParNone, EStop1, FALSE );  
  }

  init_usart0_buffer();

  bsp_usart0_interrupt_enable();  

  SEI();  // all interrupt enable

  bsp_led_core_on(ledUserCore);

  sd_file_list();
#endif

  //bsp_led_core_on(ledUserCore);

  while1 )
  {
    _delay_ms(10);
  }

  return;
}