lpc1768 SD卡基于ucos的fatfs文件系统
发布时间:2020-12-15 06:11:43 所属栏目:百科 来源:网络整理
导读:一、应用程序使用步骤 1、初始化? Init_Temp = disk_initialize( 1 ); // 为二底层驱动初始化 获取mmc信息 ? 2、加载逻辑驱动器 ? Fs_result = f_mount(0,fs);//卸载或挂在一个逻辑驱动器 3.1、打开文件夹 res = f_opendir(dirs,"Music"); 3.2打开文件 ? Fs_
一、应用程序使用步骤 1、初始化? Init_Temp = disk_initialize( 1 ); // 为二底层驱动初始化 获取mmc信息 ? 2、加载逻辑驱动器 ? Fs_result = f_mount(0,&fs);//卸载或挂在一个逻辑驱动器
res = f_opendir(&dirs,"Music");
? Fs_result = f_open(&fsrc,"ftxt.txt",FA_OPEN_EXISTING | FA_READ);
? res = f_read(&fsrc,buffer,sizeof(buffer),&br);
f_close(&fsrc); //关闭文件 ? 6、卸载驱动器 f_mount(1,0);
1、SPI初始化 void SPIInit(void) { /* 设置MX25L1602的控制引脚 */ // PINSEL0 = 0; FIO0DIR |= F016B_CS; /* 设置硬件SPI的通讯脚 */ PINSEL0 |= 0xc0000000; // 设置P0.15脚为SCK脚 PINSEL1 = (0x03 << 2) | (0x03 << 4); // 设置P0.17、P0.18引脚为SPI引脚 S0SPCCR = 0x40; // 设置SPI时钟分频,可按需求配置 /* 设置SPI的工作方式 */ S0SPCR = (0 << 2) | // SPI控制器每次传输发送和接收8位数据。 (0 << 3) | // CPHA = 0,数据在SCK 的第一个时钟沿采样 (0 << 4) | // CPOL = 0,SCK 为低有效 (1 << 5) | // MSTR = 1,SPI 处于主模式 (0 << 6) | // LSBF = 0,SPI 数据传输MSB (位7)在先 (0 << 7); // SPIE = 0,SPI 中断被禁止 }
? int MMC_disk_initialize(void) { /* Initialize and enable the Flash Card. */ U32 i,r1; /* Initialize SPI interface and enable Flash Card SPI mode. */ spi_init (); spi_ss (1); spi_send (0xFF); spi_hi_speed (__FALSE); /* Send SPI Command with card not selected at 400 KBit. */ for (i = 0; i < 16; i++) { spi_send (0xFF); } /* Reset the card,send CMD0. */ spi_ss (0); r1 = mmc_command (GO_IDLE_STATE,0); for (i = 0; i < 100; i++) { if (r1 == 0x01) { break; } r1 = spi_send (0xFF); } spi_ss (1); spi_send (0xFF); if (r1 != 0x01) { /* Failed to Reset Flash Card. */ return (__FALSE); } spi_hi_speed (__TRUE); CardType = CARD_NONE; /* Check if SD card,send ACMD41 */ for (i = 0; i < 50000; i++) { spi_ss (0); r1 = mmc_command (APP_CMD,0); spi_ss (1); if (r1 & 0x04) { /* Illegal Command. */ break; } if (r1 == 0x01) { spi_ss (0); r1 = mmc_command (SD_SEND_OP_COND,0); spi_ss (1); spi_send (0xFF); if (r1 == 0x00) { /* OK,SD card initialized. */ CardType = CARD_SD; break; } } } if (CardType == CARD_NONE) { /* Initialize MMC Card,send CMD1. */ for (i = 0; i < 50000; i++) { spi_ss (0); r1 = mmc_command (SEND_OP_COND,0); spi_ss (1);spi_send (0xFF); if (r1 != 0x01) { break; } } if (r1 != 0x00) { /* Failed to Initialize the card. */ return (__FALSE); } CardType = CARD_MMC; } /* Set block length in the Flash Card to 512 bytes. */ spi_ss (0); r1 = mmc_command (SET_BLOCKLEN,512); spi_ss (1); spi_send (0xFF); if (r1 != 0x00) { return (__FALSE); } /* Turn Off CRC option. */ spi_ss (0); r1 = mmc_command (CRC_ON_OFF,0); spi_ss (1); spi_send (0xFF); if (r1 != 0x00) { return (__FALSE); } /* Success,card initialized. */ return (__TRUE); }
? void Send_Byte(INT8U data) { S0SPDR = data; while ( 0 == (S0SPSR & 0x80)); // 等待SPIF置位,即等待数据发送完毕 data = S0SPSR; // 清除SPIF标志 } /************************************************************************ ** 函数名称:Get_Byte ** 函数功能:通过硬件SPI接口接收一个字节到处理器 ** 入口参数:无 ** 出口参数:无 ************************************************************************/ INT8U Get_Byte(void) { INT8U temp; S0SPDR = 0xff; // 发送该数据用以产生时钟,数据本身没有用处 while ( 0 == (S0SPSR & 0x80)); // 等待SPIF置位,即等待数据发送完毕 temp = S0SPSR; // 清除SPIF标志 temp=temp; return (INT8U)(S0SPDR); // 返回接收到的数据 } FATFS还是很好用的 速度快 占资源少。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |