?? at45db161d.h
字號:
/****************************************Copyright (c)**************************************************
**
**
**--------------File Info-------------------------------------------------------------------------------
*/
//#define SPI_CLOCK 5529600 /* 正常通信時,SPI時鐘頻率 frequency (Hz) */
//#define SPI_CLOCK 7372800
/* DataFlash信息結構體定義 */
/* the information structure variable of DataFlash*/
#define AT45DB161Size 2000000 //2162688
typedef struct DataFlash_STRUCT
{
INT8U DataFlash_type;
INT32U block_num; /* 卡中塊的數量 */
INT32U block_len; /* 卡的塊長度(單位:字節) */
INT32U erase_unit; /* 一次可擦除的塊個數 */
INT32U timeout_read; /* 讀塊超時時間(單位: 8 SPI clock) */
INT32U timeout_write; /* 寫塊超時時間(單位: 8 SPI clock) */
INT32U timeout_erase; /* 擦塊超時時間(單位: 8 SPI clock) */
}dataflash_struct;
// defines for all opcodes
// buffer 1 write
#define BUFFER_1_WRITE 0x84
// buffer 2 write
#define BUFFER_2_WRITE 0x87
// buffer 1 read
#define BUFFER_1_READ 0x54
// buffer 2 read
#define BUFFER_2_READ 0x56
// buffer 1 to main memory page program with built-in erase
#define B1_TO_MM_PAGE_PROG_WITH_ERASE 0x83
// buffer 2 to main memory page program with built-in erase
#define B2_TO_MM_PAGE_PROG_WITH_ERASE 0x86
// buffer 1 to main memory page program without built-in erase
#define B1_TO_MM_PAGE_PROG_WITHOUT_ERASE 0x88
// buffer 2 to main memory page program without built-in erase
#define B2_TO_MM_PAGE_PROG_WITHOUT_ERASE 0x89
// main memory page program through buffer 1
#define MM_PAGE_PROG_THROUGH_B1 0x82
// main memory page program through buffer 2
#define MM_PAGE_PROG_THROUGH_B2 0x85
// auto page rewrite through buffer 1
#define AUTO_PAGE_REWRITE_THROUGH_B1 0x58
// auto page rewrite through buffer 2
#define AUTO_PAGE_REWRITE_THROUGH_B2 0x59
// main memory page compare to buffer 1
#define MM_PAGE_TO_B1_COMP 0x60
// main memory page compare to buffer 2
#define MM_PAGE_TO_B2_COMP 0x61
// main memory page to buffer 1 transfer
#define MM_PAGE_TO_B1_XFER 0x53
// main memory page to buffer 2 transfer
#define MM_PAGE_TO_B2_XFER 0x55
// DataFlash status register for reading density, compare status,
// and ready/busy status
#define STATUS_REGISTER 0x57
// main memory page read
#define MAIN_MEMORY_PAGE_READ 0x52
// erase a 528 byte page
#define PAGE_ERASE 0x81
// erase 512 pages
#define BLOCK_ERASE 0x50
/* 100ms 相當的SPI時鐘數(單位 unit: 8 clocks) */
/* 100ms correspond to SPI clock(unit: 8 clocks)*/
#define READ_TIMEOUT_100MS 100 * SPI_CLOCK / 1000 / 8
/* 250ms 相當的SPI時鐘數(單位 unit: 8 clocks) */
/* 250ms correspond to SPI clock(unit: 8 clocks)*/
#define WRITE_TIMEOUT_250MS 250 * SPI_CLOCK / 1000 / 8
extern void SPI_Delay(INT8U value); // 發生SPI時鐘 send SPI clock
/* 設置SPI的時鐘小于400kHZ set the clock of SPI less than 400kHZ */
extern void SPI_Clk400k(void);
/* 設置SPI的clock到最大值 set the clock of SPI to maximum */
extern void SPI_ClkToMax(void);
/* 通過SPI接口發送一個字節 send a byte by SPI interface */
extern void SPI_SendByte(INT8U byte);
/* 從SPI接口接收一個字節 receive a byte from SPI interface */
extern INT8U SPI_RecByte(void);
/* 片選SPI從機 select the SPI slave */
extern void SPI_CS_Assert(void);
/* 不片選SPI從機 not select the SPI slave */
extern void SPI_CS_Deassert(void);
/* 初始化訪問SD卡的硬件初始化 initialize the hardware that access sd card */
extern void DataFlash_HardWareInit(void);
extern unsigned char DataFlash_ReadStatus(void);
extern unsigned char DataFlash_isBusy(void);
extern void Block_Erase(unsigned long Dst);
extern void Block_Program(unsigned char * dat,unsigned int num,unsigned int startpage,unsigned int startaddr);
extern void Block_Read(unsigned char *dat,unsigned int num,unsigned int startpage,unsigned int startaddr);
/* CS 引腳 */ //P1.25
#define SPI_CS (0x01 << 25)
#define SPI_CS_GPIO() PINSEL2 = 0xFFFFFFF0; /* 設置 CS 口為GPIO口 */
#define SPI_CS_OUT() IO1DIR |= SPI_CS; /* 設置 CS 口為輸出口 */
#define SPI_CS_SET() IO1SET |= SPI_CS; /* 置 CS 為高電平 */
#define SPI_CS_CLR() IO1CLR |= SPI_CS; /* 置 CS 為低電平 */
/* 寫保護檢測引腳 */ //P1.26
#define SPI_WP (0x01 << 15)
#define SPI_WP_GPIO() PINSEL2 = 0xFFFFFFF0; /* 設置 WP 口為GPIO口 */
#define SPI_WP_OUT() IO1DIR |= SPI_WP ; /* 設置 WP 口為輸出口 */
//#define SPI_WP_OUT() IODIR &= ~SPI_WP /* 設置 WP 口為輸出口 */
#define SPI_WP_SET() IO1SET |= SPI_WP; /* 置 WP 為高電平 */
#define SPI_WP_CLR() IO1CLR |= SPI_WP; /* 置 WP 為低電平 */
/* RESET引腳 */ //P1.31
#define SPI_RESET 0x80000000//(0x01 << 31)
#define SPI_RESET_GPIO() PINSEL2 = 0xFFFFFFF0; /* 設置 RESET 口為GPIO口 */
#define SPI_RESET_OUT() IO1DIR |= SPI_RESET ; /* 設置 RESET 口為輸出口 */
#define SPI_RESET_SET() IO1SET |= SPI_RESET; /* 置 RESET 為高電平 */
#define SPI_RESET_CLR() IO1CLR |= SPI_RESET; /* 置 RESET 為低電平 */
/* 初始化 IO 口為SPI接口 */
#define SPI_INIT() PINSEL0 &= ~((0x03 << 8) + (0x03 << 10) + (0x03 << 12)); \
PINSEL0 |= (0x01 << 8) + (0x01 << 10) + (0x01 << 12);
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -