sd.c

来自「c51单片机+pdiusbd12芯片的假u盘设计」· C语言 代码 · 共 63 行

C
63
字号
#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 + =
减小字号Ctrl + -
显示快捷键?