📄 sd.c
字号:
#include <reg52.h>
#include "sd.h"
#include <stdio.h>
#include <intrins.h>
#include "D12_Define.h"
///////全局变量///
//////////////////////////
void delay()
{
_nop_(); _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
}
///////////////////////////////硬件层函数/////////////////////
void Write_SD(uchar idata val) //写一个字节数据
{
uchar idata i;
for(i=0;i<8;i++)
{
SD_DataIn=0;
if(0x80==(val&0x80))
SD_DataIn=1;
SD_CLK=0;
delay();
SD_CLK=1;
val=val<<1;
}
SD_DataIn=1;
}
uchar Read_SD()
{
uchar idata R1=0,i;
for(i=0;i<8;i++)
{
SD_CLK=0;
R1=R1<<1;
R1=R1|SD_DataOut;
SD_CLK=1;
}
return R1;
}
///////////////////////////////硬件层函数/////////////////////
//////////////////////////////D12_函数//////////////////////////
uchar Write_SD_COM(uchar idata com,unsigned long int idata arg) //写SD命令
{
uchar idata i;
//SD_DataOut=1;
SD_CS=0;
// while(!SD_DataOut); //总线忙 等待
Write_SD(0xff); //写八个时钟周期
Write_SD(com|0x40); //写命令字
Write_SD((uchar)(arg>>24)); //arg可能是扇区地址等
Write_SD((uchar)(arg>>16));
Write_SD((uchar)(arg>>8));
Write_SD((uchar)arg);
Write_SD(0x95); //此CRC是CMD0的CRC,之后可以写一个CMD59命令对SPI写命令都免除CRC位
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -