OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 9909|回复: 31

SD卡初始化问题u8 SD_WaitReady(void)

[复制链接]

23

主题

74

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
222
金钱
222
注册时间
2012-3-15
在线时间
13 小时
发表于 2012-3-15 11:43:22 | 显示全部楼层 |阅读模式
使用原子的新版SD卡程序移植到stm32f103vc的板子上,在SD卡初始化中,等待卡准备好的函数中,利用串口查看,始终得到0X00,不能得到0xff,换了3种卡都不能得到0xff,移植原来挑卡那版程序初始化没有问题,请大虾帮我分析分析造成的原因吧,不胜感激。
//等待卡准备好
//返回值:0,准备好了;其他,错误代码
u8 SD_WaitReady(void)
{  
 u32 t=0;
 do
 {
  if(SD_SPI_ReadWriteByte(0XFF)==0XFF)return 0;//OK 此处SD_SPI_ReadWriteByte(0XFF)返回的值一直是0x00”
  t++;     
 }while(t<0XFFFFFF);//等待
 return 1;
}
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-3-15 12:39:01 | 显示全部楼层
回复【楼主位】hooddas:
---------------------------------
你是不是SD卡底层驱动有问题?SPI设置.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

23

主题

74

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
222
金钱
222
注册时间
2012-3-15
在线时间
13 小时
 楼主| 发表于 2012-3-15 14:02:21 | 显示全部楼层
回复【2楼】正点原子:

---------------------------------
SPI应该没问题,SPI也是你那里的程序,基本上原封不动的移植,只不过把CS的IO口改了下,f103vc的片选是PA4,其他的都没改变,就是返回0x00
回复 支持 反对

使用道具 举报

23

主题

74

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
222
金钱
222
注册时间
2012-3-15
在线时间
13 小时
 楼主| 发表于 2012-3-15 14:27:12 | 显示全部楼层
这是加上串口的程序
—————————————————————————————————————————————————— 
//等待卡准备好
//返回值:0,准备好了;其他,错误代码
u8 SD_WaitReady(void)
{
 u8 t=0;
 u8 temp;
  delay_ms(5000); 
 do
 {
  temp = SD_SPI_ReadWriteByte(0XFF);
  USART1->DR = temp;
  while((USART1->SR & 0X40) == 0);//等待发送结束
  if(temp==0XFF)return 0;//OK
  t++;     
 }while(t<200);//等待
 return 1;
}
————————————————————————



串口得到的数据。。。。
-----------------------------------------------------------------------------------------
SPI的程序
#include "spi.h"

/********************************************************
函数名称:void SPIx_Init(void)
功能描述:SPI模块的初始化代码,配置成主机模式
全局变量:无
参数说明:无
返回值:  无
说明:SPI1的初始化
*********************************************************/
void SPIx_Init(void)
{
 RCC->APB2ENR|=1<<2;       //PORTA时钟使能  
 RCC->APB2ENR|=1<<12;      //SPI1时钟使能
    
 //这里只针对SPI口初始化
 GPIOA->CRL&=0X000FFFFF;
 GPIOA->CRL|=0XBBB00000;//PA5.6.7复用     
 GPIOA->ODR|=0X7<<5;    //PA5.6.7上拉
  
 SPI1->CR1|=0<<10;//全双工模式 
 SPI1->CR1|=1<<9; //软件nss管理
 SPI1->CR1|=1<<8; 

 SPI1->CR1|=1<<2; //SPI主机
 SPI1->CR1|=0<<11;//8bit数据格式 
 SPI1->CR1|=1<<1; //空闲模式下SCK为1 CPOL=1
 SPI1->CR1|=1<<0; //数据采样从第二个时间边沿开始,CPHA=1 
 SPI1->CR1|=7<<3; //Fsck=Fcpu/256
 SPI1->CR1|=0<<7; //MSBfirst  
 SPI1->CR1|=1<<6; //SPI设备使能
 SPIx_ReadWriteByte(0xff);//启动传输    
}  

