📄 nx25p40.lst
字号:
C51 COMPILER V7.50 NX25P40 11/16/2007 08:30:23 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE NX25P40
OBJECT MODULE PLACED IN nx25p40.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE nx25p40.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include "Header.h"
2 /************************************************************************************
3 * File : nx25p40.c
4 * Author : 洪运富 ,hongyunfu@sohu.com
5 * description: nx25p40/80/160驱动程序
6 * Date:2005-8-4
7 *************************************************************************************
8 */
9 #define _FLASH_C
10
11 sbit CS = P1^4; /* w25p40 cs,0 active*/
12 sbit SO = P1^5; /*SPI flash data out pin*/
13 sbit SI = P1^6; /*SPI flash data in pin*/
14 sbit SK = P1^7;
15
16 uchar bdata sbyte;
17 sbit s0=sbyte^0;
18 sbit s1=sbyte^1;
19 sbit s2=sbyte^2;
20 sbit s3=sbyte^3;
21 sbit s4=sbyte^4;
22 sbit s5=sbyte^5;
23 sbit s6=sbyte^6;
24 sbit s7=sbyte^7;
25
26
27 /*读取8bit数据*/
28 uchar Read8(void)
29 {
30 1 SK=1;SK=0;s7 = SO;
31 1 SK=1;SK=0;s6 = SO;
32 1 SK=1;SK=0;s5 = SO;
33 1 SK=1;SK=0;s4 = SO;
34 1 SK=1;SK=0;s3 = SO;
35 1 SK=1;SK=0;s2 = SO;
36 1 SK=1;SK=0;s1 = SO;
37 1 SK=1;SK=0;s0 = SO;
38 1 return(sbyte);
39 1 }
40
41 /*向flash中写入一个byte数据*/
42 void Write8(uchar cData)
43 {
44 1 sbyte = cData;
45 1 SI = s7; SK=0;SK=1;
46 1 SI = s6; SK=0;SK=1;
47 1 SI = s5; SK=0;SK=1;
48 1 SI = s4; SK=0;SK=1;
49 1 SI = s3; SK=0;SK=1;
50 1 SI = s2; SK=0;SK=1;
51 1 SI = s1; SK=0;SK=1;
52 1 SI = s0; SK=0;SK=1;
53 1 }
54
55 /*读状态寄存器*/
C51 COMPILER V7.50 NX25P40 11/16/2007 08:30:23 PAGE 2
56 uchar ReadSR(void)
57 {
58 1 uchar cData;
59 1 CS=0;
60 1 Write8(RDSR);
61 1 cData=Read8();
62 1 CS=1;
63 1 return cData;
64 1 }
65 /*
66 ***********************************************************************
67 write status register
68 cData:传递过来写入寄存器的值
69 功能:可设置flash的保护区域扇区
70 for:NX25P40
71 state register bit
72 7 6 5 4 3 2 1 0
73 BP2 BP1 BP0
74 000 none of the flash sector is protected
75 001 保护第七扇区数据写操作,只读upper 1/8
76 010 upper 1/4
77 011 upper 1/2
78 1xx all
79 bit7: in conjunction with the WP pin, 0 factory default
80 只有 7,4,3,2四个bit可写,其它位对寄存器操作不改变
81 cData:000,001,00 0x04 第七扇区写保护
82 cData:000,000,00 0x00 全部可写
83 ***********************************************************************
84 */
85 void WriteSR(uchar cData)
86 {
87 1 while((ReadSR()&0x01)==1)
88 1 {;}
89 1 CS=0;
90 1 Write8(WREN);
91 1 CS=1;
92 1 CS=0;
93 1 Write8(WRSR);
94 1 Write8(cData);
95 1 CS=1;
96 1 }
97
98 /*
99 ***********************************************************************
100 写入数据操作
101 cData:传递过来需要写入的数据地址,指针变量
102 Address:写入地址
103 N:写入字节个数
104 Return:无
105 Author:洪运富 hongyunfu@sohu.com
106 Date:2005-8-4
107 ***********************************************************************
108 */
109 void Write(uchar xdata *cData, uchar xdata *cAddress, uchar N)
110 {
111 1 uchar i;
112 1 while((ReadSR()&0x01)==1)
113 1 {;}
114 1 CS=0;
115 1 Write8(WREN);
116 1 CS=1;
117 1 CS=0;
C51 COMPILER V7.50 NX25P40 11/16/2007 08:30:23 PAGE 3
118 1 Write8(PAGEPRO);
119 1 Write8(*(cAddress+2));
120 1 Write8(*(cAddress+1));
121 1 Write8(*cAddress);
122 1 for(i=0;i<N;i++)
123 1 Write8(*(cData+i));
124 1 SK=0;
125 1 CS=1;
126 1 }
127 /*
128 ***********************************************************************
129 读取数据操作
130 cData:存储读取数据指针地址
131 Address:读取起始地址,指针变量
132 N:读取字节个数
133 Return:无
134 Author:洪运富
135 Date:2005-8-4
136 ***********************************************************************
137 */
138
139 void Read(uchar xdata *cData,uchar xdata *cAddress,uchar N)
140 {
141 1 uchar i;
142 1 while((ReadSR()&0x01)==1)//The Write In Progress (WIP) bit
143 1 {;}
144 1 CS=0;
145 1 Write8(READDATA);
146 1 Write8(*(cAddress+2));
147 1 Write8(*(cAddress+1));
148 1 Write8(*cAddress);
149 1 for(i=0;i<N;i++)
150 1 *(cData+i)=Read8();
151 1 CS=1;
152 1 }
153
154
155 /*
156 ***********************************************************************
157 块擦除flash
158 传递参数:n,待擦除扇区
159 Return:无
160 Author:洪运富
161 Date:2005-8-4
162 ***********************************************************************
163 */
164 /*
165 void SectorErase(uchar n)
166 {
167 while((ReadSR()&0x01)==1)
168 {;}
169 CS=0;
170 Write8(WREN);
171 CS=1;
172 CS=0;
173 Write8(SECTORERA);
174 Write8(n);
175 Write8(0);
176 Write8(0);
177 CS=1;
178 }*/
179
C51 COMPILER V7.50 NX25P40 11/16/2007 08:30:23 PAGE 4
180
181 /*
182 ***********************************************************************
183 全部擦除flash
184 Return:无
185 Author:洪运富
186 Date:2005-8-4
187 ***********************************************************************
188 */
189
190 void AllErase(void)
191 {
192 1 while((ReadSR()&0x01)==1)
193 1 {;}
194 1 CS=0;
195 1 Write8(WREN);
196 1 CS=1;
197 1 CS=0;
198 1 Write8(ERASEALL);
199 1 CS=1;
200 1 }
201
202 /**********************************************************************
203 Manufacturer ID 90h dummy dummy 00h M7-M0 ID7-ID0
204
205 Manufacturer ID (M7-M0)
206 NexFlash EFh
207 Device ID ID7-ID0
208 NX25P10 10h 2
209 NX25P20 11h 4
210 NX25P40 12h 8
211 NX25P80 13h 16
212 NX25P16 14h 32
213 NX25P32 15h 64
214
215 Description:读取flash型号
216 ************************************************************************
217 */
218 uchar ReadDeviceID(void)
219 {
220 1 uchar ManufacturerID;
221 1 uchar DeviceID;
222 1
223 1 while((ReadSR()&0x01)==1)
224 1 {;}
225 1 CS=0;
226 1 Write8(0x90);
227 1 Write8(0x00);
228 1 Write8(0x00);
229 1 Write8(0x00);
230 1
231 1 ManufacturerID = Read8();
232 1 DeviceID = Read8();
233 1 CS=1;
234 1
235 1 if(ManufacturerID == 0xEF)
236 1 {
237 2 if (DeviceID == 0x10) // W25P10
238 2 return 2;
239 2 else if(DeviceID == 0x11)
240 2 return 4;
241 2 else if(DeviceID == 0x12)
C51 COMPILER V7.50 NX25P40 11/16/2007 08:30:23 PAGE 5
242 2 return 8;
243 2 else if(DeviceID == 0x13)
244 2 return 16;
245 2 else if(DeviceID == 0x14)
246 2 return 32;
247 2 else if(DeviceID == 0x15)
248 2 return 64;
249 2 else return 0;
250 2 }
251 1 else
252 1 return 0;
253 1 }
254
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 421 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 1 4
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -