写在前面

在给px30移植sd的时候,发现有两个问题
1 sd卡识别率低,有一部分sd卡识别不了,主要是一些老的sd卡
2 即使sd卡已经识别,但是给sd卡写入内容之后,sync之后消失
针对这两个问题,看了一下sd的相关的知识
网上的一些基础知识已经很完善了,主要是记录一下遇到的问题和解决方法,取自网上,分享网上。

问题1

可以正确识别fat格式,可以正常读到sd卡内容,但是写操作之后,会打印 I/O error 或者写操作没报错 但是执行sync之后,内容消失
查看内核打印信息

6,843,148882484,-;mmc0: new ultra high speed SDR25 SDXC card at address 5048
6,844,148891358,-;mmcblk0: mmc0:5048 SD64G 58.0 GiB
6,845,148895135,-; mmcblk0: p1
4,846,149131536,-;FAT-fs (mmcblk0p1): Volume was not properly unmounted. Some data may be corrupt. Please run fsck.
3,847,159826238,-;FAT-fs (mmcblk0p1): Directory bread(block 16384) failed
3,848,159826978,-;FAT-fs (mmcblk0p1): Directory bread(block 16385) failed
3,849,159827941,-;FAT-fs (mmcblk0p1): Directory bread(block 16386) failed
3,850,159828790,-;FAT-fs (mmcblk0p1): Directory bread(block 16387) failed
3,851,159831333,-;FAT-fs (mmcblk0p1): Directory bread(block 16388) failed
3,852,159832206,-;FAT-fs (mmcblk0p1): Directory bread(block 16389) failed
3,853,159833568,-;FAT-fs (mmcblk0p1): Directory bread(block 16390) failed
3,854,159834436,-;FAT-fs (mmcblk0p1): Directory bread(block 16391) failed
3,855,159835629,-;FAT-fs (mmcblk0p1): Directory bread(block 16392) failed
3,856,159836793,-;FAT-fs (mmcblk0p1): Directory bread(block 16393) failed
3,857,170252772,-;mmcblk0: error -84 transferring data, sector 62489, nr 1, cmd response 0x900, card status 0x0
6,858,170262638,-;rockchip-iodomain ff140000.syscon:io-domains: Setting to 3300000 doneSUBSYSTEM=platformDEVICE=+platform:ff140000.syscon:io-domains
7,859,170264537,-;vccio_sd: ramp_delay not set
6,860,170264589,-;rockchip-iodomain ff140000.syscon:io-domains: Setting to 3300000 doneSUBSYSTEM=platformDEVICE=+platform:ff140000.syscon:io-domains
6,861,170278720,-;mmc_host mmc0: Bus speed (slot 0) = 400000Hz (slot req 400000Hz, actual 400000HZ div = 0)SUBSYSTEM=mmc_hostDEVICE=+mmc_host:mmc0
6,862,170486432,-;rockchip-iodomain ff140000.syscon:io-domains: Setting to 3300000 doneSUBSYSTEM=platformDEVICE=+platform:ff140000.syscon:io-domains
7,863,170488344,-;vccio_sd: ramp_delay not set
6,864,170488405,-;rockchip-iodomain ff140000.syscon:io-domains: Setting to 1800000 doneSUBSYSTEM=platformDEVICE=+platform:ff140000.syscon:io-domains
6,865,170507110,-;mmc_host mmc0: Bus speed (slot 0) = 50000000Hz (slot req 50000000Hz, actual 50000000HZ div = 0)SUBSYSTEM=mmc_hostDEVICE=+mmc_host:mmc0
4,866,170508074,-;mmc0: tried to reset card
3,867,170508770,-;mmcblk0: error -84 transferring data, sector 62489, nr 1, cmd response 0x900, card status 0x0
3,868,170509860,-;blk_update_request: I/O error, dev mmcblk0, sector 62489
3,869,170510564,-;Buffer I/O error on dev mmcblk0p1, logical block 29721, lost async page write
3,870,170512196,-;mmcblk0: error -84 transferring data, sector 62489, nr 1, cmd response 0x900, card status 0x0
3,871,170513426,-;blk_update_request: I/O error, dev mmcblk0, sector 62489
3,872,170514021,-;Buffer I/O error on dev mmcblk0p1, logical block 29721, lost async page write

