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