STM32F769IDiscovery  1.00
uDANTE Audio Networking with STM32F7 DISCO board
sdram_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 SDRAMDISK_write (BYTE, const BYTE*, DWORD, UINT);
47 #endif /* _USE_WRITE == 1 */
48 #if _USE_IOCTL == 1
49  DRESULT SDRAMDISK_ioctl (BYTE, BYTE, void*);
50 #endif /* _USE_IOCTL == 1 */
51 
53 {
57 #if _USE_WRITE
58  SDRAMDISK_write,
59 #endif /* _USE_WRITE == 1 */
60 #if _USE_IOCTL == 1
61  SDRAMDISK_ioctl,
62 #endif /* _USE_IOCTL == 1 */
63 };
64 
65 /* Private functions ---------------------------------------------------------*/
66 
73 {
74  Stat = STA_NOINIT;
75 
76  /* Configure the SDRAM device */
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 SDRAMDISK_read(BYTE lun, BYTE *buff, DWORD sector, UINT count)
106 {
107  uint32_t *pSrcBuffer = (uint32_t *)buff;
108  uint32_t BufferSize = (BLOCK_SIZE * count)/4;
109  uint32_t *pSdramAddress = (uint32_t *) (SDRAM_DEVICE_ADDR + (sector * BLOCK_SIZE));
110 
111  for(; BufferSize != 0; BufferSize--)
112  {
113  *pSrcBuffer++ = *(__IO uint32_t *)pSdramAddress++;
114  }
115 
116  return RES_OK;
117 }
118 
127 #if _USE_WRITE == 1
128 DRESULT SDRAMDISK_write(BYTE lun, const BYTE *buff, DWORD sector, UINT count)
129 {
130  uint32_t *pDstBuffer = (uint32_t *)buff;
131  uint32_t BufferSize = (BLOCK_SIZE * count)/4 + count;
132  uint32_t *pSramAddress = (uint32_t *) (SDRAM_DEVICE_ADDR + (sector * BLOCK_SIZE));
133 
134  for(; BufferSize != 0; BufferSize--)
135  {
136  *(__IO uint32_t *)pSramAddress++ = *pDstBuffer++;
137  }
138 
139  return RES_OK;
140 }
141 #endif /* _USE_WRITE == 1 */
142 
150 #if _USE_IOCTL == 1
151 DRESULT SDRAMDISK_ioctl(BYTE lun, BYTE cmd, void *buff)
152 {
153  DRESULT res = RES_ERROR;
154 
155  if (Stat & STA_NOINIT) return RES_NOTRDY;
156 
157  switch (cmd)
158  {
159  /* Make sure that no pending write process */
160  case CTRL_SYNC :
161  res = RES_OK;
162  break;
163 
164  /* Get number of sectors on the disk (DWORD) */
165  case GET_SECTOR_COUNT :
166  *(DWORD*)buff = SDRAM_DEVICE_SIZE / BLOCK_SIZE;
167  res = RES_OK;
168  break;
169 
170  /* Get R/W sector size (WORD) */
171  case GET_SECTOR_SIZE :
172  *(WORD*)buff = BLOCK_SIZE;
173  res = RES_OK;
174  break;
175 
176  /* Get erase block size in unit of sector (DWORD) */
177  case GET_BLOCK_SIZE :
178  *(DWORD*)buff = BLOCK_SIZE;
179  break;
180 
181  default:
182  res = RES_PARERR;
183  }
184 
185  return res;
186 }
187 #endif /* _USE_IOCTL == 1 */
188 
189 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
190 
#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 SDRAMDISK_Driver
Definition: sdram_diskio.c:52
Disk IO Driver structure definition.
Definition: ff_gen_drv.h:45
DSTATUS SDRAMDISK_status(BYTE)
Gets Disk Status.
Definition: sdram_diskio.c:88
#define SDRAM_DEVICE_ADDR
#define GET_SECTOR_COUNT
Definition: diskio.h:53
DRESULT SDRAMDISK_read(BYTE, BYTE *, DWORD, UINT)
Reads Sector(s)
Definition: sdram_diskio.c:105
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
DSTATUS SDRAMDISK_initialize(BYTE)
Initializes a Drive.
Definition: sdram_diskio.c:72
Definition: diskio.h:23
#define SDRAM_DEVICE_SIZE
unsigned int UINT
Definition: integer.h:25
uint8_t BSP_SDRAM_Init(void)
Initializes the SDRAM device.
#define GET_SECTOR_SIZE
Definition: diskio.h:54
Header for ff_gen_drv.c module.
#define CTRL_SYNC
Definition: diskio.h:52
#define BLOCK_SIZE
Definition: sdram_diskio.c:35