打印
[ZLG-MCU]

SD卡向普通E2一样读写

[复制链接]
1759|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ren35240039|  楼主 | 2009-11-25 11:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
mohanwei| | 2009-11-25 12:00 | 只看该作者
靠驱动实现。
在RAM里开辟一个扇区的缓冲区……

使用特权

评论回复
板凳
xwj| | 2009-11-25 12:07 | 只看该作者
呵呵,LS正解,你应该这样做:
块读、然后改写缓存,最后块写回去:)

使用特权

评论回复
地板
ren35240039|  楼主 | 2009-11-25 13:36 | 只看该作者
哦,我用的是NEC单片机读SD 卡,现在块读可以设定长度,但是起始地址必须是512整数倍,块写时长度只有512通过,起始地址也必须是512整数倍,不能是任意地址, 不知怎样设定?

使用特权

评论回复
5
kiton_law| | 2009-11-25 14:01 | 只看该作者
SD卡是块设备,物理层的读写只能通过块,如果要进行流式读写,需要增加中间层,使用逻辑接口进行流读写。

比如中间层有一个缓冲区,上层输入一个地址的时候,中间层把地址转换成块地址和块地址内偏移地址,然后通过物理接口把该块读到缓冲区,然后在把缓冲区中对应你给的地址的偏移地址内容返回给上层,通过缓冲区模拟流式读写,,这样在上层看来就和流读写一样了,文件系统在块设备上就是干这项工作的,但你不需要实现文件系统那么复杂,只需要实现块到流的转换和缓冲机制。

使用特权

评论回复
6
kiton_law| | 2009-11-25 14:03 | 只看该作者
类似的东西比如Nand Flash也是块设备,硬盘也是块设备,Nor Flash写入的时候也是块设备(读的时候是流设备)

PS:流设备的读取单位为字节时也叫做字符设备。

使用特权

评论回复
7
ren35240039|  楼主 | 2009-11-25 17:20 | 只看该作者
首先感谢各位大虾指教。我在SD规范协议里看到CSD寄存器里有四个位是可以控制块写的长度,即起始地址和结束地址可以为任意字节值,不知有没有哪位大虾改过其值,实现过此操作,望指教,谢谢

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

6

帖子

0

粉丝