/********************************************************
函数名称:void SPIx_SetSpeed(u8 SpeedSet)
功能描述:SPI 速度设置函数
全局变量:无
参数说明:SpeedSet
返回值:  无
说明:
SpeedSet:
SPI_SPEED_2   2分频   (SPI 36M@sys 72M)
SPI_SPEED_8   8分频   (SPI 9M@sys 72M)
SPI_SPEED_16  16分频  (SPI 4.5M@sys 72M)
SPI_SPEED_256 256分频 (SPI 281.25K@sys 72M)
*********************************************************/
void SPIx_SetSpeed(u8 SpeedSet)
{
 SPI1->CR1&=0XFFC7;//Fsck=Fcpu/256
 switch(SpeedSet)
 {
  case SPI_SPEED_2://二分频
   SPI1->CR1|=0<<3;//Fsck=Fpclk/2=36Mhz
   break;
  case SPI_SPEED_4://四分频
   SPI1->CR1|=1<<3;//Fsck=Fpclk/4=18Mhz
   break;
  case SPI_SPEED_8://八分频
   SPI1->CR1|=2<<3;//Fsck=Fpclk/8=9Mhz
   break;
  case SPI_SPEED_16://十六分频
   SPI1->CR1|=3<<3;//Fsck=Fpclk/16=4.5Mhz
   break;
  case SPI_SPEED_256://256分频
   SPI1->CR1|=7<<3;//Fsck=Fpclk/16=281.25Khz
   break;
 }  
 SPI1->CR1|=1<<6; //SPI设备使能    
}

/********************************************************
函数名称:u8 SPIx_ReadWriteByte(u8 TxData)
功能描述:SPIx 读写一个字节
全局变量:无
参数说明:TxData:要写入的字节
返回值:  读取到的字节
说明:
*********************************************************/
u8 SPIx_ReadWriteByte(u8 TxData)
{  
 while((SPI1->SR&1<<1)==0);   
 SPI1->DR=TxData;     //发送一个byte  
 while((SPI1->SR&1<<0)==0);          
 return SPI1->DR;          //返回收到的数据       
}
----------------------------------------
SPI和VS1003可以通讯,应该是没问题


 

回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-3-15 15:54:30 | 显示全部楼层
PA4的初始化在哪里?
我没看到.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

23

主题

74

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
222
金钱
222
注册时间
2012-3-15
在线时间
13 小时
 楼主| 发表于 2012-3-15 16:31:20 | 显示全部楼层

回复【5楼】 正点原子 :

---------------------------------
这个是定义了SD片选
//这部分应根据具体的连线来修改!
//Mini STM32使用的是PA4作为SD卡的CS脚.
#define SD_CS  PAout(4) //SD卡片选引脚 
-----------------------------------
这个是初始化片选IO口的程序
//SPI硬件层初始化
void SD_SPI_Init(void)
{
     //设置硬件上与SD卡相关联的控制引脚输出
 //避免NRF24L01/W25X16等的影响
 RCC->APB2ENR|=1<<2;       //PORTA时钟使能
 GPIOA->CRL&=0XFFF0FFFF;
 GPIOA->CRL|=0X00030000;//PA2.3.4 推挽     
 GPIOA->ODR|=0X7<<2;    //PA2.3.4上拉
 SPIx_Init();
  SD_SPI_SpeedLow();//设置到低速模式 
 SD_CS=1;
}
-------------------------------------------------------------
程序在执行SD初始化时到进入r1=SD_SendCmd(CMD0,0,0x95);//进入IDLE状态最后进入到上面的等待卡准备好的函数时 返回的0X00;

