STSW-STLKT01: Drivers/BSP/SensorTile/SensorTile_sd.h Source File

STSW-STLKT01

STSW-STLKT01
SensorTile_sd.h
Go to the documentation of this file.
1 
38 /* Define to prevent recursive inclusion -------------------------------------*/
39 #ifndef __SENSORTILE_SD_H
40 #define __SENSORTILE_SD_H
41 
42 #ifdef __cplusplus
43  extern "C" {
44 #endif
45 
46 /* Includes ------------------------------------------------------------------*/
47 #include "SensorTile.h"
48 
69 #define MSD_OK 0x00
70 #define MSD_ERROR 0x01
71 
72 typedef enum
73 {
78  SD_IN_IDLE_STATE = (0x01),
79  SD_ERASE_RESET = (0x02),
80  SD_ILLEGAL_COMMAND = (0x04),
81  SD_COM_CRC_ERROR = (0x08),
82  SD_ERASE_SEQUENCE_ERROR = (0x10),
83  SD_ADDRESS_ERROR = (0x20),
84  SD_PARAMETER_ERROR = (0x40),
85  SD_RESPONSE_FAILURE = (0xFF),
86 
90  SD_DATA_OK = (0x05),
91  SD_DATA_CRC_ERROR = (0x0B),
92  SD_DATA_WRITE_ERROR = (0x0D),
93  SD_DATA_OTHER_ERROR = (0xFF)
94 }SD_Info;
95 
99 typedef struct
100 {
101  __IO uint8_t CSDStruct; /* CSD structure */
102  __IO uint8_t SysSpecVersion; /* System specification version */
103  __IO uint8_t Reserved1; /* Reserved */
104  __IO uint8_t TAAC; /* Data read access-time 1 */
105  __IO uint8_t NSAC; /* Data read access-time 2 in CLK cycles */
106  __IO uint8_t MaxBusClkFrec; /* Max. bus clock frequency */
107  __IO uint16_t CardComdClasses; /* Card command classes */
108  __IO uint8_t RdBlockLen; /* Max. read data block length */
109  __IO uint8_t PartBlockRead; /* Partial blocks for read allowed */
110  __IO uint8_t WrBlockMisalign; /* Write block misalignment */
111  __IO uint8_t RdBlockMisalign; /* Read block misalignment */
112  __IO uint8_t DSRImpl; /* DSR implemented */
113  __IO uint8_t Reserved2; /* Reserved */
114  __IO uint32_t DeviceSize; /* Device Size */
115  __IO uint8_t MaxRdCurrentVDDMin; /* Max. read current @ VDD min */
116  __IO uint8_t MaxRdCurrentVDDMax; /* Max. read current @ VDD max */
117  __IO uint8_t MaxWrCurrentVDDMin; /* Max. write current @ VDD min */
118  __IO uint8_t MaxWrCurrentVDDMax; /* Max. write current @ VDD max */
119  __IO uint8_t DeviceSizeMul; /* Device size multiplier */
120  __IO uint8_t EraseGrSize; /* Erase group size */
121  __IO uint8_t EraseGrMul; /* Erase group size multiplier */
122  __IO uint8_t WrProtectGrSize; /* Write protect group size */
123  __IO uint8_t WrProtectGrEnable; /* Write protect group enable */
124  __IO uint8_t ManDeflECC; /* Manufacturer default ECC */
125  __IO uint8_t WrSpeedFact; /* Write speed factor */
126  __IO uint8_t MaxWrBlockLen; /* Max. write data block length */
127  __IO uint8_t WriteBlockPaPartial; /* Partial blocks for write allowed */
128  __IO uint8_t Reserved3; /* Reserded */
129  __IO uint8_t ContentProtectAppli; /* Content protection application */
130  __IO uint8_t FileFormatGrouop; /* File format group */
131  __IO uint8_t CopyFlag; /* Copy flag (OTP) */
132  __IO uint8_t PermWrProtect; /* Permanent write protection */
133  __IO uint8_t TempWrProtect; /* Temporary write protection */
134  __IO uint8_t FileFormat; /* File Format */
135  __IO uint8_t ECC; /* ECC code */
136  __IO uint8_t CSD_CRC; /* CSD CRC */
137  __IO uint8_t Reserved4; /* always 1*/
138 } SD_CSD;
139 
143 typedef struct
144 {
145  __IO uint8_t ManufacturerID; /* ManufacturerID */
146  __IO uint16_t OEM_AppliID; /* OEM/Application ID */
147  __IO uint32_t ProdName1; /* Product Name part1 */
148  __IO uint8_t ProdName2; /* Product Name part2*/
149  __IO uint8_t ProdRev; /* Product Revision */
150  __IO uint32_t ProdSN; /* Product Serial Number */
151  __IO uint8_t Reserved1; /* Reserved1 */
152  __IO uint16_t ManufactDate; /* Manufacturing Date */
153  __IO uint8_t CID_CRC; /* CID CRC */
154  __IO uint8_t Reserved2; /* always 1 */
155 } SD_CID;
156 
160 typedef struct
161 {
162  SD_CSD Csd;
163  SD_CID Cid;
164  uint32_t CardCapacity; /* Card Capacity */
165  uint32_t CardBlockSize; /* Card Block Size */
166  uint16_t RCA;
167  uint8_t CardType;
168 } SD_CardInfo;
169 
182 #define STD_CAPACITY_SD_CARD_V1_1 ((uint32_t)0x00000000)
183 #define STD_CAPACITY_SD_CARD_V2_0 ((uint32_t)0x00000001)
184 #define HIGH_CAPACITY_SD_CARD ((uint32_t)0x00000002)
185 
191 #define SD_START_DATA_SINGLE_BLOCK_READ 0xFE /* Data token start byte, Start Single Block Read */
192 #define SD_START_DATA_MULTIPLE_BLOCK_READ 0xFE /* Data token start byte, Start Multiple Block Read */
193 #define SD_START_DATA_SINGLE_BLOCK_WRITE 0xFE /* Data token start byte, Start Single Block Write */
194 #define SD_START_DATA_MULTIPLE_BLOCK_WRITE 0xFD /* Data token start byte, Start Multiple Block Write */
195 #define SD_STOP_DATA_MULTIPLE_BLOCK_WRITE 0xFD /* Data toke stop byte, Stop Multiple Block Write */
196 
200 #define SD_PRESENT ((uint8_t)0x01)
201 #define SD_NOT_PRESENT ((uint8_t)0x00)
202 
206 #define SD_CMD_GO_IDLE_STATE ((uint8_t)0)
207 #define SD_CMD_SEND_OP_COND ((uint8_t)1)
208 #define SD_CMD_ALL_SEND_CID ((uint8_t)2)
209 #define SD_CMD_SET_REL_ADDR ((uint8_t)3)
210 #define SD_CMD_SET_DSR ((uint8_t)4)
211 #define SD_CMD_SDMMC_SEN_OP_COND ((uint8_t)5)
213 #define SD_CMD_HS_SWITCH ((uint8_t)6)
214 #define SD_CMD_SEL_DESEL_CARD ((uint8_t)7)
215 #define SD_CMD_HS_SEND_EXT_CSD ((uint8_t)8)
217 #define SD_CMD_SEND_CSD ((uint8_t)9)
218 #define SD_CMD_SEND_CID ((uint8_t)10)
219 #define SD_CMD_READ_DAT_UNTIL_STOP ((uint8_t)11)
220 #define SD_CMD_STOP_TRANSMISSION ((uint8_t)12)
221 #define SD_CMD_SEND_STATUS ((uint8_t)13)
222 #define SD_CMD_HS_BUSTEST_READ ((uint8_t)14)
223 #define SD_CMD_GO_INACTIVE_STATE ((uint8_t)15)
224 #define SD_CMD_SET_BLOCKLEN ((uint8_t)16)
227 #define SD_CMD_READ_SINGLE_BLOCK ((uint8_t)17)
229 #define SD_CMD_READ_MULT_BLOCK ((uint8_t)18)
231 #define SD_CMD_HS_BUSTEST_WRITE ((uint8_t)19)
232 #define SD_CMD_WRITE_DAT_UNTIL_STOP ((uint8_t)20)
233 #define SD_CMD_SET_BLOCK_COUNT ((uint8_t)23)
234 #define SD_CMD_WRITE_SINGLE_BLOCK ((uint8_t)24)
236 #define SD_CMD_WRITE_MULT_BLOCK ((uint8_t)25)
237 #define SD_CMD_PROG_CID ((uint8_t)26)
238 #define SD_CMD_PROG_CSD ((uint8_t)27)
239 #define SD_CMD_SET_WRITE_PROT ((uint8_t)28)
240 #define SD_CMD_CLR_WRITE_PROT ((uint8_t)29)
241 #define SD_CMD_SEND_WRITE_PROT ((uint8_t)30)
242 #define SD_CMD_SD_ERASE_GRP_START ((uint8_t)32)
243 #define SD_CMD_SD_ERASE_GRP_END ((uint8_t)33)
244 #define SD_CMD_ERASE_GRP_START ((uint8_t)35)
246 #define SD_CMD_ERASE_GRP_END ((uint8_t)36)
248 #define SD_CMD_ERASE ((uint8_t)38)
249 #define SD_CMD_FAST_IO ((uint8_t)39)
250 #define SD_CMD_GO_IRQ_STATE ((uint8_t)40)
251 #define SD_CMD_LOCK_UNLOCK ((uint8_t)42)
253 #define SD_CMD_APP_CMD ((uint8_t)55)
255 #define SD_CMD_GEN_CMD ((uint8_t)56)
257 #define SD_CMD_SDMMC_READ_OCR ((uint8_t)58)
258 #define SD_CMD_NO_CMD ((uint8_t)64)
260 
265 #define SD_CMD_APP_SD_SET_BUSWIDTH ((uint8_t)6)
267 #define SD_CMD_SD_APP_STATUS ((uint8_t)13)
268 #define SD_CMD_SD_APP_SEND_NUM_WRITE_BLOCKS ((uint8_t)22)
270 #define SD_CMD_SD_APP_OP_COND ((uint8_t)41)
272 #define SD_CMD_SD_APP_SET_CLR_CARD_DETECT ((uint8_t)42)
273 #define SD_CMD_SD_APP_SEND_SCR ((uint8_t)51)
274 #define SD_CMD_SDMMC_RW_DIRECT ((uint8_t)52)
275 #define SD_CMD_SDMMC_RW_EXTENDED ((uint8_t)53)
292 uint8_t BSP_SD_Init(void);
293 uint8_t BSP_SD_IsDetected(void);
294 uint8_t BSP_SD_ReadBlocks(uint32_t* p32Data, uint64_t Sector, uint16_t BlockSize, uint32_t NumberOfBlocks);
295 uint8_t BSP_SD_WriteBlocks(uint32_t* p32Data, uint64_t Sector, uint16_t BlockSize, uint32_t NumberOfBlocks);
296 uint8_t BSP_SD_Erase(uint32_t StartAddr, uint32_t EndAddr);
297 uint8_t BSP_SD_GetStatus(void);
298 uint8_t BSP_SD_GetCardInfo(SD_CardInfo *pCardInfo);
299 
300 /* Link functions for SD Card peripheral*/
301 void SD_IO_Init(void); /*high speed*/
302 void SD_IO_Init_LS(void);/*low speed*/
303 
304 void SD_IO_WriteByte(uint8_t Data);
305 uint8_t SD_IO_ReadByte(void);
306 HAL_StatusTypeDef SD_IO_WriteCmd(uint8_t Cmd, uint32_t Arg, uint8_t Crc, uint8_t Response);
307 uint8_t SD_IO_WriteCmd_wResp(uint8_t Cmd, uint32_t Arg, uint8_t Crc);
308 HAL_StatusTypeDef SD_IO_WaitResponse(uint8_t Response);
309 void SD_IO_WriteDummy(void);
310 void SD_IO_WriteDMA(uint8_t *pData, uint16_t Size);
311 
312 #ifdef __cplusplus
313 }
314 #endif
315 
316 #endif /* __SENSORTILE_SD_H */
317 
334 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
uint8_t BSP_SD_WriteBlocks(uint32_t *p32Data, uint64_t Sector, uint16_t BlockSize, uint32_t NumberOfBlocks)
Writes block(s) to a specified address in an SD card, in polling mode.
void SD_IO_WriteDMA(uint8_t *pData, uint16_t Size)
Writes a block by DMA on the SD.
Definition: SensorTile.c:1237
uint8_t SD_IO_ReadByte(void)
Reads a byte from the SD.
Definition: SensorTile.c:1253
SD reponses and error flags.
Definition: SensorTile_sd.h:77
uint8_t BSP_SD_Erase(uint32_t StartAddr, uint32_t EndAddr)
Erases the specified memory area of the given SD card.
uint8_t CardType
uint8_t BSP_SD_GetCardInfo(SD_CardInfo *pCardInfo)
Returns information about specific card.
HAL_StatusTypeDef SD_IO_WriteCmd(uint8_t Cmd, uint32_t Arg, uint8_t Crc, uint8_t Response)
Sends 5 bytes command to the SD card and get response.
Definition: SensorTile.c:1312
uint16_t RCA
SD Card information.
Data response error.
Definition: SensorTile_sd.h:90
void SD_IO_Init_LS(void)
Initializes the SD Card and put it into StandBy State (Ready for data transfer). Low baundrate...
Definition: SensorTile.c:1167
void SD_IO_WriteDummy(void)
Sends dummy byte with CS High.
Definition: SensorTile.c:1374
This file contains definitions for SensorTile.c file.
uint8_t BSP_SD_ReadBlocks(uint32_t *p32Data, uint64_t Sector, uint16_t BlockSize, uint32_t NumberOfBlocks)
Reads block(s) from a specified address in an SD card, in polling mode.
Card Specific Data: CSD Register.
Definition: SensorTile_sd.h:99
HAL_StatusTypeDef SD_IO_WaitResponse(uint8_t Response)
Waits response from the SD card.
Definition: SensorTile.c:1347
uint8_t BSP_SD_GetStatus(void)
Returns the SD status.
Card Identification Data: CID Register.
SD_Info
Definition: SensorTile_sd.h:72
void SD_IO_Init(void)
Initializes the SD Card and put it into StandBy State (Ready for data transfer).
Definition: SensorTile.c:1140
void SD_IO_WriteByte(uint8_t Data)
Writes a byte on the SD.
Definition: SensorTile.c:1224
uint8_t SD_IO_WriteCmd_wResp(uint8_t Cmd, uint32_t Arg, uint8_t Crc)
Sends 5 bytes command to the SD card and get response.
Definition: SensorTile.c:1273
Generated by   doxygen 1.8.13