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

📄 sd.c

📁 c51单片机+pdiusbd12芯片的假u盘设计
💻 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 + -