//初始化SD卡
//返回值:0,正常.
//   其他,不正常.
u8 SD_Initialize(void)
{
    u8 r1;      // 存放SD卡的返回值
    u16 retry;  // 用来进行超时计数
    u8 buf[4]; 
 u16 i;

 SD_SPI_Init();  //初始化IO
  SD_SPI_SpeedLow(); //设置到低速模式
    //for(i=0;i<0xf00;i++);//纯延时,等待SD卡上电完成  
 for(i=0;i<10;i++)SD_SPI_ReadWriteByte(0XFF);//发送最少74个脉冲
 retry=20;
 do
 {
  r1=SD_SendCmd(CMD0,0,0x95);//进入IDLE状态
 }while((r1!=0X01) && retry--);
  SD_Type=0;//默认无卡
--------------------------------------------------------------------------
在主函数里对片选口进行测试,用万用表量,每个2秒高低电平会有变化,正常。
int main(void)
{
 u8 temp;
 stm32_init();//stm32初始化
 hardware_init();//外围器件初始化
 while(1)
 {
  delay_ms(1000);
  SD_CS = ~SD_CS;
  delay_ms(1000);
--------------------------------------------------------------------------------



SPI的初始化完全移植开发板的程序,用金士顿 adata sandisk三个牌子的SD卡 一样的现象,实在是想不明白了

回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-3-15 17:15:18 | 显示全部楼层
 SD_SPI_SpeedLow();//设置到低速模式  
是设置到多少?
SPI1的频率为SPI2的两倍哦.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

23

主题

74

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
222
金钱
222
注册时间
2012-3-15
在线时间
13 小时
 楼主| 发表于 2012-3-15 17:24:48 | 显示全部楼层
回复【7楼】正点原子:

---------------------------------
case SPI_SPEED_256://256分频
SPI1->CR1|=7<<3;//Fsck=Fpclk/16=281.25Khz
break;
-------------------------------------------------------------
//SD卡初始化的时候,需要低速
void SD_SPI_SpeedLow(void)
{
  SPIx_SetSpeed(SPI_SPEED_256);//设置到低速模式
}
应该是这个不知道 速度是否可以
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-3-15 18:09:04 | 显示全部楼层
没问题.
回复 支持 反对

使用道具 举报

23

主题

74

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
222
金钱
222
注册时间
2012-3-15
在线时间
13 小时
 楼主| 发表于 2012-3-15 18:15:21 | 显示全部楼层
 
回复 支持 反对

使用道具 举报

23

主题

74

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
222
金钱
222
注册时间
2012-3-15
在线时间
13 小时
 楼主| 发表于 2012-3-15 18:36:12 | 显示全部楼层
还是不行,完全的移植,会是哪里问题呢
回复 支持 反对

使用道具 举报

23

主题

74

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
222
金钱
222
注册时间
2012-3-15
在线时间
13 小时
 楼主| 发表于 2012-3-15 18:39:01 | 显示全部楼层
//选择sd卡,并且等待卡准备OK
//返回值:0,成功;1,失败;
u8 SD_Select(void)
{
SD_CS=0;
if(SD_WaitReady()==0)return 0;//等待成功
SD_DisSelect();
return 1;//等待失败
}
原子大侠 这个函数是什么意思呢?没搞明白
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-3-15 21:07:54 | 显示全部楼层
 选择sd卡,并且等待卡准备OK 
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

23

主题

74

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
222
金钱
222
注册时间
2012-3-15
在线时间
13 小时
 楼主| 发表于 2012-3-16 11:31:22 | 显示全部楼层
还是这段程序,用的开发板,插入SD卡和不插入SD卡SD_SPI_ReadWriteByte(0XFF);返回的数据都是0xff,并没有任何变化

 //等待卡准备好
//返回值:0,准备好了;其他,错误代码
u8 SD_WaitReady(void)
{  
 u32 t=0;
 u8 temp;
 do
 {
  temp = SD_SPI_ReadWriteByte(0XFF);
  USART1->DR = temp;
  while((USART1->SR & 0X40) == 0);//等待发送结束
  if(temp==0XFF)return 0;//OK
  t++;     
 }while(t<0XFFFFFF);//等待
 return 1;
}
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-3-16 12:08:17 | 显示全部楼层
回复【14楼】hooddas:
---------------------------------
这个要看前面执行的是哪个指令吧.不是所有的都返回0X00.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

23

主题

74

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
222
金钱
222
注册时间
2012-3-15
在线时间
13 小时
 楼主| 发表于 2012-3-16 12:56:45 | 显示全部楼层
回复【15楼】正点原子:

---------------------------------
没有执行哪个指令,还是在SD卡初始化之前发送的SD_SPI_ReadWriteByte(0XFF);
回复 支持 反对

使用道具 举报

23

主题

74

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
222
金钱
222
注册时间
2012-3-15
在线时间
13 小时
 楼主| 发表于 2012-3-16 13:08:51 | 显示全部楼层
回复【16楼】hooddas:

---------------------------------
也就是说,在SD卡还没有初始化的时候,我将SD卡的片选拉低,然后,向SPI发送一个字节的0xff,SPI应该收到的是0xff还是0x00.
回复 支持 反对

使用道具 举报

23

主题

74

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
222
金钱
222
注册时间
2012-3-15
在线时间
13 小时
 楼主| 发表于 2012-3-16 13:35:48 | 显示全部楼层
找到原因了,我的板子的SPI总线上一共有两个器件,一个SD卡一个VS1003,我现在把VS1003卸下来,用手按在VS1003的焊盘上,SPI返回的数据是0xFF,当我把手拿开以后SPI返回的数据就是0X00,就是向SPI写一个字节的0XFF,返回的数据竟然取决于我的手,什么原因导致的还不太明白。
回复 支持 反对

使用道具 举报

36

主题

1105

帖子

5

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2201
金钱
2201
注册时间
2012-2-8
在线时间
35 小时
发表于 2012-3-16 13:41:14 | 显示全部楼层
回复【18楼】hooddas:
---------------------------------
程序里没有把VS1003的片先信号没有disable掉吗?
https://github.com/roxma
回复 支持 反对

使用道具 举报

23

主题

74

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
222
金钱
222
注册时间
2012-3-15
在线时间
13 小时
 楼主| 发表于 2012-3-16 13:55:35 | 显示全部楼层

 回复【19楼】 Pony279 :

---------------------------------
现在的程序里面没有VS1003的程序,在发送if(SD_SPI_ReadWriteByte(0XFF)==0XFF)这个之前SD卡还没有初始化,VS1003也没有初始化,也就是SPI发送的数据应该没有器件应答吧
u8 SPIx_ReadWriteByte(u8 TxData)
{         
 while((SPI1->SR&1<<1)==0);   
 SPI1->DR=TxData;     //发送一个byte  
 while((SPI1->SR&1<<0)==0);          
 return SPI1->DR;          //返回收到的数据       
}
下面是程序运行的流程:
返回的 SPI1->DR这个时候应该是什么呢,
//初始化SD卡
//返回值:0,正常.
//   其他,不正常.
u8 SD_Initialize(void)
{
    u8 r1;      // 存放SD卡的返回值
    u16 retry;  // 用来进行超时计数
    u8 buf[4]; 
 u16 i;

 SD_SPI_Init();  //初始化IO
  SD_SPI_SpeedLow(); //设置到低速模式
    //for(i=0;i<0xf00;i++);//纯延时,等待SD卡上电完成  
 for(i=0;i<10;i++)SD_SPI_ReadWriteByte(0XFF);//发送最少74个脉冲
 retry=20;
 do
 {
  r1=SD_SendCmd(CMD0,0,0x95);//进入IDLE状态

//向SD卡发送一个命令
//输入: u8 cmd   命令
//      u32 arg  命令参数
//      u8 crc   crc校验值   
//返回值:SD卡返回的响应                
u8 SD_SendCmd(u8 cmd, u32 arg, u8 crc)
{
    u8 r1; 
 u8 Retry=0;
 SD_DisSelect();//取消上次片选
 if(SD_Select())return 0XFF;//片选失效
//选择sd卡,并且等待卡准备OK
//返回值:0,成功;1,失败;
u8 SD_Select(void)
{
 SD_CS=0;
 if(SD_WaitReady()==0)return 0;//等待成功
//等待卡准备好
//返回值:0,准备好了;其他,错误代码
u8 SD_WaitReady(void)
{  
 u32 t=0;
 do
 {
  if(SD_SPI_ReadWriteByte(0XFF)==0XFF)return 0;//OK
u8 SD_SPI_ReadWriteByte(u8 data)
{
 return SPIx_ReadWriteByte(data);
}
//SPIx 读写一个字节
//TxData:要写入的字节
//返回值:读取到的字节
u8 SPIx_ReadWriteByte(u8 TxData)
{         
 while((SPI1->SR&1<<1)==0);   
 SPI1->DR=TxData;     //发送一个byte  
 while((SPI1->SR&1<<0)==0);          
 return SPI1->DR;          //返回收到的数据       
}
最后到 SPI1->DR返回的数据不太明白这里发送的0XFF 是怎么确定SD卡准备好的

回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-3-16 21:54:25 | 显示全部楼层
回复【20楼】hooddas:
---------------------------------
发送0XFF,应该只是让MOSI维持高.
具体的是否是有意义的指令,还得啃SD卡的白皮书了.
对了,你的VS1003和SD卡共用SPI,你要先把VS1003的片选信号控制为非选中状态.XCS,XDCS都应该未选中.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

36

主题

1105

帖子

5

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2201
金钱
2201
注册时间
2012-2-8
在线时间
35 小时
发表于 2012-3-16 23:04:18 | 显示全部楼层
同楼上,操作SD卡的时候取消VS1003的片选,
否则, VS1003和SD共用MISO,两个相连的输出脚同时处于活跃状态的话,后果比较严重。

"最后到 SPI1->DR返回的数据不太明白这里发送的0XFF 是怎么确定SD卡准备好的"

发送0xff只是为了让SPI的时钟脚跳几下,好从MISO脚读数据,0xff是无效的数据,MOSI是在维持高电平。
https://github.com/roxma
回复 支持 反对

使用道具 举报

23

主题

74

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
222
金钱
222
注册时间
2012-3-15
在线时间
13 小时
 楼主| 发表于 2012-3-17 13:51:45 | 显示全部楼层
谢谢原子和pony279,原因找到了,是VS1003的片选设置错误了,还有就是没有外接上拉电阻的原因,如果没有上拉电阻得到的值仍然是0X00,那是不是其实在等待卡准备好的时候,无所谓返回的数据是0x00或者0xff
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-3-17 16:02:13 | 显示全部楼层
呵呵,这种问题,要多注意.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

13

主题

38

帖子

0

精华

初级会员

Rank: 2

积分
110
金钱
110
注册时间
2014-7-24
在线时间
0 小时
发表于 2014-8-14 16:19:49 | 显示全部楼层
回复【22楼】Pony279:
---------------------------------
请问,如果发送的是0x00那时什么意思呢?
回复 支持 反对

使用道具 举报

36

主题

1105

帖子

5

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2201
金钱
2201
注册时间
2012-2-8
在线时间
35 小时
发表于 2014-8-16 00:59:40 | 显示全部楼层
 回复【25楼】 ZHUZHU :
---------------------------------
好久没做单片机啦,找其他人问问,我忘得差不多了
https://github.com/roxma
回复 支持 反对

使用道具 举报

13

主题

38

帖子

0

精华

初级会员

Rank: 2

积分
110
金钱
110
注册时间
2014-7-24
在线时间
0 小时
发表于 2014-8-16 15:41:48 | 显示全部楼层
回复【26楼】Pony279:
---------------------------------
恩恩~还是谢谢了
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手上路

积分
24
金钱
24
注册时间
2014-1-20
在线时间
0 小时
发表于 2014-12-30 11:45:01 | 显示全部楼层
我遇到的情况与这个有点类似,也是SD_WaitReady占用时间太多。
我做数据采集,以20ms间隔往卡里写一扇区数据,从逻辑分析仪抓的波形看,有数据没有来得及写入而丢失。

后来找到,正常扇区写入只有两三个毫秒,但在写入有的扇区的时候,
停在SD_WaitReady轮询的时间占用有的三四十毫秒,有的一两百毫秒。

导致后面数据来不及写入而丢失。
回复 支持 反对

使用道具 举报

36

主题

94

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
275
金钱
275
注册时间
2015-3-29
在线时间
3 小时
发表于 2015-8-7 10:45:27 | 显示全部楼层
SD_SPI_ReadWriteByte(0XFF)==0XFF;为什么发送0xFF如果接收到0xFF就认为卡准备好了?如果没有卡会不会也是接收到0xFF?
回复 支持 反对

使用道具 举报

13

主题

31

帖子

0

精华

新手入门

积分
16
金钱
16
注册时间
2013-4-28
在线时间
6 小时
发表于 2015-8-11 10:00:47 | 显示全部楼层
我是用SPI驱动MicroSD,金士顿8G卡各种正常,但是换了一个三星的4G卡就会遇到跟楼主一样的问题,如果用手按住SD卡座,初始化就会通过,如果重新插拔又会出现相同的问题,不知道为何?
qq:839948230
回复 支持 反对

使用道具 举报

13

主题

31

帖子

0

精华

新手入门

积分
16
金钱
16
注册时间
2013-4-28
在线时间
6 小时
发表于 2015-8-11 15:10:42 | 显示全部楼层
回复【30楼】毛小毛:
---------------------------------
在MISO引脚加上拉电阻后OK
qq:839948230
回复 支持 反对

使用道具 举报

2

主题

91

帖子

0

精华

高级会员

Rank: 4

积分
509
金钱
509
注册时间
2016-11-16
在线时间
111 小时
发表于 2017-10-23 13:36:07 | 显示全部楼层
MISO引脚用上拉输入代替上拉电阻可以吗?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-11 06:30

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表