⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sd卡的复位操作.c

📁 清华大学Altera FPGA工程师成长手册(光盘视频)
💻 C
字号:
unsigned char SD_Reset()    //SD卡复位函数,进入SPI模式
{
unslgned Char i;
unsigned char rddata[1],wrdata[1];
unsigned char cmd0[]=(0x40,0x00,0x00,0x00,0x00,0x95);
CS_EN=1;    		//CS_EN置为高电平,屏蔽SPI内核的SS_n
IOWR ALTERA_AVALON_PIO_DATA(CS_EN_BASE,CS_EN);
DI_EN=0;    		//DI_EN置为低电平,使SPI内核的mosi不被屏蔽
IOWR_ALTERA_ALON_PIO_DATA(DI_EN_BASE,DI_EN);
for(i=0;i<0x10;i++)    	//复位时先发送最少74个时钟,发送一个字节需要
    					//8个时钟,这里发送128个时钟
{
wrdata[0]=0xff;   	 	//使mosi端口为高电平
alt_avalon_spi_command(SPI_BASE,0,1,wrdata,0,NULL,0);

    					//发送一个字节的数据
IOWR_ALTERA_AVALON_PIO_DATA(CS EN_BASE,CS_EN);
do
  {
    rddata[0]_Write_Cmd(cmd0);//发送CMD0,并读取返回值
    }while(rddata[0]!=0x01);    	//当返回值=l时,表示CMDO发送成功
CS_EN =1;    				//CS_EN置为高电平,屏蔽SPI内核的SS_n
IOWR_ALTERA_AVALON_PIO_DATA(CS_EN_BASE,CS_EN);
wrdata[0]=0xff;
alt_avalon spi_command(SPI_BASE,0,1,wrdata,0,NULL,0);
    							//发送8个时钟
return 0;    					//返回0,表示复位操作成功
}
unsigned char Write_Cmd(unsigned char cmd)
    							//发送命令并读取返回值的函数
{
  unsigned char rddata[1],time=0;
    do
    {
    time=0;
    DI_EN=0;    				//DI_EN置为低电平,使SPI内核的mosi不被屏蔽
    IOWR_ALTERA_AVALONJIOJ_ATA(DI_EN_BASE,DI EN);
    alt avalon_spi_command(SPI_BASE,0,6,cmd,0,NULL,1);
    							//发送6个字节的CMD命令
    DI_EN=1;    				//DI__EN置为高电平,屏蔽SPI内核的mosi
    IOWR_ALTERA_AVALON_PIO_DATA(DI_EN_BASE,DI_EN);
    do
    {
    alt_avalon_spi_command(SPI_BASE,0,0,NULL,1,rddata,1);
    							//读取一个字节的数据
time++;
}while(rddata[0]==0xff&&(time<50));//如果读到的不是0xff或超时,跳出循环
  }while(rddata[0]==0xff);		//如果读到的不是0xff,跳出循环
return(rddata[0]);				//返回读取的一个字节数据
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -