我是刚才问怎样启用内存卡卡的那位

必须取下后盖才能存取电池槽、SIM 卡插槽和储存卡插槽。

1. 在手机关机的情况下拿稳手机,将手机屏幕面朝下

2. 用大拇指或手指从手机顶端的小开口将背盖打开。

1. 将手机裝入后盖底部的内侧

2. 若要合上后盖,请将后盖从两侧及顶端往手机的方向压背盖卡入时会发出喀一声。

3. 将 SIM 卡金属触点部分朝下截角處朝向插槽外,依此方向插入 SIM 卡(见图示)

3. 按住 SIM 卡插槽前端的小标签,接着从插槽后方将 SIM 卡推出

2. 将 microSD 储存卡金属接点部分朝下插入插槽,并往内推到底

2. 将储存卡从插槽中拉出。

本站原创 转载请注明出处:【】 

}

  
  1. SD卡底层驱动代码量不小功能稍微有点复杂,其他的功能不说了;本博文主要介绍SD卡V1.0和V2.0版本的SD卡的容量结算;
  2. )会获取SD卡的三个重要信息作为f_fdiskf_mkfs函数为整个SD卡分区挂载文件系统的依据;
  3. 下面的代码来自于STM32官方提供的固件库的SD卡例程但是:例程里边有错误的地方需要修改,如果不修改有可能会影响到FatFS系统迻植时分区的问题在博文的最后有特别指出;
  4. 看懂本文需要有SD卡开发经验和FATFS文件系统移植经验基础的同志;

1.获取并处理CSD寄存器数据


  
  • 获取SD鉲CSD寄存器数据。执行SD_GetCardInfo函数将CSD寄存器的值全部赋值到CSD结构体;要获取的数据如下表(来自SD卡V2.0协议)

    对于V1.0的卡来说,要获取下面几组数据:

    對于V2.0的卡来说只需获取一个数据:


    所对应的代码下面列出来,但是注意我们所要用到的V1.0和V2.0的参数本身不多所有我对结构体做出适当的修剪:
* 这个结构体包含了SD卡的CSD寄存器和CID寄存器,这里我们只讨论CSD寄存器
  • 通过上面一顿操作我们将想要的信息整理了出来分别是:
    用于V2.0计算的:C_SIZE;(注意两个C_SIZE的位宽是不一样的)

特别注意:尤其是V2.0的SD卡最大可以达到32G类型,防止溢出;

4. 但是这里有一个问题(怎样启用内存卡卡小于等于4GB的请忽略下面)

问题:在对SD卡进行FatFS系统移植的时候我在实验中发现STM32官方提供的SD卡程序只能支持0~4G以内的SD卡(其实不能说是BUG,严格的说昰一个移植不兼容的问题);详细问题情况如下:

    但是实际上厂家并不会这么精准(唉)所最终我的怎样启用内存卡卡的容量最终如下圖(我们暂且取14.6GB):
  1. 下面对这个SD卡直接用上面移植来的SD卡例程和FATFS文件系统对其进行平均4分区,分区后如下:
    会发现:有4个相等的有效分区和一个12G的未分配区间,为什么会产生这个问题14.6GB的怎样启用内存卡不应该是都是3.65GB吗?
    原因:看下面这段代码这段代码是FATFS文件系统中一個命令控制函数,FATFS文件系统用它来获取分区的依据;
case CTRL_TRIM: //告诉设备此扇区块(cmd中包含的地址)不再需要可以擦除;

对,就是V2.0的计算公式;然而再准确的说原因是:cardinfo->SD_csd.DeviceSize这个成员变量的数据类型,如下定义:

通过计算可知:uint32_t的最大表示值为0xFFFF FFFF = (4GB-1Byte)如果超出4G,则势必会发生溢出从而导致数据错误,再引起分区错误;

解决办法:修改如图两个地方即可:
基本上完成了4平分(最后的13M,强迫症表示接受不了!!!)

}

我要回帖

更多关于 怎样启用内存卡 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信