📄 sst_spi_w25x.lst
字号:
C51 COMPILER V7.50 SST_SPI_W25X 01/12/2009 23:18:17 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE SST_SPI_W25X
OBJECT MODULE PLACED IN SST_SPI_W25X.OBJ
COMPILER INVOKED BY: D:\Program Files\Keil750\C51\BIN\C51.EXE SST_SPI_W25X.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /****************************************************************************/
2
3 /****************************************************************************/
4 #include <SST89x5xxRD2.H>
5 #include <W25X.H>
6 #include <intrins.h>
7
8 #define SST_SPI
9
10 extern uint8 upper_128[16];
11 extern uint8 tx_buff[16];
12 //=================================================================================================
13 void delay_nms(uchar i)
14 { uchar j;
15 1 i=i*2;
16 1 for(;i>0;i--) { j = 246; while(--j); }
17 1 }
18 void delay(uchar tt)
19 { while(tt--);}
20 //=================================================================================================
21 //SPI_Read_StatusReg Reads the status register of the serial flash
22 //SPI_Write_StatusReg Performs a write to the status register
23 //SPI_Write_Enable Write enables the serial flash
24 //SPI_Write_Disable Write disables the serial flash
25 //SPI_Read_ID1 Reads the device ID using the instruction 0xAB
26 //SPI_Read_ID2 Reads the manufacturer ID and device ID with 0x90
27 //SPI_Read_ID3() Reads the JedecDevice ID
28 //SPI_Read_Byte Reads one byte from the serial flash and returns byte(max of 20 MHz CLK frequency)
29 //SPI_Read_nBytes Reads multiple bytes(max of 20 MHz CLK frequency)
30 //SPI_FastRead_Byte Reads one byte from the serial flash and returns byte(max of 33 MHz CLK frequency)
31 //SPI_FastRead_nBytes Reads multiple bytes(max of 33 MHz CLK frequency)
32 //SPI_Write_Byte Program one byte to the serial flash
33 //SPI_Write_nBytes Program n bytes to the serial flash, n<=256
34 //SPI_Erase_Chip Erases entire serial flash
35 //SPI_Erase_Sector Erases one sector (64 KB) of the serial flash
36 //SPI_Wait_Busy Polls status register until busy bit is low
37 //=================================================================================================
38 uchar SPI_Read_StatusReg()
39 { uchar byte = 0;
40 1 W25X_CS = 0; // enable device
41 1 SPI_Send_Byte(W25X_ReadStatusReg); // send Read Status Register command
42 1 byte = SPI_Get_Byte(); // receive byte
43 1 W25X_CS = 1; // disable device
44 1 return byte;
45 1 }
46 void SPI_Write_StatusReg(byte)
47 { W25X_CS = 0; // enable device
48 1 SPI_Send_Byte(W25X_WriteStatusReg); // select write to status register
49 1 SPI_Send_Byte(byte); // data that will change the status(only bits 2,3,7 can be written)
50 1 W25X_CS = 1; // disable the device
51 1 }
52 void SPI_Write_Enable()
53 { W25X_CS = 0; // enable device
54 1 SPI_Send_Byte(W25X_WriteEnable); // send W25X_Write_Enable command
55 1 W25X_CS = 1; // disable device
C51 COMPILER V7.50 SST_SPI_W25X 01/12/2009 23:18:17 PAGE 2
56 1 }
57 void SPI_Write_Disable()
58 { W25X_CS = 0; // enable device
59 1 SPI_Send_Byte(W25X_WriteDisable); // send W25X_WriteW25X_DIsable command
60 1 W25X_CS = 1; // disable device
61 1 }
62 uchar SPI_Read_ID1()
63 { uchar byte;
64 1 W25X_CS = 0; // enable device
65 1 SPI_Send_Byte(W25X_DeviceID); // send read device ID command (ABh)
66 1 SPI_Send_Byte(0); // send address
67 1 SPI_Send_Byte(0); // send address
68 1 SPI_Send_Byte(0); // send 3_Dummy address
69 1 byte = SPI_Get_Byte(); // receive Device ID byte
70 1 W25X_CS = 1; // disable device
71 1 delay(4); // remain CS high for tRES2 = 1.8uS
72 1 return byte;
73 1 }
74 uint SPI_Read_ID2(uchar ID_Addr)
75 { uint IData16;
76 1 W25X_CS = 0; // enable device
77 1 SPI_Send_Byte(W25X_ManufactDeviceID); // send read ID command (90h)
78 1 SPI_Send_Byte(0x00); // send address
79 1 SPI_Send_Byte(0x00); // send address
80 1 SPI_Send_Byte(ID_Addr); // send W25Pxx selectable ID address 00H or 01H
81 1 IData16 = SPI_Get_Byte()<<8; // receive Manufature or Device ID byte
82 1 IData16 |= SPI_Get_Byte(); // receive Device or Manufacture ID byte
83 1 W25X_CS = 1; // disable device
84 1 return IData16;
85 1 }
86 uint SPI_Read_ID3()
87 { uint IData16;
88 1 W25X_CS = 0; // enable device
89 1 SPI_Send_Byte(W25X_JedecDeviceID); // send read ID command (9Fh)
90 1 IData16 = SPI_Get_Byte()<<8; // receive Manufature or Device ID byte
91 1 IData16 |= SPI_Get_Byte(); // receive Device or Manufacture ID byte
92 1 tx_buff[2] = SPI_Get_Byte();
93 1 W25X_CS = 1; // disable device
94 1 return IData16;
95 1 }
96 uchar SPI_Read_Byte(uint32 Dst_Addr)
97 { uchar byte = 0;
98 1 W25X_CS = 0; // enable device
99 1 SPI_Send_Byte(W25X_ReadData); // read command
100 1 SPI_Send_Byte((uchar)((Dst_Addr & 0xFFFFFF) >> 16));// send 3 address bytes
101 1 SPI_Send_Byte((uchar)((Dst_Addr & 0xFFFF) >> 8));
102 1 SPI_Send_Byte((uchar)(Dst_Addr & 0xFF));
103 1 byte = SPI_Get_Byte();
104 1 W25X_CS = 1; // disable device
105 1 return byte; // return one byte read
106 1 }
107 void SPI_Read_nBytes(uint32 Dst_Addr, uchar nBytes_128)
108 { uint32 i = 0;
109 1 W25X_CS = 0; // enable device
110 1 SPI_Send_Byte(W25X_ReadData); // read command
111 1 SPI_Send_Byte(((Dst_Addr & 0xFFFFFF) >> 16)); // send 3 address bytes
112 1 SPI_Send_Byte(((Dst_Addr & 0xFFFF) >> 8));
113 1 SPI_Send_Byte(Dst_Addr & 0xFF);
114 1 for (i = 0; i < nBytes_128; i++) // read until no_bytes is reached
115 1 upper_128[i] = SPI_Get_Byte(); // receive byte and store at address 80H - FFH
116 1 W25X_CS = 1; // disable device
117 1 }
C51 COMPILER V7.50 SST_SPI_W25X 01/12/2009 23:18:17 PAGE 3
118 uchar SPI_FastRead_Byte(uint32 Dst_Addr)
119 { uchar byte = 0;
120 1 W25X_CS = 0; // enable device
121 1 SPI_Send_Byte(W25X_FastReadData); // fast read command
122 1 SPI_Send_Byte(((Dst_Addr & 0xFFFFFF) >> 16)); // send 3 address bytes
123 1 SPI_Send_Byte(((Dst_Addr & 0xFFFF) >> 8));
124 1 SPI_Send_Byte(Dst_Addr & 0xFF);
125 1 SPI_Send_Byte(0xFF); // dummy byte
126 1 byte = SPI_Get_Byte();
127 1 W25X_CS = 1; // disable device
128 1 return byte; // return one byte read
129 1 }
130 void SPI_FastRead_nBytes(uint32 Dst_Addr, uchar nBytes_128)
131 { uchar i = 0;
132 1 W25X_CS = 0; // enable device
133 1 SPI_Send_Byte(W25X_FastReadData); // read command
134 1 SPI_Send_Byte(((Dst_Addr & 0xFFFFFF) >> 16)); // send 3 address bytes
135 1 SPI_Send_Byte(((Dst_Addr & 0xFFFF) >> 8));
136 1 SPI_Send_Byte(Dst_Addr & 0xFF);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -