📄 at45.lst
字号:
204 1
205 1 }
206 //----------------------------------------------------------------------
207 // 功能:从缓冲区2的指定位置start_addr中读入len长度的数据到pBuffer
208 // 参数:
209 // str_addr,WORD:缓冲区起始位置
210 // len: WORD:数据长度
211 // pBuffer, BYTE *:数据缓存指针
212 // 返回值:BYTE,1:读取成功;0:读取失败
213 //----------------------------------------------------------------------
214 BYTE FlashBuffer2Read(WORD start_addr,WORD len, BYTE *pBuffer)
215 {
216 1 WORD i;
217 1
218 1 if((start_addr+len)>FLASH_PAGE_BYTE[g_cFlashType])
219 1 {// 地址长度错误
220 2 return 0;
221 2 }
222 1
223 1 while((GetFlashStatus()&0x80)==0); // 检查器件是否准备就绪
224 1
225 1 DF_CHIP_SELECT; // 使能片选
226 1 SendSPIByte(BUFFER_2_READ); //缓冲区1为54H 缓冲区2为56H
227 1 SendSPIByte(0);
228 1 SendSPIByte((BYTE)(start_addr>>8));
229 1 SendSPIByte((BYTE)start_addr);
230 1 SendSPIByte(0);
231 1 for (i=0;i<len;i++)
232 1 {
233 2 *pBuffer++ = GetSPIByte();
234 2 }
235 1 DF_CHIP_NOSELECT; // 取消片选
236 1
237 1 return 1;
238 1 }
239
240 //--------------------------------------------------------------
241 // 功能:将pBuffer中的长度为len的数据写入到Flash缓冲区1中
C51 COMPILER V8.02 AT45 08/18/2007 20:06:55 PAGE 5
242 // 参数:
243 // str_addr,WORD:缓冲区起始位置
244 // len: WORD:数据长度
245 // pBuffer, BYTE *:数据缓存指针
246 // 返回值:BYTE,1:写入成功;0:写入失败
247 //
248 //--------------------------------------------------------------
249 BYTE FlashBuffer1Write(WORD start_addr, WORD len,BYTE *pBuffer)
250 {
251 1 WORD i;
252 1
253 1 if(start_addr+len>FLASH_PAGE_BYTE[g_cFlashType])
254 1 {// 地址长度错误
255 2 return 0;
256 2 }
257 1
258 1 while((GetFlashStatus()&0x80)==0); // 检查器件是否准备就绪
259 1
260 1 DF_CHIP_SELECT;
261 1 SendSPIByte(BUFFER_1_WRITE);
262 1 SendSPIByte(0x00);
263 1 SendSPIByte((BYTE)(start_addr>>8));
264 1 SendSPIByte((BYTE)start_addr);
265 1 for (i=0;i<len;i++)
266 1 {
267 2 SendSPIByte(*pBuffer++);
268 2 }
269 1
270 1 DF_CHIP_NOSELECT;
271 1
272 1 return 1;
273 1 }
274 //---------------------------------------------------------------
275 // 功能:将pBuffer中的长度为len的数据写入到Flash缓冲区2中
276 // 参数:
277 // str_addr,WORD:缓冲区起始位置
278 // len: WORD:数据长度
279 // pBuffer, BYTE *:数据缓存指针
280 // 返回值:BYTE,1:写入成功;0:写入失败
281 //
282 //--------------------------------------------------------------
283 BYTE FlashBuffer2Write(WORD start_addr, WORD len,BYTE *pBuffer)
284 {
285 1 WORD i;
286 1
287 1 if(start_addr+len>FLASH_PAGE_BYTE[g_cFlashType])
288 1 {// 地址长度错误
289 2 return 0;
290 2 }
291 1
292 1 while((GetFlashStatus()&0x80)==0); // 检查器件是否准备就绪
293 1
294 1 DF_CHIP_SELECT;
295 1 SendSPIByte(BUFFER_2_WRITE);
296 1 SendSPIByte(0x00);
297 1 SendSPIByte((BYTE)(start_addr>>8));
298 1 SendSPIByte((BYTE)start_addr);
299 1 for (i=0;i<len;i++)
300 1 {
301 2 SendSPIByte(*pBuffer++);
302 2 }
303 1
C51 COMPILER V8.02 AT45 08/18/2007 20:06:55 PAGE 6
304 1 DF_CHIP_NOSELECT;
305 1
306 1 return 1;
307 1 }
308
309 //----------------------------------------------------------
310 //功能:将Flash第pageAddr页面的数据读出到Flash缓冲区1中
311 //参数:pageAddr,WORD:要读出的页面地址
312 //返回值:1,成功;0:失败
313 //----------------------------------------------------------
314 BYTE PageToBuffer1(WORD pageAddr)
315 {
316 1
317 1 if(pageAddr>=FLASH_PAGE[g_cFlashType]) return 0; // 页面地址无效
318 1
319 1 while((GetFlashStatus()&0x80)==0); // 检查器件是否准备就绪
320 1
321 1 DF_CHIP_SELECT;
322 1
323 1 SendSPIByte(PAGE_TO_B1_XFER);
324 1 SendSPIByte((BYTE)(pageAddr >> (8-PAGE_SHIFT[g_cFlashType])));
325 1 SendSPIByte((BYTE)(pageAddr << PAGE_SHIFT[g_cFlashType]));
326 1 SendSPIByte(0);
327 1
328 1 DF_CHIP_NOSELECT;
329 1
330 1 return 1;
331 1 }
332 //--------------------------------------------------------
333 //功能:将Flash第pageAddr页面的数据读出到Flash缓冲区2中
334 //参数:pageAddr,WORD:要读出的页面地址
335 //返回值:1,成功;0:失败
336 //--------------------------------------------------------
337 BYTE PageToBuffer2(WORD pageAddr)
338 {
339 1 if(pageAddr>=FLASH_PAGE[g_cFlashType]) return 0; // 页面地址无效
340 1
341 1 while((GetFlashStatus()&0x80)==0); // 检查器件是否准备就绪
342 1
343 1 DF_CHIP_SELECT;
344 1
345 1 SendSPIByte(PAGE_TO_B2_XFER);
346 1 SendSPIByte((BYTE)(pageAddr >> (8-PAGE_SHIFT[g_cFlashType])));
347 1 SendSPIByte((BYTE)(pageAddr << PAGE_SHIFT[g_cFlashType]));
348 1 SendSPIByte(0);
349 1
350 1 DF_CHIP_NOSELECT;
351 1
352 1 return 1;
353 1
354 1 }
355
356 //--------------------------------------------------------
357 // 功能:擦除pageAddr页面
358 // 参数:要擦除的页面
359 // 返回:1,成功;0:失败
360 //--------------------------------------------------------
361 BYTE FlashPageErase(WORD pageAddr)
362 {
363 1 if(pageAddr>=FLASH_PAGE[g_cFlashType]) return 0; // 页面地址无效
364 1
365 1 while((GetFlashStatus()&0x80)==0); // 检查器件是否准备就绪
C51 COMPILER V8.02 AT45 08/18/2007 20:06:55 PAGE 7
366 1
367 1 DF_CHIP_SELECT;
368 1 SendSPIByte(PAGE_ERASE);
369 1 SendSPIByte((BYTE)(pageAddr >> (8-PAGE_SHIFT[g_cFlashType])));
370 1 SendSPIByte((BYTE)(pageAddr << PAGE_SHIFT[g_cFlashType]));
371 1 SendSPIByte(0x00);
372 1 DF_CHIP_NOSELECT;
373 1
374 1 return 1;
375 1 }
376
377 //-------------------------------------------------------
378 // 功能:擦除blockAddr
379 // 参数:要擦除的block
380 // 返回:1:成功;0:失败
381 //------------------------------------------------------
382 BYTE FlashBlockErase(WORD blockAddr)
383 {
384 1 if(blockAddr>=FLASH_BLOCK[g_cFlashType]) return 0;
385 1
386 1 while((GetFlashStatus()&0x80)==0);
387 1
388 1 DF_CHIP_SELECT;
389 1
390 1 SendSPIByte(BLOCK_ERASE);
391 1 SendSPIByte(blockAddr>>(8-BLOCK_SHIFT[g_cFlashType]));
392 1 SendSPIByte(blockAddr<<BLOCK_SHIFT[g_cFlashType]);
393 1 SendSPIByte(0);
394 1
395 1 DF_CHIP_NOSELECT;
396 1
397 1 return 1;
398 1 }
399 //--------------------------------------------------------
400 //功能:直接将Flash Buffer1中的数据写入到pageAddr页,不擦除
401 //参数:pageAddr,WORD:要写入的页面地址
402 //返回值:1,成功;0,失败
403 //--------------------------------------------------------
404 BYTE FlashBuffer1ProgNoErase(WORD pageAddr)
405 {
406 1
407 1 if(pageAddr>=FLASH_PAGE[g_cFlashType]) return 0; // 页面地址无效
408 1
409 1 while((GetFlashStatus()&0x80)==0); // 检查器件是否准备就绪
410 1
411 1 DF_CHIP_SELECT;
412 1 SendSPIByte(B1_TO_PAGE_WITHOUT_ERASE);
413 1 SendSPIByte((BYTE)(pageAddr >> (8-PAGE_SHIFT[g_cFlashType])));
414 1 SendSPIByte((BYTE)(pageAddr << PAGE_SHIFT[g_cFlashType]));
415 1 SendSPIByte(0x00);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -