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

📄 sd.h

📁 AT45DB161串行flash全协议mega8程序
💻 H
字号:
#ifndef _SD_H_
#define _SD_H_

#define SD_Write		PORTB	//SPI port register
#define SD_READ		        PINB    //Data PIN
#define SD_Direction_REG	DDRB    //Direction register

#define SPI_DI			4	//-->SD_DO_PIN
#define SPI_DO			3	//-->SD_DI_PIN
#define SPI_Clock		5	//-->SD_CLK_PIN
#define SPI_SS		        2	//-->SD_SS_PIN

#define SPIF                    7 
#define UDRE                    5

#define SD_DO_PIN               SD_Read.SPI_DI
#define SD_DI_PIN               SD_Write.SPI_DO
#define SD_CLK_PIN              SD_Write.SPI_Clock
#define SD_CS_PIN               PORTD.5

#define LED                     PORTD.4 
#define COLOR                   PORTD.5
 
#define nop()                   #asm("nop"); //asm nop defined in CVAVR  

extern void SDinit(void);
/*-----------------------------------------------------------
读状态寄存器      操作码0xD7
结束标志:CS管脚置高     该寄存器在忙状态下也可读取,便于判断状态
  Bit 7    Bit 6    Bit 5    Bit 4    Bit 3    Bit 2    Bit 1    Bit 0
RDY/BUSY   COMP       1        0        1        1     PROTECT  PAGE SIZE
-----------------------------------------------------------*/ 
extern unsigned char Status_Register_Read (void);

/*-----------------------------------------------------------
连续读模式1 最高66M    操作码0xE8
格式:操作码+3字节地址码(12页址+9页内地址(512byte))+4个空字节(延时启动内部读操作)
结束标志:CS管脚置高 注意该模式读期间页间转换无标志 无时差 完全连续直到读完这个存储器
由于不能建立太大的缓存,故该模式下,连续读的优势得到限制,可在主函数进行操作实现单字节传输
-----------------------------------------------------------*/ 
extern void Continuous_Array_Read_1 (unsigned char *p,unsigned int pageaddr,unsigned int byteaddr);

/*-----------------------------------------------------------
连续读模式2 最高66M    操作码0x0B
格式:操作码+3字节地址码(12页址+9页内地址(512byte))+1个空字节(延时启动内部读操作)
结束标志:CS管脚置高 注意该模式读期间页间转换无标志 无时差 完全连续
由于不能建立太大的缓存,故该模式下,连续读的优势得到限制,可在主函数进行操作实现单字节传输
-----------------------------------------------------------*/ 
extern void Continuous_Array_Read_2 (unsigned char *p,unsigned int pageaddr,unsigned int byteaddr) ;

/*-----------------------------------------------------------
连续读模式3 最高33M    操作码0x03
格式:操作码+3字节地址码(12页址+9页内地址(512byte))
结束标志:CS管脚置高 注意该模式读期间页间转换无标志 无时差 完全连续
由于不能建立太大的缓存,故该模式下,连续读的优势得到限制,可在主函数进行操作实现单字节传输
-----------------------------------------------------------*/ 
extern void Continuous_Array_Read_3 (unsigned char *p,unsigned int pageaddr,unsigned int byteaddr);  

/*-----------------------------------------------------------
数据读函数     操作码0xD2
格式:操作码+3字节地址码(12页址+9页内地址(512byte))+4个空字节(延时启动内部读操作)
结束标志:CS管脚置高    注意该方式读完一页返回从同一页开始读
缓存大小设置为512字节即工作于每页512字节模式
-----------------------------------------------------------*/ 
extern void Main_Memory_Page_Read (unsigned char *p,unsigned int pageaddr,unsigned int byteaddr) ; 

/*-----------------------------------------------------------
缓存数据读函数     操作码0xD6 0xD4 0xD3 0xD1
格式:操作码+3字节地址码(15无效位+9地址(512byte))
结束标志:CS管脚置高    
-----------------------------------------------------------*/ 
extern void Buffer_Read (unsigned char *p,unsigned int byteaddr,unsigned char rate,unsigned char buffer);  

/*-----------------------------------------------------------
缓存数据写函数     操作码0x84 0x87
格式:操作码+3字节地址码(15无效位+9地址(512byte))
结束标志:CS管脚置高    
-----------------------------------------------------------*/ 
extern void Buffer_write (unsigned char *p,unsigned int byteaddr,unsigned char buffer); 

/*-----------------------------------------------------------
擦除某页将缓存数据写进该页函数     操作码0x83 0x86
格式:操作码+3字节地址码(3无效位+12页地址+9无效位)
结束标志:CS管脚置高   注意该函数调用以后需要一定时间将数据写入芯片,要延时40ms,此时可向另一buffer写
但在8脚封装芯片上没有RDY/BUSY管脚(指示内部操作完成),但可以用软件方法检测状态
-----------------------------------------------------------*/ 
extern void Buffer_to_Main_erase (unsigned int pageaddr,unsigned char buffer) ;  

/*-----------------------------------------------------------
将缓存数据写进该页函数     操作码0x88 0x89
格式:操作码+3字节地址码(3无效位+12页地址+9无效位)
结束标志:CS管脚置高   注意该函数调用之前需要对操作页面进行擦除操作以后需要一定
时间将数据写入芯片,要延时6ms 即本函数要配合擦除函数
-----------------------------------------------------------*/ 
extern void Buffer_to_Main (unsigned int pageaddr,unsigned char buffer);  

/*-----------------------------------------------------------
页擦除函数     操作码0x81
格式:操作码+3字节地址码(3无效位+12页地址+9无效位)
结束标志:CS管脚置高   延时35ms
-----------------------------------------------------------*/ 
extern void Page_Erase (unsigned int pageaddr);  

/*-----------------------------------------------------------
扇区擦除函数   每扇区   操作码0x7C
格式:操作码+3字节地址码(3无效位+9扇区地址+12无效位(适于0a、0b扇区1~15是4扇区地址+17无效位))
结束标志:CS管脚置高   延时5s
-----------------------------------------------------------*/ 
extern void Sector_Erase (unsigned int Sector,unsigned char Sector0);  

/*-----------------------------------------------------------
块擦除函数   每块8页     操作码0x50
格式:操作码+3字节地址码(3无效位+9块地址+12无效位)
结束标志:CS管脚置高   延时100ms
-----------------------------------------------------------*/ 
extern void Block_Erase (unsigned int blockaddr);  

/*-----------------------------------------------------------
全盘擦除函数   每扇区   操作码0xC7、94、80、9A
结束标志:CS管脚置高   延时ns
-----------------------------------------------------------*/ 
extern void Chip_Erase (void);  

/*-----------------------------------------------------------
带缓存写页函数     操作码0x82 0x85
格式:操作码+3字节地址码(12页址+9页内地址(512byte))
结束标志:CS管脚置高   要延时40ms
-----------------------------------------------------------*/ 
extern void Page_Through_Buffer (unsigned char *p,unsigned int pageaddr,unsigned int byteaddr,unsigned char buffer);  

/*-----------------------------------------------------------
页数据读入缓存函数     操作码0x53 0x55
格式:操作码+3字节地址码(12页址+9页内地址(512byte))
结束标志:CS管脚置高   要延时400us
-----------------------------------------------------------*/ 
extern void Page_to_Buffer (unsigned int pageaddr,unsigned char buffer);  

/*-----------------------------------------------------------
软件写保护   操作码0x3D、2A、7F、A9
结束标志:CS管脚置高   延时18s
-----------------------------------------------------------*/ 
extern void Enable_Sector_Protection (void);  

/*-----------------------------------------------------------
解除软件写保护   操作码0x3D、2A、7F、9A
结束标志:CS管脚置高   延时ns
-----------------------------------------------------------*/ 
extern void Disenable_Sector_Protection (void) ; 

/*-----------------------------------------------------------
读取厂商和设备信息   操作码:0x9F
格式:操作码
返回:0x1F (ATMEL) ID信息(2字节)  0x00
-----------------------------------------------------------*/ 
extern void ManufacturerDevice_read (unsigned char *p);

#endif //_SD_H_

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -