?? 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 + -