STM32F769IDiscovery  1.00
uDANTE Audio Networking with STM32F7 DISCO board
sram_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 SRAMDISK_write (BYTE, const BYTE*, DWORD, UINT);
47 #endif /* _USE_WRITE == 1 */
48 #if _USE_IOCTL == 1
49  DRESULT SRAMDISK_ioctl (BYTE, BYTE, void*);
50 #endif /* _USE_IOCTL == 1 */
51 
53 {
57 #if _USE_WRITE == 1
58  SRAMDISK_write,
59 #endif /* _USE_WRITE == 1 */
60 #if _USE_IOCTL == 1
61  SRAMDISK_ioctl,
62 #endif /* _USE_IOCTL == 1 */
63 };
64 
65 /* Private functions ---------------------------------------------------------*/
66 
73 {
74  Stat = STA_NOINIT;
75 
76  /* Configure the SRAM device */
77  BSP_SRAM_Init();
78 
79  Stat &= ~STA_NOINIT;
80  return Stat;
81 }
82 
89 {
90  Stat = STA_NOINIT;
91 
92  Stat &= ~STA_NOINIT;
93 
94  return Stat;
95 }
96 
105 DRESULT SRAMDISK_read(BYTE lun, BYTE *buff, DWORD sector, UINT count)
106 {
107  uint32_t BufferSize = (BLOCK_SIZE * count);
108  uint8_t *pSramAddress = (uint8_t *) (SRAM_DEVICE_ADDR + (sector * BLOCK_SIZE));
109 
110  for(; BufferSize != 0; BufferSize--)
111  {
112  *buff++ = *(__IO uint8_t *)pSramAddress++;
113  }
114 
115  return RES_OK;
116 }
117 
126 #if _USE_WRITE == 1
127 DRESULT SRAMDISK_write(BYTE lun, const BYTE *buff, DWORD sector, UINT count)
128 {
129  uint32_t BufferSize = (BLOCK_SIZE * count) + count;
130  uint8_t *pSramAddress = (uint8_t *) (SRAM_DEVICE_ADDR + (sector * BLOCK_SIZE));
131 
132  for(; BufferSize != 0; BufferSize--)
133  {
134  *(__IO uint8_t *)pSramAddress++ = *buff++;
135  }
136 
137  return RES_OK;
138 }
139 #endif /* _USE_WRITE == 1 */
140 
148 #if _USE_IOCTL == 1
149 DRESULT SRAMDISK_ioctl(BYTE lun, BYTE cmd, void *buff)
150 {
151  DRESULT res = RES_ERROR;
152 
153  if (Stat & STA_NOINIT) return RES_NOTRDY;
154 
155  switch (cmd)
156  {
157  /* Make sure that no pending write process */
158  case CTRL_SYNC :
159  res = RES_OK;
160  break;
161 
162  /* Get number of sectors on the disk (DWORD) */
163  case GET_SECTOR_COUNT :
164  *(DWORD*)buff = SRAM_DEVICE_SIZE / BLOCK_SIZE;
165  res = RES_OK;
166  break;
167 
168  /* Get R/W sector size (WORD) */
169  case GET_SECTOR_SIZE :
170  *(WORD*)buff = BLOCK_SIZE;
171  res = RES_OK;
172  break;
173 
174  /* Get erase block size in unit of sector (DWORD) */
175  case GET_BLOCK_SIZE :
176  *(DWORD*)buff = BLOCK_SIZE;
177  break;
178 
179  default:
180  res = RES_PARERR;
181  }
182 
183  return res;
184 }
185 #endif /* _USE_IOCTL == 1 */
186 
187 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
188 
#define GET_BLOCK_SIZE
Definition: diskio.h:55
unsigned short WORD
Definition: integer.h:20
#define STA_NOINIT
Definition: diskio.h:44
const Diskio_drvTypeDef SRAMDISK_Driver
Definition: sram_diskio.c:52
Disk IO Driver structure definition.
Definition: ff_gen_drv.h:45
DSTATUS SRAMDISK_initialize(BYTE)
Initializes a Drive.
Definition: sram_diskio.c:72
#define GET_SECTOR_COUNT
Definition: diskio.h:53
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
#define __IO
Definition: core_cm0.h:213
Definition: diskio.h:23
unsigned int UINT
Definition: integer.h:25
#define GET_SECTOR_SIZE
Definition: diskio.h:54
DRESULT SRAMDISK_read(BYTE, BYTE *, DWORD, UINT)
Reads Sector(s)
Definition: sram_diskio.c:105
DSTATUS SRAMDISK_status(BYTE)
Gets Disk Status.
Definition: sram_diskio.c:88
Header for ff_gen_drv.c module.
#define CTRL_SYNC
Definition: diskio.h:52
#define BLOCK_SIZE
Definition: sram_diskio.c:35