硬汉嵌入式论坛

 找回密码
 立即注册
查看: 3372|回复: 4
收起左侧

[有问必答] 关于SD卡SDIO直接写入和读取的问题。

[复制链接]

1

主题

4

回帖

7

积分

新手上路

积分
7
发表于 2018-9-22 19:25:59 | 显示全部楼层 |阅读模式
请教各位一个问题,SDIO驱动SD卡,没有文件系统,将数据uint8_t data[512*18]的一个数组,利用SD_WriteMultiBlocks(data, 0x00, 512, 18)写入了SD卡,一次写入了18个block。然后通过SD_ReadBlock(text, 0x00, 512),将0x00起始的第一个block读入数组uint8_t  text[512]中。数据写入和读取都能实现,但是碰到了一个问题,在SD_ReadBlock(text, 0x00, 512)函数中,起始地址为0x00和0x0A时,读出的数据时完全一样的。
请教一下,写入函数和读取函数的地址含义应该如何理解?
看了函数的说明里说地址是读取数据的起始,难道说SD_ReadBlock能够从任意地址起始读取一个512字节的数据出来吗?

回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106978
QQ
发表于 2018-9-23 00:02:09 | 显示全部楼层
楼主这个问题提的好,我也学习了下,函数源码里面有这么一个函数
SD_PowerON,实现了对卡类型的识别,如果是SDIO_HIGH_CAPACITY_SD_CARD类型,那么函数SD_ReadBlock里面的函数会对地址做如下操作,楼主可以看看是不是这个原因
QQ截图20180923000314.png


回复

使用道具 举报

1

主题

4

回帖

7

积分

新手上路

积分
7
 楼主| 发表于 2018-9-23 13:05:16 | 显示全部楼层
感谢回答,明白了,看来大容量的卡是严格按块操作的。
回复

使用道具 举报

3

主题

62

回帖

71

积分

初级会员

积分
71
发表于 2018-9-23 18:08:25 | 显示全部楼层
在”V6开发板配套资料\02.配套例程\03.CPU外部设备例程(41个)“中的几个跟SDIO有关的例子中,几个函数如:SD_Error SD_ReadBlock(uint8_t *readbuff, uint32_t ReadAddr, uint16_t BlockSize)
这个ReadAddr都是32位的,当时看的很不解,今天偶然发现这个帖子,才发现这几个例子中的驱动不一样,32位的应该不对吧?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106978
QQ
发表于 2018-9-23 18:19:08 | 显示全部楼层
ruboss 发表于 2018-9-23 18:08
在”V6开发板配套资料\02.配套例程\03.CPU外部设备例程(41个)“中的几个跟SDIO有关的例子中,几个函数如 ...

32位的是老版本驱动,使用超过4GB的卡容易有问题,使用我这个FreeRTOS里面的这个:

http://www.armbbs.cn/forum.ph ... 7658&extra=page%3D1
QQ截图20180923181922.png
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-13 02:40 , Processed in 0.184812 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表