disk_sta=disk_initialize(0);//disk_status
f_mount(0, &fatfs[0]);
f_open(&fsrc, "0:/ABC.TXT", FA_CREATE_NEW | FA_READ);
出现
FR_NO_FILESYSTEM, /* (13) There is no valid FAT volume */
本人使用SPI1 硬件 和 使用 IO 软件模拟SPI1读都是这样!
开发板就是万利电子的 EK-STM32F
#if defined(USE_EK_STM32F)
#define CARD_SUPPLY_SWITCHABLE 1
#define GPIO_PWR GPIOD
#define RCC_APB2Periph_GPIO_PWR RCC_APB2Periph_GPIOD
#define GPIO_Pin_PWR GPIO_Pin_10
#define GPIO_Mode_PWR GPIO_Mode_Out_OD /* pull-up resistor at power FET */
#define SOCKET_WP_CONNECTED 0
#define SOCKET_CP_CONNECTED 0
#define SPI_SD SPI1
#define GPIO_CS GPIOD
#define RCC_APB2Periph_GPIO_CS RCC_APB2Periph_GPIOD
#define GPIO_Pin_CS GPIO_Pin_9
#define DMA_Channel_SPI_SD_RX DMA1_Channel2
#define DMA_Channel_SPI_SD_TX DMA1_Channel3
#define DMA_FLAG_SPI_SD_TC_RX DMA1_FLAG_TC2
#define DMA_FLAG_SPI_SD_TC_TX DMA1_FLAG_TC3
#define GPIO_SPI_SD GPIOA
#define GPIO_Pin_SPI_SD_SCK GPIO_Pin_5
#define GPIO_Pin_SPI_SD_MISO GPIO_Pin_6
#define GPIO_Pin_SPI_SD_MOSI GPIO_Pin_7
#define RCC_APBPeriphClockCmd_SPI_SD RCC_APB2PeriphClockCmd
#define RCC_APBPeriph_SPI_SD RCC_APB2Periph_SPI1
/* - for SPI1 and full-speed APB2: 72MHz/4=18MHZ */
#define SPI_BaudRatePrescaler_SPI_SD SPI_BaudRatePrescaler_4
#endif
/*******************************************************************************
* Function Name : static void MMC_SPI_Config(void)
* Description : 初始化 SPI1作为SD卡的读写驱动
* Input : None
* Output : None
* Return : None
* Attention : None
*******************************************************************************/
void MMC_SPI_Config(void)
{
SPI_InitTypeDef SPI_InitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA |
RCC_APB2Periph_GPIOD |
RCC_APB2Periph_AFIO |
RCC_APB2Periph_SPI1,
ENABLE);
//RCC_PCLK2Config(RCC_HCLK_Div4); //72/4=18MHz 降APB2时钟
//SPI MISO GPIO_Pin_SPI_SD_MISO
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;//上拉输入
GPIO_Init(GPIOA, &GPIO_InitStructure);
/* Configure SPI1 pins: SCK, MISO and MOSI */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_SPI_SD_SCK | GPIO_Pin_SPI_SD_MISO| GPIO_Pin_SPI_SD_MOSI;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOA, &GPIO_InitStructure);
/* Configure PD9 pin: CS pin ,PD10 : SD Power as Output push-pull, used as Flash Chip select */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9|GPIO_Pin_10;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOD, &GPIO_InitStructure);
/* SPI1 configuration */
SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
SPI_InitStructure.SPI_CPOL = SPI_CPOL_High; //CPOL=1 时钟悬空高
SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge; //CPHA=1 数据捕获第二个
SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_256;
SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
SPI_InitStructure.SPI_CRCPolynomial = 7;
SPI_Init(SPI1, &SPI_InitStructure);
/* Enable SPI1 */
SPI_Cmd(SPI1, ENABLE);
}
|