这里主要是参考

https://blog.csdn.net/jasonwang1002/article/details/102532862

分析如下:
sd卡驱动中,初始化操作分两步:
第一步是用3.3v 400000Hz 去探测这个sd卡总线速度,(这里是uhs SDR25 SDXC 最高是50M),一些常见的总线速度列到下面

 Default Speed mode: 3.3V供电模式,频率上限25MHz,速度上限 12.5MB/sec
● High Speed mode: 3.3V供电模式,频率上限50MHz,速度上限 25MB/sec
● SDR12: UHS-I卡, 1.8V供电模式,频率上限25MHz,速度上限 12.5MB/sec
● SDR25: UHS-I卡, 1.8V供电模式,频率上限50MHz,速度上限 25MB/sec
● SDR50: UHS-I卡, 1.8V供电模式,频率上限100MHz,速度上限 50MB/sec
● SDR104: UHS-I卡, 1.8V供电模式,频率上限208MHz,速度上限 104MB/sec
● DDR50: UHS-I卡, 1.8V供电模式,频率上限50MHz,性能上限 50MB/sec
● UHS156: UHS-II RCLK Frequency Range 26MHz - 52MHz, up to 1.56Gbps per lane.

第二步是用提高到这相应的总线速度,做接来下的读写动作,但是在嵌入式中,可能会因为硬件走线或者其他问题,导致最高速度不能使用。最好的办法是修改硬件,如果不能修改硬件,可以参考我的方法,使用设备树限制下最高的时钟速度,看看能不能接受。

max-frequency = <10000000>;//限制一下最高速度,尽量兼容大部分设备

问题2

可以正常的识别到sd卡,具体可以看内核打印中识别成功了sd卡

6,790,98197795,-;mmc0: new ultra high speed SDR25 SDXC card at address 5048
6,791,98200999,-;mmcblk0: mmc0:5048 SD64G 58.0 GiB
6,792,98204645,-; mmcblk0: p1

但是FAT格式的sd卡可以正常自动挂载成功,NTFS格式的sd卡就不能自动挂上去了,经过查找,linux中自动挂载可以使用写udev脚本的方式,我这个是因为mount -t ntfs /dev/mmcblk0px /sdcard 这种方式,挂载报错,emm。。。没有细查原因,改了一下/lib/udev/rules.d/61-sd-cards-auto-mount.rules 的脚本

-ACTION=="add", ENV{ID_FS_TYPE}=="ntfs", RUN+="/bin/mount -t ntfs-3g -o %E{mount_options_ntfs} /dev/%k '/mnt/sdcard'"
+ACTION=="add", ENV{ID_FS_TYPE}=="ntfs", RUN+="/usr/bin/ntfs-3g -o %E{mount_options_ntfs} /dev/%k '/mnt/sdcard'"

参考资料

sd卡介绍

https://www.jianshu.com/p/6272e4cb1eeb

超能课堂

https://www.expreview.com/71505.html

写入sd卡失败

https://blog.csdn.net/jasonwang1002/article/details/102532862

