📄 sd卡的写操作.c
字号:
unsigned char SD_write_sector(unsigned long address,unsigned char$Burfer)
unsigned char rddata[1],wrdata[1];
unsigned int i;
unsigned char cmd24[]={0x58,0x00,0x00,0x00,0x00,0xff);
//CMD24命令,地址初始化为0
address<<=9; //将扇区地址转化为字节地址
cmd24[1]=((address&0xff000000)>>24);
cmd24[2]=((address&0x00ff0000)>>16);
cmd24[3]=((address&0x0000ff00)>>8);
CS_EN=0; //CS_EN置为低电平,使SPI内核的SS_n不被屏蔽
IOWR_ALTERA_AVALON_PIO_DATA(CS_EN_BASE,CS_EN);
do
{
do
{
rddata[0]_Write_Cmd(cmd24);
//写入CMD24命令并读取返回值
}while(rddata[0]!=0); //当DO上读取到”Ox00”时,结束循环
//写入CMD24命令成功
for(i=0;i<5;i++) //插入若干时钟信号
{
wrdata[0]=0xff;
alt_avalon_spi_command(SPI_BASE,0,1,wrdata,0,NULL,1);
}
DI_EN=0; //DI_EN景为低电平,不屏蔽SPI内核的mosi
IOWR_ALTERA_AVALON-PIO_DATA(DI_EN_BASE,DI_FN);
wrdata[0]=0xfe;
alt_avalon_spi_command(SPI_BASE,0,1,wrdata,0,NULL,1); //写入开始标志字节”0xfe”
alt_avalon_spi_command(SPI_BASE,0,512,Buffer,0,NULL,1); //写入512个字节数据
wrdata[0]=0xff;
alt_avalon_spi_command(SPI_BASE,0,1,wrdata,0,NULL,1);
alt_avalon_spi_command(SPI_BASE,0,1,wrdata,0,NULL,1);
DI_EN=1; //DI_EN置为高电平,屏蔽SPI内核的mosi
IOWR_ALTERA_AVALON_PIO DATA(DI_EN_BASE,DI_EN);
alt_avalon_spi_command(SPI_BASE,0,0,NULL,1,rddata,1);
//从miso上读取返回值
do
{
alt_avalon_spi_command(SPI_BASE,0,0,NULL,1,rddata,1);
//从miso上读取返回值
}while(rddata[0]!=0xff); //判断SD卡忙
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,表示扇区写操作成功
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -