/****************************************Copyright (c)**************************************************** ** ** ** **--------------File Info--------------------------------------------------------------------------------- ** File name: main.c ** Descriptions: The File System application function ** **-------------------------------------------------------------------------------------------------------- *********************************************************************************************************/ /* Includes ------------------------------------------------------------------*/ #include "ff.h" #include "lpc17xx_uart.h" #include "SPI_MSD_Driver.h" #include <stdio.h> #include <string.h> #ifdef __GNUC__ /* With GCC/RAISONANCE, small printf (option LD Linker->Libraries->Small printf set to 'Yes') calls __io_putchar() */ #define PUTCHAR_PROTOTYPE int __io_putchar(int ch) #else #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f) #endif /* __GNUC__ */ /* Private variables ---------------------------------------------------------*/ FATFS fs; /* Work area (file system object) for logical drive */ FIL fsrc; /* file objects */ FRESULT res; UINT br; char path[512]="0:"; uint8_t textFileBuffer[] = "Thank \r\n"; /* Private function prototypes -----------------------------------------------*/ int SD_TotalSize(void); void USART_Configuration(void); FRESULT scan_files (char* path); /******************************************************************************* * Function Name : Delay * Description : Delay Time * Input : - nCount: Delay Time * Output : None * Return : None * Attention : None *******************************************************************************/ void Delay (uint32_t nCount) { for(; nCount != 0; nCount--); } /******************************************************************************* * Function Name : main * Description : Main program * Input : None * Output : None * Return : None * Attention : None *******************************************************************************/ int main(void) { char A; USART_Configuration(); if( _card_insert() == 0 ) { printf("-- SD card detected OK \r\n"); } else { printf("-- Please connect a SD card \r\n"); while( _card_insert() != 0 ); printf("-- SD card connection detected \r\n"); Delay(0xffffff); } A=f_mount(0,&fs); printf("%d",A); res = f_open( &fsrc , "0:/Demo.TXT" , FA_CREATE_ALWAYS | FA_OPEN_ALWAYS); printf("%d",res); if ( res == FR_OK ) { /* Write buffer to file */ res = f_write(&fsrc, textFileBuffer, sizeof(textFileBuffer), &br); printf("%d/r/n",res); printf("Demo.TXT successfully created \r\n"); /*close file */ f_close(&fsrc); } else if ( res == FR_EXIST ) { printf("Demo.TXT created in the disk \r\n"); } scan_files(path); SD_TotalSize(); f_close(&fsrc); /* Infinite loop */ while (1) { } } void USART_Configuration(void) { uint32_t Fdiv; PINSEL_CFG_Type PinCfg; /* * Initialize UART2 pin connect */ PinCfg.Funcnum = 1; PinCfg.OpenDrain = 0; PinCfg.Pinmode = 0; PinCfg.Portnum = 0; PinCfg.Pinnum = 10; PINSEL_ConfigPin(&PinCfg); PinCfg.Pinnum = 11; PINSEL_ConfigPin(&PinCfg); /* Initialize UART Configuration parameter structure to default state: * Baudrate = 115200bps * 8 data bit * 1 Stop bit * None parity */ LPC_SC->PCONP = LPC_SC->PCONP|(1<<24); /* UART2 Power bit */ LPC_UART2->LCR = 0x83; /* 8 bits, no Parity, 1 Stop bit */ #define FOSC 12000000 /* Õñµ´Æ÷ƵÂÊ */ #define FCCLK (FOSC * 8) /* Ö÷ʱÖÓƵÂÊ<=100Mhz FOSCµÄÕûÊý±¶ */ #define FPCLK (FCCLK / 4) /* ÍâÉèʱÖÓƵÂÊ FCCLKµÄ1/2 1/4 */ Fdiv = ( FPCLK / 16 ) / 115200 ; /*baud rate */ LPC_UART2->DLM = Fdiv / 256; LPC_UART2->DLL = Fdiv % 256; LPC_UART2->LCR = 0x03; /* DLAB = 0 */ LPC_UART2->FCR = 0x07; /* Enable and reset TX and RX FIFO. */ } /******************************************************************************* * Function Name : USART_Configuration * Description : Configure USART1 * Input : None * Output : None * Return : None * Attention : None *******************************************************************************/ /******************************************************************************* * Function Name : scan_files * Description : ËÑË÷ÎļþĿ¼ÏÂËùÓÐÎļþ * Input : - path: ¸ùĿ¼ * Output : None * Return : FRESULT * Attention : ²»Ö§³Ö³¤ÎļþÃû *******************************************************************************/ FRESULT scan_files (char* path) { 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 res = f_opendir(&dir, path); if (res == FR_OK) { i = strlen(path); for (;;) { res = f_readdir(&dir, &fno); if (res != FR_OK || fno.fname[0] == 0) break; if (fno.fname[0] == '.') continue; #if _USE_LFN fn = *fno.lfname ? fno.lfname : fno.fname; #else fn = fno.fname; #endif if (fno.fattrib & AM_DIR) { sprintf(&path, "/%s", fn); res = scan_files(path); if (res != FR_OK) break; path = 0; } else { printf("%s/%s \r\n", path, fn); } } } return res; } /******************************************************************************* * Function Name : SD_TotalSize * Description : Îļþ¿Õ¼äÕ¼ÓÃÇé¿ö * Input : None * Output : None * Return : ·µ»Ø1³É¹¦ ·µ»Ø0ʧ°Ü * Attention : None *******************************************************************************/ int SD_TotalSize(void) { FATFS *fs; DWORD fre_clust; res = f_getfree("0:", &fre_clust, &fs); /* ±ØÐëÊǸùĿ¼£¬Ñ¡Ôñ´ÅÅÌ0 */ if ( res==FR_OK ) { /* Print free space in unit of MB (assuming 512 bytes/sector) */ printf("\r\n%d MB total drive space.\r\n" "%d MB available.\r\n", ( (fs->n_fatent - 2) * fs->csize ) / 2 /1024 , (fre_clust * fs->csize) / 2 /1024 ); return ENABLE; } else return DISABLE; } /** * @brief Retargets the C library printf function to the USART. * @param None * @retval None */ PUTCHAR_PROTOTYPE { /* wait for current transmission complete - THR must be empty */ while (UART_CheckBusy(LPC_UART2) == SET); UART_SendByte(LPC_UART2, ch); return ch; } #ifdef DEBUG /******************************************************************************* * @briefReports the name of the source file and the source line number * where the CHECK_PARAM error has occurred. * @param[in]file Pointer to the source file name * @param[in] line assert_param error line source number * @returnNone *******************************************************************************/ void check_failed(uint8_t *file, uint32_t line) { /* User can add his own implementation to report the file name and line number, ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ /* Infinite loop */ while(1); } #endif ///********************************************************************************************************* // END FILE //*********************************************************************************************************/ //FATFS FatFs; /* Work area (file system object) for logical drive */ //int main (void) //{ // FIL fil; /* File object */ // char line[82]; /* Line buffer */ // FRESULT fr; /* FatFs return code */ // /* Register work area to the default drive */ // f_mount(0,&FatFs); // /* Open a text file */ // fr = f_open(&fil, "message.txt", FA_READ); // if (fr) return (int)fr; // /* Read all lines and display it */ // while (f_gets(line, sizeof line, &fil)) // printf(line); // /* Close the file */ // f_close(&fil); // return 0; //} |
Original Attachment has been moved to: fat.rar