MF32BSP_XerolySkinner 2.0.0
C++版本的驱动库
载入中...
搜索中...
未找到
bsp_SD.h
浏览该文件的文档.
1/*----------------------------------------------------------------------------------------------------
2 #
3 # Copyright (c) 2022 Yuankang Liang(XerolySkinner)
4 #
5 # 本软件按原样提供,无任何明示或暗示
6 # 在任何情况下,作者都不承担任何损害赔偿责任
7 #
8 # 使用的许可声明:
9 # 1. 不得歪曲本软件的来源,你不能声称你编写了原始软件.
10 # 2. 免费授予以任何目的,前提是版权声明出现在所有副本中.
11 # 并且版权声明和许可声明同时出现.
12 # 3. 你有使用,复制,修改,分发,和销售本软件的许可.
13 # 4. 如果你在产品中使用,产品文档中的声明是赞赏的但不是必须的.
14 # 5. 本通知不得从任何来源删除或更改.
15 #
16 # Yuankang Liang(XerolySkinner)
17 # E-mail:zabbcccbbaz@163.com
18 # QQ:2715099320
19 # Mobile Phone:13005636215
20 #
21 # All rights reserved.
22 */
23
34#pragma once
35#ifdef __cplusplus
37//----------------------------------------------------------------------------------------------------
38// 头文件
39//
40#include "spi.h"
41#include "varint.h"
43//----------------------------------------------------------------------------------------------------
44// 数据
45//
46//----------------------------------------------------------------------------------------------------
47//SD卡类型
48#define ERR 0x00
49#define MMC 0x01
50#define V1 0x02
51#define V2 0x04
52#define V2HC 0x06
53#define DUMMY_BYTE 0xFF
54#define MSD_BLOCKSIZE 512
55//----------------------------------------------------------------------------------------------------
56//CMD定义
57#define CMD0 0 //卡复位
58#define CMD1 1
59#define CMD8 8 //命令8 ,SEND_IF_COND
60#define CMD9 9 //命令9 ,读CSD数据
61#define CMD10 10 //命令10,读CID数据
62#define CMD12 12 //命令12,停止数据传输
63#define CMD16 16 //命令16,设置SectorSize 应返回0x00
64#define CMD17 17 //命令17,读sector
65#define CMD18 18 //命令18,读Multi sector
66#define CMD23 23 //命令23,设置多sector写入前预先擦除N个block
67#define CMD24 24 //命令24,写sector
68#define CMD25 25 //命令25,写Multi sector
69#define CMD41 41 //命令41,应返回0x00
70#define CMD55 55 //命令55,应返回0x01
71#define CMD58 58 //命令58,读OCR信息
72#define CMD59 59 //命令59,使能/禁止CRC,应返回0x00
73//----------------------------------------------------------------------------------------------------
74//数据写入回应字意义
75#define MSD_DATA_OK 0x05
76#define MSD_DATA_CRC_ERROR 0x0B
77#define MSD_DATA_WRITE_ERROR 0x0D
78#define MSD_DATA_OTHER_ERROR 0xFF
79//SD卡回应标记字
80#define MSD_RESPONSE_NO_ERROR 0x00
81#define MSD_IN_IDLE_STATE 0x01
82#define MSD_ERASE_RESET 0x02
83#define MSD_ILLEGAL_COMMAND 0x04
84#define MSD_COM_CRC_ERROR 0x08
85#define MSD_ERASE_SEQUENCE_ERROR 0x10
86#define MSD_ADDRESS_ERROR 0x20
87#define MSD_PARAMETER_ERROR 0x40
88#define MSD_RESPONSE_FAILURE 0xFF
89//----------------------------------------------------------------------------------------------------
91 HOLD = 0,
92 RELEASE = 1,
93 };
94//----------------------------------------------------------------------------------------------------
95typedef struct { /* Card Specific Data */
96 u8 CSDStruct; /* CSD structure */
97 u8 SysSpecVersion; /* System specification version */
98 u8 Reserved1; /* Reserved */
99 u8 TAAC; /* Data read access-time 1 */
100 u8 NSAC; /* Data read access-time 2 in CLK cycles */
101 u8 MaxBusClkFrec; /* Max. bus clock frequency */
102 u16 CardComdClasses; /* Card command classes */
103 u8 RdBlockLen; /* Max. read data block length */
104 u8 PartBlockRead; /* Partial blocks for read allowed */
105 u8 WrBlockMisalign; /* Write block misalignment */
106 u8 RdBlockMisalign; /* Read block misalignment */
107 u8 DSRImpl; /* DSR implemented */
108 u8 Reserved2; /* Reserved */
109 u32 DeviceSize; /* Device Size */
110 u8 MaxRdCurrentVDDMin; /* Max. read current @ VDD min */
111 u8 MaxRdCurrentVDDMax; /* Max. read current @ VDD max */
112 u8 MaxWrCurrentVDDMin; /* Max. write current @ VDD min */
113 u8 MaxWrCurrentVDDMax; /* Max. write current @ VDD max */
114 u8 DeviceSizeMul; /* Device size multiplier */
115 u8 EraseGrSize; /* Erase group size */
116 u8 EraseGrMul; /* Erase group size multiplier */
117 u8 WrProtectGrSize; /* Write protect group size */
118 u8 WrProtectGrEnable; /* Write protect group enable */
119 u8 ManDeflECC; /* Manufacturer default ECC */
120 u8 WrSpeedFact; /* Write speed factor */
121 u8 MaxWrBlockLen; /* Max. write data block length */
122 u8 WriteBlockPaPartial; /* Partial blocks for write allowed */
123 u8 Reserved3; /* Reserded */
124 u8 ContentProtectAppli; /* Content protection application */
125 u8 FileFormatGrouop; /* File format group */
126 u8 CopyFlag; /* Copy flag (OTP) */
127 u8 PermWrProtect; /* Permanent write protection */
128 u8 TempWrProtect; /* Temporary write protection */
129 u8 FileFormat; /* File Format */
130 u8 ECC; /* ECC code */
131 u8 CSD_CRC; /* CSD CRC */
132 u8 Reserved4; /* always 1*/
133} MSD_CSD;
134
135//----------------------------------------------------------------------------------------------------
136typedef struct { /*Card Identification Data*/
137 u8 ManufacturerID; /* ManufacturerID */
138 u16 OEM_AppliID; /* OEM/Application ID */
139 u32 ProdName1; /* Product Name part1 */
140 u8 ProdName2; /* Product Name part2*/
141 u8 ProdRev; /* Product Revision */
142 u32 ProdSN; /* Product Serial Number */
143 u8 Reserved1; /* Reserved1 */
144 u16 ManufactDate; /* Manufacturing Date */
145 u8 CID_CRC; /* CID CRC */
146 u8 Reserved2; /* always 1 */
147} MSD_CID;
148//----------------------------------------------------------------------------------------------------
149typedef struct {
152 u32 Capacity; /* Card Capacity */
153 u32 BlockSize; /* Card Block Size */
156 u32 SpaceTotal; /* Total space size in file system */
158} /* Free space size in file system */
159//----------------------------------------------------------------------------------------------------
163//----------------------------------------------------------------------------------------------------
164// 类目
165//
169class bsp_SD{
170 public:
171 bsp_SD(SPI_HandleTypeDef *hspi,GPIO_TypeDef *GPIOx_CS,uint16_t GPIO_Pin_CS);
172 public:
173 u8 SD_init(void);
174 u8 SD_ReadDisk(u8 * buf, u32 sector, u8 cnt);
175 u8 SD_WriteDisk(u8 * buf, u32 sector, u8 cnt);
177 u8 offsetWrite(u64 offset,u8* dat,u64 datlen);
178 u8 offsetRead(u64 offset,u8* dat,u64 datlen);
179 private:
180 SPI_HandleTypeDef *hspi;
181 GPIO_TypeDef *GPIOx_CS;
182 uint16_t GPIO_Pin_CS;
183
187
188 void SD_CS(u8 p);
189 u8 SD_GETCID(u8 * cid_data);
190 u8 SD_GETCSD(u8 * csd_data);
192 u8 SD_ReceiveData(u8 * data, u16 len);
193 u8 SD_SendBlock(u8 * buf, u8 cmd);
194 u32 SD_sendcmd(u8 cmd, u32 arg, u8 crc);
195
196 void SPI_setspeed(u8 speed);
197 u8 spi_readwrite(u8 Txdata);
198 };
200#endif
201
MSD_CARDINFO SD0_CardInfo
struct MSD_CARDINFO * PMSD_CARDINFO
_CD_HOLD
Definition: bsp_SD.h:90
@ HOLD
Definition: bsp_SD.h:91
@ RELEASE
Definition: bsp_SD.h:92
一个操作SD卡的类
Definition: bsp_SD.h:169
u8 offsetWrite(u64 offset, u8 *dat, u64 datlen)
写入连贯的数据
Definition: bsp_SD.cpp:393
u8 offsetRead(u64 offset, u8 *dat, u64 datlen)
读取连贯的数据
Definition: bsp_SD.cpp:423
u8 SD_init(void)
初始化SD卡
Definition: bsp_SD.cpp:74
SPI_HandleTypeDef * hspi
Definition: bsp_SD.h:180
u8 SD_TYPE
Definition: bsp_SD.h:185
u8 SD_ReceiveData(u8 *data, u16 len)
读取SD卡指定长度信息
Definition: bsp_SD.cpp:127
u8 SD_GETCID(u8 *cid_data)
获取CID信息
Definition: bsp_SD.cpp:164
u8 SD_SendBlock(u8 *buf, u8 cmd)
向SD卡写入一个扇区
Definition: bsp_SD.cpp:147
void SD_CS(u8 p)
片选信号
Definition: bsp_SD.cpp:43
u8 spi_readwrite(u8 Txdata)
Definition: bsp_SD.cpp:373
uint16_t GPIO_Pin_CS
Definition: bsp_SD.h:182
void SPI_setspeed(u8 speed)
设置SPI的速率
Definition: bsp_SD.cpp:383
u32 SD_GetSectorCount(void)
获取SD卡的总扇区数
Definition: bsp_SD.cpp:188
u8 DFF
Definition: bsp_SD.h:184
u8 SD_ReadDisk(u8 *buf, u32 sector, u8 cnt)
读SD卡
Definition: bsp_SD.cpp:356
MSD_CARDINFO SD0_CardInfo
Definition: bsp_SD.h:186
int MSD0_GetCardInfo(PMSD_CARDINFO SD0_CardInfo)
Definition: bsp_SD.cpp:207
u32 SD_sendcmd(u8 cmd, u32 arg, u8 crc)
写SD卡
Definition: bsp_SD.cpp:53
u8 SD_GETCSD(u8 *csd_data)
获取CSD信息
Definition: bsp_SD.cpp:176
GPIO_TypeDef * GPIOx_CS
Definition: bsp_SD.h:181
u8 SD_WriteDisk(u8 *buf, u32 sector, u8 cnt)
写SD卡
Definition: bsp_SD.cpp:329
u32 SpaceTotal
Definition: bsp_SD.h:156
u32 Capacity
Definition: bsp_SD.h:152
u32 SpaceFree
Definition: bsp_SD.h:157
u8 CardType
Definition: bsp_SD.h:155
MSD_CSD CSD
Definition: bsp_SD.h:150
u32 BlockSize
Definition: bsp_SD.h:153
MSD_CID CID
Definition: bsp_SD.h:151
u32 ProdSN
Definition: bsp_SD.h:142
u8 Reserved1
Definition: bsp_SD.h:143
u16 ManufactDate
Definition: bsp_SD.h:144
u8 ManufacturerID
Definition: bsp_SD.h:137
u8 CID_CRC
Definition: bsp_SD.h:145
u8 Reserved2
Definition: bsp_SD.h:146
u32 ProdName1
Definition: bsp_SD.h:139
u16 OEM_AppliID
Definition: bsp_SD.h:138
u8 ProdRev
Definition: bsp_SD.h:141
u8 ProdName2
Definition: bsp_SD.h:140
Definition: bsp_SD.h:95
u8 DeviceSizeMul
Definition: bsp_SD.h:114
u8 FileFormatGrouop
Definition: bsp_SD.h:125
u8 WrProtectGrEnable
Definition: bsp_SD.h:118
u8 RdBlockLen
Definition: bsp_SD.h:103
u8 MaxWrBlockLen
Definition: bsp_SD.h:121
u8 PermWrProtect
Definition: bsp_SD.h:127
u8 CopyFlag
Definition: bsp_SD.h:126
u8 ECC
Definition: bsp_SD.h:130
u8 ManDeflECC
Definition: bsp_SD.h:119
u16 CardComdClasses
Definition: bsp_SD.h:102
u8 EraseGrSize
Definition: bsp_SD.h:115
u8 Reserved4
Definition: bsp_SD.h:132
u8 WriteBlockPaPartial
Definition: bsp_SD.h:122
u8 WrSpeedFact
Definition: bsp_SD.h:120
u8 TempWrProtect
Definition: bsp_SD.h:128
u8 MaxWrCurrentVDDMin
Definition: bsp_SD.h:112
u8 Reserved1
Definition: bsp_SD.h:98
u8 CSDStruct
Definition: bsp_SD.h:96
u8 MaxWrCurrentVDDMax
Definition: bsp_SD.h:113
u8 MaxRdCurrentVDDMin
Definition: bsp_SD.h:110
u8 DSRImpl
Definition: bsp_SD.h:107
u8 EraseGrMul
Definition: bsp_SD.h:116
u8 PartBlockRead
Definition: bsp_SD.h:104
u8 MaxRdCurrentVDDMax
Definition: bsp_SD.h:111
u8 CSD_CRC
Definition: bsp_SD.h:131
u8 Reserved3
Definition: bsp_SD.h:123
u8 SysSpecVersion
Definition: bsp_SD.h:97
u8 WrProtectGrSize
Definition: bsp_SD.h:117
u8 ContentProtectAppli
Definition: bsp_SD.h:124
u8 WrBlockMisalign
Definition: bsp_SD.h:105
u32 DeviceSize
Definition: bsp_SD.h:109
u8 FileFormat
Definition: bsp_SD.h:129
u8 TAAC
Definition: bsp_SD.h:99
u8 RdBlockMisalign
Definition: bsp_SD.h:106
u8 MaxBusClkFrec
Definition: bsp_SD.h:101
u8 NSAC
Definition: bsp_SD.h:100
u8 Reserved2
Definition: bsp_SD.h:108
全局共用的标准类型表
uint64_t u64
64位无符号数类型
Definition: varint.h:43
uint8_t u8
8位无符号数类型
Definition: varint.h:40
uint16_t u16
16位无符号数类型
Definition: varint.h:41
uint32_t u32
32位无符号数类型
Definition: varint.h:42