6.0 px30 sd卡移植的问题解决相关推荐

  1. STM32CubeMX系列09——SDIO(SD卡读写、SD卡移植FATFS文件系统)

    文章目录 1. 准备工作 1.1. 简单扫盲 1.1.1. SD卡 1.1.2. TF卡 1.1.3. SDIO接口 1.2. 所用硬件及原理图 2. 创建工程 2.1. 选择主控 2.2. 系统配置 ...

  2. [sg] Android 6.0 判断SD卡是否挂载,获取SD卡路径,和挂载的U盘进行区分

    这三个问题其实可以归为一个问题,Android 6.0的SD卡和U盘都会挂载在 /mnt/media_rw/路径下,其实问题就是如何获取挂载信息 1. 存储服务StorageManagerServic ...

  3. 【FatFs】基于STM32 SD卡移植FatFs文件系统

    相关文章 <[SDIO]SDIO.SD卡.FatFs文件系统相关文章索引> 1.前言 FatFs是一个通用的FAT/exFAT文件系统模块,用于小型嵌入式系统.它完全是由 ANSI C 语 ...

  4. stm32f769 寄存器配置SD卡---移植fatfs

    昨天开始在上周实现的SD卡读写基础上移植fatfs文件系统,开始不是很顺利,之前没有搞过,完全按照f767的例程移植的,但是在加载SD卡时一直是失败的,很郁闷,折腾了一天,结果还不理想,睡了个好觉,思 ...

  5. 贴片SD卡移植FATFS文件系统

    一.前言 手头有一块深圳雷龙提供的贴片 CS 创世 SD NAND Flash,挂载个文件系统把玩一下.首先介绍一下使用的贴片 SD 卡,以前使用的都是拔插式的 SD 卡,下面这个样子: 深圳雷龙提供 ...

  6. android 5.0 模拟sd卡,如何使用为Android5.0(Lolliop)提供的新的SD卡访问API?

    在下面链接的我的Android项目中,您可以找到允许在Android 5中的ExtSDCard上编写的工作代码.它假设用户可以访问整个SD卡,然后允许您在这张卡上随时随地写东西.(如果您只想访问单个文 ...

  7. android 6.0 sd卡读写权限,Android 6.0 读写SD卡权限问题

    一.问题描述## Android 6.0 下默认存储SD卡,使用原生FMRadio生成的文件保存到内部存储中 [预置条件]插入T卡[操作步骤]设置>存储设备和USB>选择SD卡为默认存储& ...

  8. rk3288 android 6.0固件,[RK3288][Android6.0] 使用SD卡升级固件到eMMC

    Platform: RK3288 OS: Android 6.0 Kernel: 3.10.92 使用SD升级固件到eMMC比较方便, 插卡后完全自动升级,不需要连到PC端,省时省力. a. 编译整个 ...

  9. SD卡移植FAT32文件系统无MBR

    问题:在研究SD卡和FAT32文件系统的时候,发现SD卡有的有MBR,有的没有MBR,这个为什么呢? 分析:MBR是主引导记录,是在给磁盘分区的时候建立的,我们的SD卡没有这个可能就是没有进行过分区操 ...

最新文章

  1. 大数据时代的新型数据库 — 图数据库 Neo4j 的应用
  2. B类产品的科学化设计与分析流程
  3. moss 2007 单点登录的配置
  4. oracle9i 查询scn,Oracle10g的current_scn是如何计算的?
  5. QtCreator中的Sysroot的含义及坑
  6. adc如何获取周期_LOL:千珏拥有ADC最需要的位移和无敌能力,为什么没人用她打下路?...
  7. js字符串slice_JavaScript子字符串示例-JS中的Slice,Substr和Substring方法
  8. 【Modern OpenGL】转换 Transformations
  9. 15.深度学习练习:Deep Learning Art: Neural Style Transfer
  10. 解决VS2010自带的C/C++编译器CL找不到mspdb100.dll的问题
  11. 穿衣助手 张凯:电商产品经理的成长之路
  12. WIFI信道频率对应
  13. 【算法笔记】树形DP算法总结详解
  14. iOS开发-思维导图(初级)
  15. ReportNG测试报告的定制修改
  16. cv2.imread不能正常读取gif格式图片
  17. Python迎来30岁生日,先驱Pablo Galindo:没想到Python这么流行
  18. 批量处理ios破解后的资源文件为android所用
  19. 汽车降价结束会迎来报复性涨价吗
  20. android自动切换图片,Android应用中图片浏览时实现自动切换功能的方法详解

热门文章

  1. 计算机控制在工业自动化中的作用,计算机在工业电器自动化控制的实现
  2. 【Qt】Qt再学习(十三):QGraphicsScene
  3. 大学时光仅四年,疫情反反复复占几年
  4. CockroachDB架构——概览
  5. No valid Maven installation found. Either set the home directory in the configuration dialog 解决
  6. c语言贪吃蛇游戏闪烁,C语言贪吃蛇闪屏问题,求大神!!!
  7. [AHOI2005] 航线规划 题解
  8. 平面和三维曲面图相交求交线和画图
  9. 物联网传输技术——ZigBee协议概论
  10. 如何选择优化算法遗传算法_用遗传算法优化垃圾收集策略