init
This commit is contained in:
398
HARDWARE/SDIO/sdio.c
Normal file
398
HARDWARE/SDIO/sdio.c
Normal file
@@ -0,0 +1,398 @@
|
||||
//-----------------------------------------------------------------
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:
|
||||
// SD<53><44><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20><> <20><>: <20><><EFBFBD>ǵ<EFBFBD><C7B5><EFBFBD>
|
||||
// <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>: 2018-08-04
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: 2018-08-04
|
||||
// <20><EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD>:
|
||||
// <20><>ǰ<EFBFBD>汾: V1.0
|
||||
// <20><>ʷ<EFBFBD>汾:
|
||||
// - V1.0: (2018-08-04) SD<53><44><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD>Ͷ<EFBFBD>д
|
||||
// <20><><EFBFBD>Թ<EFBFBD><D4B9><EFBFBD>: <20><><EFBFBD><EFBFBD>STM32F429+CycloneIV<49><56><EFBFBD><EFBFBD>ϵͳ<CFB5><CDB3><EFBFBD>ƿ<EFBFBD><C6BF><EFBFBD><EFBFBD>塢LZE_ST_LINK2
|
||||
// ˵ <20><>:
|
||||
//
|
||||
//-----------------------------------------------------------------
|
||||
|
||||
//-----------------------------------------------------------------
|
||||
// ͷ<>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>
|
||||
//-----------------------------------------------------------------
|
||||
#include "sdio.h"
|
||||
#include "string.h"
|
||||
//-----------------------------------------------------------------
|
||||
|
||||
SD_HandleTypeDef SDCARD_Handler; // SD<53><44><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
HAL_SD_CardInfoTypedef SDCardInfo; // SD<53><44><EFBFBD><EFBFBD>Ϣ<EFBFBD>ṹ<EFBFBD><E1B9B9>
|
||||
DMA_HandleTypeDef SDTxDMAHandler,SDRxDMAHandler; // SD<53><44>DMA<4D><41><EFBFBD>ͺͽ<CDBA><CDBD>վ<EFBFBD><D5BE><EFBFBD>
|
||||
|
||||
// SD_ReadDisk/SD_WriteDisk<73><6B><EFBFBD><EFBFBD>ר<EFBFBD><D7A8>buf,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݻ<EFBFBD><DDBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>4<EFBFBD>ֽڶ<D6BD><DAB6><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>,
|
||||
// <20><>Ҫ<EFBFBD>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,ȷ<><C8B7><EFBFBD><EFBFBD><EFBFBD>ݻ<EFBFBD><DDBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7>4<EFBFBD>ֽڶ<D6BD><DAB6><EFBFBD><EFBFBD><EFBFBD>.
|
||||
__align(4) u8 SDIO_DATA_BUFFER[512];
|
||||
|
||||
//-----------------------------------------------------------------
|
||||
// u8 SD_Init(void)
|
||||
//-----------------------------------------------------------------
|
||||
//
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: SD<53><44><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>
|
||||
// <20><><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>: <20><>
|
||||
// <20><> <20><> ֵ: 0 <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// ע<><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <20><>
|
||||
//
|
||||
//-----------------------------------------------------------------
|
||||
u8 SD_Init(void)
|
||||
{
|
||||
u8 SD_Error;
|
||||
|
||||
// <20><>ʼ<EFBFBD><CABC>ʱ<EFBFBD><CAB1>ʱ<EFBFBD>Ӳ<EFBFBD><D3B2>ܴ<EFBFBD><DCB4><EFBFBD>400KHZ
|
||||
SDCARD_Handler.Instance=SDIO;
|
||||
SDCARD_Handler.Init.ClockEdge=SDIO_CLOCK_EDGE_RISING; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
SDCARD_Handler.Init.ClockBypass=SDIO_CLOCK_BYPASS_DISABLE; // <20><>ʹ<EFBFBD><CAB9>bypassģʽ<C4A3><CABD>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD>HCLK<4C><4B><EFBFBD>з<EFBFBD>Ƶ<EFBFBD>õ<EFBFBD>SDIO_CK
|
||||
SDCARD_Handler.Init.ClockPowerSave=SDIO_CLOCK_POWER_SAVE_DISABLE; // <20><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>ر<EFBFBD>ʱ<EFBFBD>ӵ<EFBFBD>Դ
|
||||
SDCARD_Handler.Init.BusWide=SDIO_BUS_WIDE_1B; // 1λ<31><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
SDCARD_Handler.Init.HardwareFlowControl=SDIO_HARDWARE_FLOW_CONTROL_DISABLE; // <20>ر<EFBFBD>Ӳ<EFBFBD><D3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
SDCARD_Handler.Init.ClockDiv=SDIO_TRANSFER_CLK_DIV; // SD<53><44><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>25MHZ
|
||||
|
||||
SD_Error=HAL_SD_Init(&SDCARD_Handler,&SDCardInfo);
|
||||
if(SD_Error!=SD_OK)
|
||||
return 1;
|
||||
|
||||
SD_Error=HAL_SD_WideBusOperation_Config(&SDCARD_Handler,SDIO_BUS_WIDE_4B); // ʹ<>ܿ<EFBFBD><DCBF><EFBFBD><EFBFBD><EFBFBD>ģʽ
|
||||
if(SD_Error!=SD_OK)
|
||||
return 2;
|
||||
return 0;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------
|
||||
// void HAL_SD_MspInit(SD_HandleTypeDef *hsd)
|
||||
//-----------------------------------------------------------------
|
||||
//
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: SDMMC<4D>ײ<EFBFBD><D7B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>ʹ<EFBFBD>ܣ<EFBFBD><DCA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD>DMA<4D><41><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>: SD_HandleTypeDef *hsd<73><64>SD<53><44><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20><> <20><> ֵ: <20><>
|
||||
// ע<><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <20>˺<EFBFBD><CBBA><EFBFBD><EFBFBD>ᱻHAL_SD_Init()<29><><EFBFBD><EFBFBD>
|
||||
//
|
||||
//-----------------------------------------------------------------
|
||||
void HAL_SD_MspInit(SD_HandleTypeDef *hsd)
|
||||
{
|
||||
DMA_HandleTypeDef TxDMAHandler,RxDMAHandler;
|
||||
GPIO_InitTypeDef GPIO_Initure;
|
||||
|
||||
__HAL_RCC_SDIO_CLK_ENABLE(); // ʹ<><CAB9>SDIOʱ<4F><CAB1>
|
||||
__HAL_RCC_DMA2_CLK_ENABLE(); // ʹ<><CAB9>DMA2ʱ<32><CAB1>
|
||||
__HAL_RCC_GPIOC_CLK_ENABLE(); // ʹ<><CAB9>GPIOCʱ<43><CAB1>
|
||||
__HAL_RCC_GPIOD_CLK_ENABLE(); // ʹ<><CAB9>GPIODʱ<44><CAB1>
|
||||
|
||||
// PC8->SDIO_D0, PC9->SDIO_D1, PC10->SDIO_D2, PC11->SDIO_D3, PC12->SDIO_CK
|
||||
GPIO_Initure.Pin=GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10|GPIO_PIN_11|GPIO_PIN_12;
|
||||
GPIO_Initure.Mode=GPIO_MODE_AF_PP; // <20><><EFBFBD>츴<EFBFBD><ECB8B4>
|
||||
GPIO_Initure.Pull=GPIO_PULLUP; // <20><><EFBFBD><EFBFBD>
|
||||
GPIO_Initure.Speed=GPIO_SPEED_HIGH; // <20><><EFBFBD><EFBFBD>
|
||||
GPIO_Initure.Alternate=GPIO_AF12_SDIO; // <20><><EFBFBD><EFBFBD>ΪSDIO
|
||||
HAL_GPIO_Init(GPIOC,&GPIO_Initure); // <20><>ʼ<EFBFBD><CABC>
|
||||
|
||||
GPIO_Initure.Pin=GPIO_PIN_2; // PD2->SDIO_CMD
|
||||
HAL_GPIO_Init(GPIOD,&GPIO_Initure); // <20><>ʼ<EFBFBD><CABC>
|
||||
|
||||
#if (SD_DMA_MODE==1) // ʹ<><CAB9>DMAģʽ
|
||||
HAL_NVIC_SetPriority(SDMMC1_IRQn,2,0); // <20><><EFBFBD><EFBFBD>SDMMC1<43>жϣ<D0B6><CFA3><EFBFBD>ռ<EFBFBD><D5BC><EFBFBD>ȼ<EFBFBD>2<EFBFBD><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȼ<EFBFBD>0
|
||||
HAL_NVIC_EnableIRQ(SDMMC1_IRQn); // ʹ<><CAB9>SDMMC1<43>ж<EFBFBD>
|
||||
|
||||
// <20><><EFBFBD>÷<EFBFBD><C3B7><EFBFBD>DMA
|
||||
SDRxDMAHandler.Instance=DMA2_Stream3;
|
||||
SDRxDMAHandler.Init.Channel=DMA_CHANNEL_4;
|
||||
SDRxDMAHandler.Init.Direction=DMA_PERIPH_TO_MEMORY;
|
||||
SDRxDMAHandler.Init.PeriphInc=DMA_PINC_DISABLE;
|
||||
SDRxDMAHandler.Init.MemInc=DMA_MINC_ENABLE;
|
||||
SDRxDMAHandler.Init.PeriphDataAlignment=DMA_PDATAALIGN_WORD;
|
||||
SDRxDMAHandler.Init.MemDataAlignment=DMA_MDATAALIGN_WORD;
|
||||
SDRxDMAHandler.Init.Mode=DMA_PFCTRL;
|
||||
SDRxDMAHandler.Init.Priority=DMA_PRIORITY_VERY_HIGH;
|
||||
SDRxDMAHandler.Init.FIFOMode=DMA_FIFOMODE_ENABLE;
|
||||
SDRxDMAHandler.Init.FIFOThreshold=DMA_FIFO_THRESHOLD_FULL;
|
||||
SDRxDMAHandler.Init.MemBurst=DMA_MBURST_INC4;
|
||||
SDRxDMAHandler.Init.PeriphBurst=DMA_PBURST_INC4;
|
||||
|
||||
__HAL_LINKDMA(hsd, hdmarx, SDRxDMAHandler); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>DMA<4D><41>SD<53><44><EFBFBD>ķ<EFBFBD><C4B7><EFBFBD>DMA<4D><41><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
HAL_DMA_DeInit(&SDRxDMAHandler);
|
||||
HAL_DMA_Init(&SDRxDMAHandler); // <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>DMA
|
||||
|
||||
// <20><><EFBFBD>ý<EFBFBD><C3BD><EFBFBD>DMA
|
||||
SDTxDMAHandler.Instance=DMA2_Stream6;
|
||||
SDTxDMAHandler.Init.Channel=DMA_CHANNEL_4;
|
||||
SDTxDMAHandler.Init.Direction=DMA_MEMORY_TO_PERIPH;
|
||||
SDTxDMAHandler.Init.PeriphInc=DMA_PINC_DISABLE;
|
||||
SDTxDMAHandler.Init.MemInc=DMA_MINC_ENABLE;
|
||||
SDTxDMAHandler.Init.PeriphDataAlignment=DMA_PDATAALIGN_WORD;
|
||||
SDTxDMAHandler.Init.MemDataAlignment=DMA_MDATAALIGN_WORD;
|
||||
SDTxDMAHandler.Init.Mode=DMA_PFCTRL;
|
||||
SDTxDMAHandler.Init.Priority=DMA_PRIORITY_VERY_HIGH;
|
||||
SDTxDMAHandler.Init.FIFOMode=DMA_FIFOMODE_ENABLE;
|
||||
SDTxDMAHandler.Init.FIFOThreshold=DMA_FIFO_THRESHOLD_FULL;
|
||||
SDTxDMAHandler.Init.MemBurst=DMA_MBURST_INC4;
|
||||
SDTxDMAHandler.Init.PeriphBurst=DMA_PBURST_INC4;
|
||||
|
||||
__HAL_LINKDMA(hsd, hdmatx, SDTxDMAHandler);// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>DMA<4D><41>SD<53><44><EFBFBD>ķ<EFBFBD><C4B7><EFBFBD>DMA<4D><41><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
HAL_DMA_DeInit(&SDTxDMAHandler);
|
||||
HAL_DMA_Init(&SDTxDMAHandler); // <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>DMA
|
||||
|
||||
|
||||
HAL_NVIC_SetPriority(DMA2_Stream3_IRQn, 3, 0); // <20><><EFBFBD><EFBFBD>DMA<4D>ж<EFBFBD><D0B6><EFBFBD><EFBFBD>ȼ<EFBFBD>
|
||||
HAL_NVIC_EnableIRQ(DMA2_Stream3_IRQn);
|
||||
HAL_NVIC_SetPriority(DMA2_Stream6_IRQn, 3, 0); // <20><><EFBFBD><EFBFBD>DMA<4D>ж<EFBFBD><D0B6><EFBFBD><EFBFBD>ȼ<EFBFBD>
|
||||
HAL_NVIC_EnableIRQ(DMA2_Stream6_IRQn);
|
||||
#endif
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------
|
||||
// u8 SD_GetCardInfo(HAL_SD_CardInfoTypedef *cardinfo)
|
||||
//-----------------------------------------------------------------
|
||||
//
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <20>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD>Ϣ
|
||||
// <20><><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>: HAL_SD_CardInfoTypedef *cardinfo<66><6F><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD>洢<EFBFBD><E6B4A2>
|
||||
// <20><> <20><> ֵ: <20><><EFBFBD><EFBFBD>״̬
|
||||
// ע<><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <20><>
|
||||
//
|
||||
//-----------------------------------------------------------------
|
||||
u8 SD_GetCardInfo(HAL_SD_CardInfoTypedef *cardinfo)
|
||||
{
|
||||
u8 sta;
|
||||
sta=HAL_SD_Get_CardInfo(&SDCARD_Handler,cardinfo);
|
||||
return sta;
|
||||
}
|
||||
|
||||
#if (SD_DMA_MODE==1) // DMAģʽ
|
||||
//-----------------------------------------------------------------
|
||||
// u8 SD_ReadBlocks_DMA(uint32_t *buf,uint64_t sector,uint32_t blocksize,uint32_t cnt)
|
||||
//-----------------------------------------------------------------
|
||||
//
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: ͨ<><CDA8>DMA<4D><41>ȡSD<53><44>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>: uint32_t *buf<75><66><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݻ<EFBFBD><DDBB><EFBFBD><EFBFBD><EFBFBD>
|
||||
// uint64_t sector<6F><72><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
|
||||
// uint32_t blocksize<7A><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С(һ<>㶼<EFBFBD><E3B6BC>512<31>ֽ<EFBFBD>)
|
||||
// uint32_t cnt<6E><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20><> <20><> ֵ: <20><><EFBFBD><EFBFBD>״̬;0,<2C><><EFBFBD><EFBFBD>;<3B><><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
|
||||
// ע<><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <20><>
|
||||
//
|
||||
//-----------------------------------------------------------------
|
||||
u8 SD_ReadBlocks_DMA(uint32_t *buf,uint64_t sector,uint32_t blocksize,uint32_t cnt)
|
||||
{
|
||||
u8 err=0;
|
||||
err=HAL_SD_ReadBlocks_DMA(&SDCARD_Handler,buf,sector,blocksize,cnt); // ͨ<><CDA8>DMA<4D><41>ȡSD<53><44>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
if(err==0)// <20><>ȡ<EFBFBD>ɹ<EFBFBD>
|
||||
err=HAL_SD_CheckReadOperation(&SDCARD_Handler,(uint32_t)SD_TIMEOUT);// <20>ȴ<EFBFBD><C8B4><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
|
||||
return err;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------
|
||||
// u8 SD_ReadBlocks_DMA(uint32_t *buf,uint64_t sector,uint32_t blocksize,uint32_t cnt)
|
||||
//-----------------------------------------------------------------
|
||||
//
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: дSD<53><44>
|
||||
// <20><><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>: uint32_t *buf<75><66>д<EFBFBD><D0B4><EFBFBD>ݻ<EFBFBD><DDBB><EFBFBD><EFBFBD><EFBFBD>
|
||||
// uint64_t sector<6F><72><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
|
||||
// uint32_t blocksize<7A><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С(һ<>㶼<EFBFBD><E3B6BC>512<31>ֽ<EFBFBD>)
|
||||
// uint32_t cnt<6E><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20><> <20><> ֵ: <20><><EFBFBD><EFBFBD>״̬;0,<2C><><EFBFBD><EFBFBD>;<3B><><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
|
||||
// ע<><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <20><>
|
||||
//
|
||||
//-----------------------------------------------------------------
|
||||
u8 SD_WriteBlocks_DMA(uint32_t *buf,uint64_t sector,uint32_t blocksize,uint32_t cnt)
|
||||
{
|
||||
u8 err=0;
|
||||
err=HAL_SD_WriteBlocks_DMA(&SDCARD_Handler,buf,sector,blocksize,cnt); // ͨ<><CDA8>DMAдSD<53><44>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
if(err==0)// д<>ɹ<EFBFBD>
|
||||
err=HAL_SD_CheckWriteOperation(&SDCARD_Handler,(uint32_t)SD_TIMEOUT); // <20>ȴ<EFBFBD><C8B4><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>/
|
||||
return err;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------
|
||||
// u8 SD_ReadDisk(u8* buf,u32 sector,u32 cnt)
|
||||
//-----------------------------------------------------------------
|
||||
//
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <20><>SD<53><44>
|
||||
// <20><><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>: u8* buf<75><66><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݻ<EFBFBD><DDBB><EFBFBD><EFBFBD><EFBFBD>
|
||||
// u32 sector<6F><72><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
|
||||
// uu32 cnt<6E><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20><> <20><> ֵ: <20><><EFBFBD><EFBFBD>״̬;0,<2C><><EFBFBD><EFBFBD>;<3B><><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
|
||||
// ע<><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <20><>
|
||||
//
|
||||
//-----------------------------------------------------------------
|
||||
u8 SD_ReadDisk(u8* buf,u32 sector,u32 cnt)
|
||||
{
|
||||
u8 sta=SD_OK;
|
||||
long long lsector=sector;
|
||||
u8 n;
|
||||
if(SDCardInfo.CardType!=STD_CAPACITY_SD_CARD_V1_1)
|
||||
lsector<<=9;
|
||||
if((u32)buf%4!=0)
|
||||
{
|
||||
for(n=0;n<cnt;n++)
|
||||
{
|
||||
sta=SD_ReadBlocks_DMA((uint32_t*)SDIO_DATA_BUFFER,lsector+512*n,512,1);
|
||||
memcpy(buf,SDIO_DATA_BUFFER,512);
|
||||
buf+=512;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
sta=SD_ReadBlocks_DMA((uint32_t*)buf,lsector, 512,cnt);
|
||||
}
|
||||
return sta;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------
|
||||
// u8 SD_WriteDisk(u8 *buf,u32 sector,u32 cnt)
|
||||
//-----------------------------------------------------------------
|
||||
//
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: дSD<53><44>
|
||||
// <20><><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>: u8* buf<75><66>д<EFBFBD><D0B4><EFBFBD>ݻ<EFBFBD><DDBB><EFBFBD><EFBFBD><EFBFBD>
|
||||
// u32 sector<6F><72><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
|
||||
// uu32 cnt<6E><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20><> <20><> ֵ: <20><><EFBFBD><EFBFBD>״̬;0,<2C><><EFBFBD><EFBFBD>;<3B><><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
|
||||
// ע<><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <20><>
|
||||
//
|
||||
//-----------------------------------------------------------------
|
||||
u8 SD_WriteDisk(u8 *buf,u32 sector,u32 cnt)
|
||||
{
|
||||
u8 sta=SD_OK;
|
||||
long long lsector=sector;
|
||||
u8 n;
|
||||
if(SDCardInfo.CardType!=STD_CAPACITY_SD_CARD_V1_1)
|
||||
lsector<<=9;
|
||||
if((u32)buf%4!=0)
|
||||
{
|
||||
for(n=0;n<cnt;n++)
|
||||
{
|
||||
memcpy(SDIO_DATA_BUFFER,buf,512);
|
||||
sta=SD_WriteBlocks_DMA((uint32_t*)SDIO_DATA_BUFFER,lsector+512*n,512,1);// <20><><EFBFBD><EFBFBD>sector<6F><72>д<EFBFBD><D0B4><EFBFBD><EFBFBD>
|
||||
buf+=512;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
sta=SD_WriteBlocks_DMA((uint32_t*)buf,lsector,512,cnt);// <20><><EFBFBD><EFBFBD>sector<6F><72>д<EFBFBD><D0B4><EFBFBD><EFBFBD>
|
||||
}
|
||||
return sta;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------
|
||||
// void SDMMC1_IRQHandler(void)
|
||||
//-----------------------------------------------------------------
|
||||
//
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: SDMMC1<43>жϷ<D0B6><CFB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>: <20><>
|
||||
// <20><> <20><> ֵ: <20><>
|
||||
// ע<><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <20><>
|
||||
//
|
||||
//-----------------------------------------------------------------
|
||||
void SDMMC1_IRQHandler(void)
|
||||
{
|
||||
HAL_SD_IRQHandler(&SDCARD_Handler);
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------
|
||||
// void DMA2_Stream6_IRQHandler(void)
|
||||
//-----------------------------------------------------------------
|
||||
//
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: DMA2<41><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD>6<EFBFBD>жϷ<D0B6><CFB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>: <20><>
|
||||
// <20><> <20><> ֵ: <20><>
|
||||
// ע<><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <20><>
|
||||
//
|
||||
//-----------------------------------------------------------------
|
||||
void DMA2_Stream6_IRQHandler(void)
|
||||
{
|
||||
HAL_DMA_IRQHandler(SDCARD_Handler.hdmatx);
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------
|
||||
// void DMA2_Stream3_IRQHandler(void)
|
||||
//-----------------------------------------------------------------
|
||||
//
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: DMA2<41><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD>3<EFBFBD>жϷ<D0B6><CFB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>: <20><>
|
||||
// <20><> <20><> ֵ: <20><>
|
||||
// ע<><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <20><>
|
||||
//
|
||||
//-----------------------------------------------------------------
|
||||
void DMA2_Stream3_IRQHandler(void)
|
||||
{
|
||||
HAL_DMA_IRQHandler(SDCARD_Handler.hdmarx);
|
||||
}
|
||||
#else // <20><>ѵģʽ
|
||||
//-----------------------------------------------------------------
|
||||
// u8 SD_ReadDisk(u8* buf,u32 sector,u32 cnt)
|
||||
//-----------------------------------------------------------------
|
||||
//
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <20><>SD<53><44>
|
||||
// <20><><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>: u8* buf<75><66><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݻ<EFBFBD><DDBB><EFBFBD><EFBFBD><EFBFBD>
|
||||
// u32 sector<6F><72><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
|
||||
// u32 cnt<6E><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20><> <20><> ֵ: 0,<2C><><EFBFBD><EFBFBD>;<3B><><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
|
||||
// ע<><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <20><>
|
||||
//
|
||||
//-----------------------------------------------------------------
|
||||
u8 SD_ReadDisk(u8* buf,u32 sector,u32 cnt)
|
||||
{
|
||||
u8 sta=SD_OK;
|
||||
long long lsector=sector;
|
||||
u8 n;
|
||||
lsector<<=9;
|
||||
__disable_irq();// <20>ر<EFBFBD><D8B1><EFBFBD><EFBFBD>ж<EFBFBD>(POLLINGģʽ,<2C>Ͻ<EFBFBD><CFBD>жϴ<D0B6><CFB4><EFBFBD>SDIO<49><4F>д<EFBFBD><D0B4><EFBFBD><EFBFBD>!!!)
|
||||
if((u32)buf%4!=0)
|
||||
{
|
||||
for(n=0;n<cnt;n++)
|
||||
{
|
||||
sta=HAL_SD_ReadBlocks(&SDCARD_Handler,(uint32_t*)SDIO_DATA_BUFFER,lsector+512*n,512,1);// <20><><EFBFBD><EFBFBD>sector<6F>Ķ<EFBFBD><C4B6><EFBFBD><EFBFBD><EFBFBD>
|
||||
memcpy(buf,SDIO_DATA_BUFFER,512);
|
||||
buf+=512;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
sta=HAL_SD_ReadBlocks(&SDCARD_Handler,(uint32_t*)buf,lsector,512,cnt);// <20><><EFBFBD><EFBFBD>sector<6F>Ķ<EFBFBD><C4B6><EFBFBD><EFBFBD><EFBFBD>
|
||||
}
|
||||
__enable_irq();// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
|
||||
return sta;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------
|
||||
// u8 SD_WriteDisk(u8 *buf,u32 sector,u32 cnt)
|
||||
//-----------------------------------------------------------------
|
||||
//
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: дSD<53><44>
|
||||
// <20><><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>: u8* buf<75><66>д<EFBFBD><D0B4><EFBFBD>ݻ<EFBFBD><DDBB><EFBFBD><EFBFBD><EFBFBD>
|
||||
// u32 sector<6F><72><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
|
||||
// u32 cnt<6E><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20><> <20><> ֵ: 0,<2C><><EFBFBD><EFBFBD>;<3B><><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
|
||||
// ע<><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <20><>
|
||||
//
|
||||
//-----------------------------------------------------------------
|
||||
u8 SD_WriteDisk(u8 *buf,u32 sector,u32 cnt)
|
||||
{
|
||||
u8 sta=SD_OK;
|
||||
long long lsector=sector;
|
||||
u8 n;
|
||||
lsector<<=9;
|
||||
__disable_irq();// <20>ر<EFBFBD><D8B1><EFBFBD><EFBFBD>ж<EFBFBD>(POLLINGģʽ,<2C>Ͻ<EFBFBD><CFBD>жϴ<D0B6><CFB4><EFBFBD>SDIO<49><4F>д<EFBFBD><D0B4><EFBFBD><EFBFBD>!!!)
|
||||
if((u32)buf%4!=0)
|
||||
{
|
||||
for(n=0;n<cnt;n++)
|
||||
{
|
||||
memcpy(SDIO_DATA_BUFFER,buf,512);
|
||||
sta=HAL_SD_WriteBlocks(&SDCARD_Handler,(uint32_t*)SDIO_DATA_BUFFER,lsector+512*n,512,1);// <20><><EFBFBD><EFBFBD>sector<6F><72>д<EFBFBD><D0B4><EFBFBD><EFBFBD>
|
||||
buf+=512;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
sta=HAL_SD_WriteBlocks(&SDCARD_Handler,(uint32_t*)buf,lsector,512,cnt);// <20><><EFBFBD><EFBFBD>sector<6F><72>д<EFBFBD><D0B4><EFBFBD><EFBFBD>
|
||||
}
|
||||
__enable_irq();// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
|
||||
return sta;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
//-----------------------------------------------------------------
|
||||
// End Of File
|
||||
//-----------------------------------------------------------------
|
||||
Reference in New Issue
Block a user