初级会员

- 积分
- 190
- 金钱
- 190
- 注册时间
- 2012-7-17
- 在线时间
- 0 小时
|
u8 SD_Idle_Sta(void)
{
u16 i;
u8 retry;
for(i=0;i<0xf00;i++);//纯延时,等待SD卡上电完成
for(i=0;i<10;i++)SPIx_ReadWriteByte(0xFF);
//-----------------SD 卡复位到idle 开始-----------------
// 循环连续发送 CMD0 ,直到SD卡返回0x01,进入IDLE 状态
// 超时则直接退出
retry = 0;
do
{
// 发送 CMD0 ,让 SD卡进入IDLE 状态
i = SD_SendCommand(CMD0, 0, 0x95);
retry++;
}while((i!=0x01)&&(retry<200));
// 跳出循环后,检查原因:初始化成功?or 重试超时?
if(retry==200)return 1; //失败
return 0;//成功
}
// 初始化SD卡
// 如果成功返回, 则会自动设置SPI 速度为18Mhz
// 返回值:0 :NO_ERR
// 1 :TIME_OUT
// 99 :NO_CARD
u8 SD_Init(void)
{
u8 r1; // 存放 SD卡的返回值
u16 retry; // 用来进行超时计数
u8 buff[6];
// 设置硬件上与 SD卡相关联的控制引脚输出
//避免NRF24L01/W25X16 等的影响
RCC->APB2ENR|=1<<2; //PORTA 时钟使能
GPIOA->CRL&=0XFFF000FF;
GPIOA->CRL|=0X00033300;//PA2.3.4 推挽
GPIOA->ODR|=0X7<<2; //PA2.3.4 上拉
SPIx_Init();
SPIx_SetSpeed(SPI_SPEED_256);// 设置到低速模式
SD_CS=1;
if(SD_Idle_Sta()) return 1;//超时返回1 设置到id le 模式失败
。。。。
}
在向SD卡SD_SendCommand(CMD0, 0, 0x95); 没有看到有拉低片选的代码SD_CS=0,没拉低片选也可以对SD卡进行操作码? |
|