"); //-->
八、SD卡疑惑
1、SD卡擦除后,其中的内容是0,还是1 ?
The data at the card after an erase operation is either '0' or '1', depends on the card vendor.The SCR register bit DATA_STAT_AFTER_ERASE (bit 55) defines whether it is '0' or '1'.(摘自《SD Specifications_Part_1_Physical_Layer_Specification_Ver3.00_Final_090416.pdf》)
也就是说这是芯片厂商生产工艺决定的,可以通过SCR寄存器的 DATA_STAT_AFTER_ERASE位得知。
2、在SDIO_DCTRL中设置传输Block的要求
Block大小决定了主机在发送数据时,发送到什么程度时开始发送CRC校验码;而在接收数据时,在接收到什么程度时开始把SD卡的数据作为CRC校验码并进行校验。Block还可能影响着其他的时序。在STM32的SDIO寄存器组中,SDIO_DCTRL中的位段DBLOCKSIZE决定主机Block大小。
在摘自《Simplified_SD_Host_Controller_Spec.pdf》的引文中,提到这样的配置要求:主机的Block一定要与SD卡设置的Block一样大小,这显然是必要的。我们经常设置SD卡的Block大小是512Bytes,所以设置DBLOCKSIZE为9(2^9 = 512)。
3、STM32固件库“stm32_eval_sdio_sd.c version v4.5.0”偶遇BUG
参考网页:http://www.cprogramdevelop.com/3742318/
4、SD卡写Block是怎样进行的?
写SD卡的单位是Block(512Bytes),再写之前要先整块擦除,然后才能写。
在多块写操作中,可以在发送多块写命令CMD25之前,有选择性的先发送命令ACMD23设置预擦除。怎样理解呢?
既然是有选择性的,也可以不发送ACMD23命令。在多块写的过程中,由于SD卡事先不知道你要写入几个块(CMD25命令只告诉SD卡要写入的起始地址),所以写入的过程是:根据需要判断要写一个块时,先擦除然后再写,再判断是否要写入下一个块,如果是就再擦除再写。
倘若发送ACMD23命令就不一样了,ADM23命令会在写命令CMD25生效之前,告诉SD卡准备写入的块数N。这样当CMD25命令生效的时候,SD卡会一次性先将这N个块都擦除,然后再一个块一个块写。由于擦除操作比较集中,所以整个多块写操作更节省时间。
九、SD卡参数测试
使用野火开发板配套例程做测试,笔者测试用的SD卡是金士顿的2G内存块,打印SD卡的参数信息如下:
Card Type is :1
ManufacturerID is :2
Card device size is :3795
Card Block Size is :1024
Card device size multiplier is :7
Card Capacity is :1990197248
the maximum read date block length is :1024
partial blocks for write allowed is :0
the maximum write date block length is :1024
erase single block enable is :1
erase sector size is :127
write protect group size is :0
RCA is :4660
Card Type:1 SDSC卡版本2.0
Card device size: C_SIZE(CSD),为3795
Card Block Size: max read data block length(READ_BL_LEN(CSD)) ,为1024 Bytes
Card device size multiplier is: C_SIZE_MULT(CSD),为7
Card Capacity: 1990197248 Bytes
计算方法(摘自《Simplified_Physical_Layer_Spec.pdf》):
memory capacity = BLOCKNR * BLOCK_LEN
BLOCKNR = (C_SIZE+1) * MULT (C_SIZE <= 4096)
MULT = 2^(C_SIZE_MULT+2) (C_SIZE_MULT < 8)
BLOCK_LEN = 2^READ_BL_LEN, (READ_BL_LEN < 12)注意:SDSC最大为2GB。
the maximum read date block length:READ_BL_LEN(CSD) ,为1024 Bytes
partial blocks for write allowed:WRITE_BL_PARTIAL(CSD),为不支持
the maximum write date block length:WRITE_BL_LEN(CSD) ,为1024 Bytes
erase single block enable:ERASE_BLK_EN(CSD),为1,支持单块擦除
erase sector size:SECTOR_SIZE(CSD),实际扇区擦除的block数为(SECTOR_SIZE+1),为128 Blocks
write protect group size:WP_GRP_SIZE(CSD),实际保护的扇区数为(WP_GRP_SIZE+1),为1 Sector
RCA: SD卡相对地址为4660
参考资料:《Simplified_SDIO_Card_Spec.pdf》
《Simplified_Physical_Layer_Spec.pdf》
《Simplified_SD_Host_Controller_Spec.pdf》
《STM32芯片手册》
专栏文章内容及配图由作者撰写发布,仅供工程师学习之用,如有侵权或者其他违规问题,请联系本站处理。 联系我们
相关推荐
MSP430 电表解决方案
超低功率高性能新一代产品MSP430F5xx
Microchip发布PIC16F17576单片机(MCU)系列,简化模拟传感器设计
《ATmega8原理及应用手册》
用AT89C2051单片机实验合弦乐
《AVR单片机C语言库》
倾情奉献:MSP430汇编指令集(中文),详解带实例!
GD32E230F6V6实用指南:为下一个项目选择合适单片机
Microchip推出集成高性能模拟外设的32位PIC32A单片机
功率监测与控制系统DIY——搭建环境,定时器翻转LED
用单片机制作的纯正弦波逆变电源电路
新手必看的单片机知识
16位语言函数工具库
[转帖]从Cygnal C8051F看8位单片机发展之路
创维数码5000系列彩电开关电源(AN单片机)电路
长虹R2118A型彩电开关电源(LA单片机)电路
双芯智控革命:IGBT与单片机如何重塑智能微波炉
MSP430单片机TIMER_A在产品设计中的应用
语音合成芯片T6668和单片机8031的接口电路图
车规级MCU介绍
AVR 单片机专栏,资料下载!
单片机语言C51应用实战集锦
瑞萨单片机技术概述
5V 单片机与5V 耐压单片机有何区别,为什么至关重要
MSP430x2xx4xx系列
瑞萨RA0单片机连载——PWM实现呼吸灯
AVR 单片机专栏,资料下载!之二
瑞萨RA0单片机连载——面向对象编程之SHT31温度计
利用PIC12C508单片机来实现加密狗技术[转帖]
介绍采用 nanoWatt XLP技术的超低功耗系列单片机