STM32F769IDiscovery  1.00
uDANTE Audio Networking with STM32F7 DISCO board
sd_diskio.c
Go to the documentation of this file.
1 
28 /* Includes ------------------------------------------------------------------*/
29 #include <string.h>
30 #include "ff_gen_drv.h"
31 
32 /* Private typedef -----------------------------------------------------------*/
33 /* Private define ------------------------------------------------------------*/
34 /* Block Size in Bytes */
35 #define BLOCK_SIZE 512
36 
37 /* Private variables ---------------------------------------------------------*/
38 /* Disk status */
39 static volatile DSTATUS Stat = STA_NOINIT;
40 
41 /* Private function prototypes -----------------------------------------------*/
45 #if _USE_WRITE == 1
46  DRESULT SD_write (BYTE, const BYTE*, DWORD, UINT);
47 #endif /* _USE_WRITE == 1 */
48 #if _USE_IOCTL == 1
49  DRESULT SD_ioctl (BYTE, BYTE, void*);
50 #endif /* _USE_IOCTL == 1 */
51 
53 {
55  SD_status,
56  SD_read,
57 #if _USE_WRITE == 1
58  SD_write,
59 #endif /* _USE_WRITE == 1 */
60 
61 #if _USE_IOCTL == 1
62  SD_ioctl,
63 #endif /* _USE_IOCTL == 1 */
64 };
65 
66 /* Private functions ---------------------------------------------------------*/
67 
74 {
75  Stat = STA_NOINIT;
76 
77  /* Configure the uSD device */
78  if(BSP_SD_Init() == MSD_OK)
79  {
80  Stat &= ~STA_NOINIT;
81  }
82 
83  return Stat;
84 }
85 
92 {
93  Stat = STA_NOINIT;
94 
95  if(BSP_SD_GetStatus() == MSD_OK)
96  {
97  Stat &= ~STA_NOINIT;
98  }
99 
100  return Stat;
101 }
102 
111 DRESULT SD_read(BYTE lun, BYTE *buff, DWORD sector, UINT count)
112 {
113  DRESULT res = RES_OK;
114 
115  if(BSP_SD_ReadBlocks((uint32_t*)buff,
116  (uint64_t) (sector * BLOCK_SIZE),
117  BLOCK_SIZE,
118  count) != MSD_OK)
119  {
120  res = RES_ERROR;
121  }
122 
123  return res;
124 }
125 
134 #if _USE_WRITE == 1
135 DRESULT SD_write(BYTE lun, const BYTE *buff, DWORD sector, UINT count)
136 {
137  DRESULT res = RES_OK;
138 
139  if(BSP_SD_WriteBlocks((uint32_t*)buff,
140  (uint64_t)(sector * BLOCK_SIZE),
141  BLOCK_SIZE, count) != MSD_OK)
142  {
143  res = RES_ERROR;
144  }
145 
146  return res;
147 }
148 #endif /* _USE_WRITE == 1 */
149 
157 #if _USE_IOCTL == 1
158 DRESULT SD_ioctl(BYTE lun, BYTE cmd, void *buff)
159 {
160  DRESULT res = RES_ERROR;
161  SD_CardInfo CardInfo;
162 
163  if (Stat & STA_NOINIT) return RES_NOTRDY;
164 
165  switch (cmd)
166  {
167  /* Make sure that no pending write process */
168  case CTRL_SYNC :
169  res = RES_OK;
170  break;
171 
172  /* Get number of sectors on the disk (DWORD) */
173  case GET_SECTOR_COUNT :
174  BSP_SD_GetCardInfo(&CardInfo);
175  *(DWORD*)buff = CardInfo.CardCapacity / BLOCK_SIZE;
176  res = RES_OK;
177  break;
178 
179  /* Get R/W sector size (WORD) */
180  case GET_SECTOR_SIZE :
181  *(WORD*)buff = BLOCK_SIZE;
182  res = RES_OK;
183  break;
184 
185  /* Get erase block size in unit of sector (DWORD) */
186  case GET_BLOCK_SIZE :
187  *(DWORD*)buff = BLOCK_SIZE;
188  break;
189 
190  default:
191  res = RES_PARERR;
192  }
193 
194  return res;
195 }
196 #endif /* _USE_IOCTL == 1 */
197 
198 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
199 
void BSP_SD_GetCardInfo(HAL_SD_CardInfoTypedef *CardInfo)
Get SD information about specific SD card.
#define GET_BLOCK_SIZE
Definition: diskio.h:55
unsigned short WORD
Definition: integer.h:20
#define STA_NOINIT
Definition: diskio.h:44
#define MSD_OK
SD status structure definition.
Disk IO Driver structure definition.
Definition: ff_gen_drv.h:45
DRESULT SD_read(BYTE, BYTE *, DWORD, UINT)
Reads Sector(s)
Definition: sd_diskio.c:111
#define BLOCK_SIZE
Definition: sd_diskio.c:35
HAL_SD_TransferStateTypedef BSP_SD_GetStatus(void)
Gets the current SD card data status.
#define GET_SECTOR_COUNT
Definition: diskio.h:53
const Diskio_drvTypeDef SD_Driver
Definition: sd_diskio.c:52
uint8_t BSP_SD_ReadBlocks(uint32_t *pData, uint64_t ReadAddr, uint32_t BlockSize, uint32_t NumOfBlocks)
Reads block(s) from a specified address in an SD card, in polling mode.
unsigned long DWORD
Definition: integer.h:29
BYTE DSTATUS
Definition: diskio.h:19
DRESULT
Definition: diskio.h:22
unsigned char BYTE
Definition: integer.h:16
Definition: diskio.h:23
#define SD_CardInfo
SD Card information structure.
DSTATUS SD_initialize(BYTE)
Initializes a Drive.
Definition: sd_diskio.c:73
unsigned int UINT
Definition: integer.h:25
uint8_t BSP_SD_WriteBlocks(uint32_t *pData, uint64_t WriteAddr, uint32_t BlockSize, uint32_t NumOfBlocks)
Writes block(s) to a specified address in an SD card, in polling mode.
#define GET_SECTOR_SIZE
Definition: diskio.h:54
Header for ff_gen_drv.c module.
#define CTRL_SYNC
Definition: diskio.h:52
uint8_t BSP_SD_Init(void)
Initializes the SD card device.
DSTATUS SD_status(BYTE)
Gets Disk Status.
Definition: sd_diskio.c:91