问题描述:
使用spi的TF卡模块,卡为京东联名的32g的HC卡,使用核心板外接模块,发现前面的初始和卡的检验可以通过,但读取不到扇区数,也不能读取扇区0,读取会卡死。核对了软硬件都毫无头绪,同样的代码在另一块407的带sd卡槽的板子上是读写没问题的。

解决:
由于使用的核心板和拓展模块,所以之间使用了不短的杜邦线,所以我怀疑是干扰,而且显然前面400k以下的速率设置和校验是没问题的,所以我怀疑是后面的高速模式才有问题。本着频率越低,越能抗干扰的朴素科学观。修改<400k初始化化之后切换为高速模式,如下位置(倒数第五行的SD_SPI_SpeedHigh();//高速)

u8 SD_Initialize(void)
{u8 r1;      // 存放SD卡的返回值u16 retry;  // 用来进行超时计数u8 buf[4];  u16 i;SD_SPI_Init();        //初始化IOSD_SPI_SpeedLow();   //设置到低速模式 for(i=0;i<10;i++)SD_SPI_ReadWriteByte(0XFF);//发送最少74个脉冲 一个FF就是大于8个脉冲 这里大于80个脉冲了retry=20;do{r1=SD_SendCmd(CMD0,0,0x95);//进入IDLE状态}while((r1!=0X01) && retry--);SD_Type=0;//默认无卡if(r1==0X01){if(SD_SendCmd(CMD8,0x1AA,0x87)==1)//SD V2.0{for(i=0;i<4;i++)buf[i]=SD_SPI_ReadWriteByte(0XFF);    //Get trailing return value of R7 respif(buf[2]==0X01&&buf[3]==0XAA)//卡是否支持2.7~3.6V{retry=0XFFFE;do{SD_SendCmd(CMD55,0,0X01);  //发送CMD55r1=SD_SendCmd(CMD41,0x40000000,0X01);//发送CMD41}while(r1&&retry--);if(retry&&SD_SendCmd(CMD58,0,0X01)==0)//鉴别SD2.0卡版本开始{for(i=0;i<4;i++)buf[i]=SD_SPI_ReadWriteByte(0XFF);//得到OCR值if(buf[0]&0x40)SD_Type=SD_TYPE_V2HC;    //检查CCSelse SD_Type=SD_TYPE_V2;   }}}else//SD V1.x/ MMC   V3{SD_SendCmd(CMD55,0,0X01);        //发送CMD55r1=SD_SendCmd(CMD41,0,0X01);  //发送CMD41if(r1<=1){     SD_Type=SD_TYPE_V1;retry=0XFFFE;do //等待退出IDLE模式{SD_SendCmd(CMD55,0,0X01); //发送CMD55r1=SD_SendCmd(CMD41,0,0X01);//发送CMD41}while(r1&&retry--);}else//MMC卡不支持CMD55+CMD41识别{SD_Type=SD_TYPE_MMC;//MMC V3retry=0XFFFE;do //等待退出IDLE模式{                                             r1=SD_SendCmd(CMD1,0,0X01);//发送CMD1}while(r1&&retry--);  }if(retry==0||SD_SendCmd(CMD16,512,0X01)!=0)SD_Type=SD_TYPE_ERR;//错误的卡}}SD_DisSelect();//取消片选SD_SPI_SpeedHigh();//高速if(SD_Type)return 0;else if(r1)return r1;        return 0xaa;//其他错误
}

进入这个函数,修改慢一点,修改为1/4,之前是1/2(SPI_SPEED_2)。

//SD卡正常工作的时候,可以高速了
void SD_SPI_SpeedHigh(void)
{SPI1_SetSpeed(SPI_SPEED_4);//设置到高速模式
}

STM32F407使用SPI读写SD TF卡(不能读取 会卡死)相关推荐

  1. SD/TF卡驱动(二)--------SD卡程序初始化流程以及读写

    说明: ①测试的SD卡为高容量卡,支持SD卡2.0协议,容量为16G ②采用GPIO模拟SPI时序的方式对SD卡进行驱动,很方便移植到没有硬件SPI或者SDIO的MCU,对于这类MCU,只需要将对应的 ...

  2. STM32利用SPI读写SD卡的程序详解

    STM32利用SPI读写SD卡的一些程序详解 关于SD卡的基础知识这里不做过多陈述,如果有对这方面感兴趣的朋友可以直接百度一下,有很多讲SD卡的文章,这里主要是针对SD卡的读写程序实现做一些详细说明. ...

  3. 迅为4418/6818开发板实现最小Linux系统自动挂载SD/TF卡/U盘等存储设备

    本文转自迅为论坛:http://www.topeetboard.com 在论坛里找到的,先做个笔记以后用到随时看 通过 mdev 工具实现 U 盘和 SD/TF 卡的自动挂载步骤如下: 一.配置内核 ...

  4. 全志A64平台由于没有SD/TF卡座进不了系统

    在进行硬件的裁剪之后发现进不了系统,报错信息如下. sunxi-mmc 1c0f000.sdmmc: smc 1 p0 err, cmd 1 这时需要修改内核设备树文件,全志的硬件设备信息写在了以fe ...

  5. 警惕不良商家利用Panasonic SDFormatter 软件对SD/TF卡容量造假

    警惕不良商家利用Panasonic SDFormatter 软件对SD/TF卡容量造假 简单的一个操作,就完成了对便携式存储卡,扩容造假,不管你怎么格式化,仍然是会显示虚假 容量,骗过一般的操作行为, ...

  6. SPI读写SD卡速度有多快?

    SD卡是一个嵌入式中非常常用的外设,可以用于存储一些大容量的数据.但用单片机读写SD卡速度一般都有限(对于高速SD卡,主要是受限于单片机本身的接口速度),在高速.实时数据存储时可能会有影响.但具体速度 ...

  7. ESP32 ESP-IDF SD(TF)卡保存GPS北斗模块数据

    陈拓 2022/05/13-2022/05/15 1. 简介 在<ESP32 ESP-IDF 获取GPS北斗模块的经纬度和日期时间> https://zhuanlan.zhihu.com/ ...

  8. SD/TF卡测试与比较

    存储卡的读写速度的区别:class 10,UHS-1(U1 U3),UHS-3 – 艾文心 http://ivan.xin/?p=4793 SD/TF的A1,U3协议简单对比 & 掉速问题解决 ...

  9. 如何用U盘启动树莓派,没有SD/TF卡怎么启动树莓派

    在收到树莓派3B+之后,我发现必须要用tf卡才能启动,但是手头没有tf卡,所以上网寻找其他方法. 在看了很多教程,问了一些同学之后,我了解到树莓派3B+是可以通过U盘启动的,而且不像网上那些既要用到U ...

最新文章

  1. whoosh学习(1)
  2. CKeditor3.6.2 配置与精简
  3. python与办公自动化-用 Python 自动化办公,我与大神之间的差距一下就拉小了
  4. android中获取版本号,如何获取Android应用程序的构建/版本号?
  5. excel函数vloopup使用方法
  6. 关于屏幕分辨率的一些操作
  7. Ubuntu系统---WeChat安装
  8. ======第二章进程管理======
  9. python入门经典代码-【python】编程语言入门经典100例--12
  10. 安卓java其他类改变view_安卓自定义控件(三)实现自定义View
  11. 关 于语义语法的逻辑界定
  12. python爬腾讯视频地址_腾讯视频爬虫
  13. 【DFT】DFT入门介绍
  14. 在Ubuntu中连接Vultr虚拟主机远程桌面
  15. QRCode生成二维码和解析二维码
  16. UI设计中的12个基本动效
  17. 中国工程院谭建荣:人工智能应用得再好,最核心的算法不行,创新能力就不行丨MEET2021
  18. Flume安装及几个入门案例
  19. 阿里巴巴2015研发工程师B笔试卷
  20. 给在校学生的科普文:数字芯片后端工程师的日常

热门文章

  1. Ugui中使用Image完成动态连线
  2. 名帖157 王徽之 行楷《新月帖》
  3. CSS设计美丽之百合花(小作品)
  4. Shell最全大括号{}、中括号[]、小括号()用法实例
  5. word中如何制作三线表
  6. 跨境电商的支付方式有哪些?
  7. 华为防火墙USG5500的配置方法
  8. 兵卒情缘酒新品上市发布会
  9. 腾讯云学生服务器(官网校园计划)
  10. Linux系统如何下载CityScape/KITTI-STEP数据集