- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
D 卡底层驱动程序,c 代码
硬件平台:stm32 编译环境:MDK401 驱动方式:SPI 总线
编写的函数如下:
1、 u8 SD_Init() SD 卡初始化(复位和激
活)
2、 u8 SD_SendCommand(u8 cmd, u32 arg, u8 crc) 向SD 卡发送一个命令
3、 u32 SD_GetCapacity(void) 获取SD 卡的容量
4、 u8 SD_GetCID(u8 *cid_data) 获取SD 卡的CID 信息,包括制造商信息
5、 u8 SD_GetCSD(u8 *csd_data) 获取SD 卡的CSD 信息,包括容量和速度信息
6、 u8 SD_ReadMultiBlock(u32 sector, u8 *buffer, u8 count) 读SD 卡的多个 block 7、 u8 SD_ReadSingleBlock(u32 sector, u8 *buffer) 读SD 卡的一个block
8、 u8 SD_ReceiveData(u8 *data, u16 len, u8 release) 从SD 卡中读回指定长度的数据,放置在给定位置
9、 u8 SD_WaitReady(void) 等待SD 卡Ready
10、u8 SD_WriteMultiBlock(u32 sector, const u8 *data, u8 count) 写入 SD 卡的N 个block 11、u8 SD_WriteSingleBlock(u32 sector, const u8 *data) 写入 SD 卡的一个 block
SD 卡命令 推荐SD 卡命令共分为 12 类,分别为class0 到class11,不同的SDd 卡,主控根据其功能, 支持不同的命令集 如下:
Class0 (卡的识别、初始化等基本命令集)
CMD0:复位SD 卡.
CMD1:读 OCR 寄存器. CMD9:读 CSD 寄存器. CMD10:读CID 寄存器.
CMD12:停止读多块时的数据传输CMD13:读 Card_Status 寄存器Class2 (读卡命令集):
CMD16:设置块的长度CMD17:读单块.
CMD18:读多块,直至主机发送CMD12 为止 . Class4(写卡命令集) :
CMD24:写单块. CMD25:写多块.
CMD27:写CSD 寄存器 .
Class5 (擦除卡命令集):
CMD32:设置擦除块的起始地址. CMD33:设置擦除块的终止地址. CMD38: 擦除所选择的块.
Class6(写保护命令集):
CMD28:设置写保护块的地址. CMD29:擦除写保护块的地址.
CMD30: Ask the card for the status of the write protection bits class7:卡的锁定,解锁功能命令集
class8:申请特定命令集 。
class10 -11 :保留
其中 class1, class3,class9:SPI 模式不支持
SD 卡命令格式如下:
解释:6 个字节,第一个字节最高两个BIT 为 01,2-5BYTE 为参数,还有一个字节的 CRC 校验
SD 卡SPI 模式硬件连接:(典型连接)
SD 卡两种模式,引角使用情况(注意:本帖所用 SPI 模式)
SPI 时序如下:
SD 卡时序如下:
4x8lnit(CMD
4
x
8
88..`.勹.l竺泊cNE,..j:,,K.-
8
8..
`
.勹
.l
竺
泊
cN
E,.
.j
:,,K.- 』圈.`止,
8
[
l
.竺
8
引
( [
-
RCS
R
.L冈liiI(CMD) I
.L
冈
li
iI
ihcFFc飞',1(DATA) OU.T
i
hc
FFc
飞
'
,
1
使 用CMID11 (命令11 )
0,1 0000011 IOx1001 01x1001 10x1001 O X100 CRC
Set Blo c k Len th
8冈8x4 Bx -
8冈
clk
贞琴 炒3 j
`\
`\
`,l l
`,
CS,
{CMD) IN
l `
l l
, I
亡 i \
`M 4 Byte s ; `
`
{D ATA) OUT
B| 心
50 h 斤 h `
`
旦
时序分析(这里我举一个例子)
SD 卡读扇区时序
1、拉低 CS,选中 SD 卡
2、发送命令 17(从本帖的上面查)
3、命令发送完毕后不断的读取输出线,读到 0xFE,表示命令成功
4、准备接收数据,0xFE 是数据的开始,此后就可以接收 512 个字节了 (当然在初始化的时候有用命令
16 设置块的大小为 512)
5、数据接收完毕,拉高 C
原创力文档


文档评论(0)