📄 at45.lst
字号:
416 1 DF_CHIP_NOSELECT;
417 1
418 1 return 1;
419 1 }
420 //--------------------------------------------------------
421 //功能:直接将Flash Buffer2中的数据写入到pageAddr页,不擦除
422 //参数:pageAddr,WORD:要写入的页面地址
423 //返回值:1,成功;0,失败
424 //--------------------------------------------------------
425 BYTE FlashBuffer2ProgNoErase(WORD pageAddr)
426 {
427 1
C51 COMPILER V8.02 AT45 08/18/2007 20:06:55 PAGE 8
428 1 if(pageAddr>=FLASH_PAGE[g_cFlashType]) return 0; // 页面地址无效
429 1
430 1 while((GetFlashStatus()&0x80)==0); // 检查器件是否准备就绪
431 1
432 1 DF_CHIP_SELECT;
433 1 SendSPIByte(B2_TO_PAGE_WITHOUT_ERASE);
434 1 SendSPIByte((BYTE)(pageAddr >> (8-PAGE_SHIFT[g_cFlashType])));
435 1 SendSPIByte((BYTE)(pageAddr << PAGE_SHIFT[g_cFlashType]));
436 1 SendSPIByte(0x00);
437 1 DF_CHIP_NOSELECT;
438 1
439 1 return 1;
440 1 }
441 //擦除+缓存写主存
442 //--------------------------------------------------------
443 //功能:首先擦除指定的扇区,并将Flash的Buffer1中的数据写入到扇区中
444 //参数:pageAddr,BYTE:要写入的扇区
445 //返回值:1,成功;0,失败
446 //--------------------------------------------------------
447 BYTE FlashBuffer1ProgAutoErase(WORD pageAddr)
448 {
449 1
450 1 if(pageAddr>=FLASH_PAGE[g_cFlashType]) return 0; // 页面地址无效
451 1
452 1 while((GetFlashStatus()&0x80)==0); // 检查器件是否准备就绪
453 1
454 1 DF_CHIP_SELECT;
455 1 SendSPIByte(B1_TO_PAGE_WITH_ERASE);
456 1 SendSPIByte((BYTE)(pageAddr >> (8-PAGE_SHIFT[g_cFlashType])));
457 1 SendSPIByte((BYTE)(pageAddr << PAGE_SHIFT[g_cFlashType]));
458 1 SendSPIByte(0x00);
459 1 DF_CHIP_NOSELECT;
460 1
461 1 return 1;
462 1 }
463
464 //擦除+缓存写主存
465 //--------------------------------------------------------
466 //功能:首先擦除指定的扇区,并将Flash的Buffer2中的数据写入到扇区中
467 //参数:pageAddr,BYTE:要写入的扇区
468 //返回值:1,成功;0,失败
469 //--------------------------------------------------------
470 BYTE FlashBuffer2ProgAutoErase(WORD pageAddr)
471 {
472 1 if(pageAddr>=FLASH_PAGE[g_cFlashType]) return 0; // 页面地址无效
473 1
474 1 while((GetFlashStatus()&0x80)==0); // 检查器件是否准备就绪
475 1
476 1 DF_CHIP_SELECT;
477 1 SendSPIByte(B2_TO_PAGE_WITH_ERASE);
478 1 SendSPIByte((BYTE)(pageAddr >> (8-PAGE_SHIFT[g_cFlashType])));
479 1 SendSPIByte((BYTE)(pageAddr << PAGE_SHIFT[g_cFlashType]));
480 1 SendSPIByte(0x00);
481 1 DF_CHIP_NOSELECT;
482 1
483 1 return 1;
484 1 }
485
486
487 //--------------------------------------------------------------------------------
488 //功能:将缓冲区pBuffer中的长度为len的数据通过Flash的Buffer1写入到pageAddr页面中,页面自动擦除
489 //参数:start_addr,WORD:缓冲区内起始位置
C51 COMPILER V8.02 AT45 08/18/2007 20:06:55 PAGE 9
490 // len, WORD: 数据长度
491 // pBuffer, BYTE*:数据缓冲区
492 // pageAddr, WORD: 页面
493 //返回值:1,成功;0:失败
494 //--------------------------------------------------------------------------------
495 BYTE FlashProgViaBuffer1(WORD start_addr, WORD len,BYTE *pBuffer,WORD pageAddr)
496 {
497 1 WORD i;
498 1
499 1 if(start_addr+len>FLASH_PAGE_BYTE[g_cFlashType])
500 1 {// 地址长度错误
501 2 return 0;
502 2 }
503 1
504 1 if(pageAddr>=FLASH_PAGE[g_cFlashType]) return 0; // 页面地址无效
505 1
506 1 while((GetFlashStatus()&0x80)==0); // 检查器件是否准备就绪
507 1
508 1 DF_CHIP_SELECT;
509 1
510 1
511 1 SendSPIByte(PAGE_PROG_THROUGH_B1);
512 1 SendSPIByte((BYTE)(pageAddr >> (8-PAGE_SHIFT[g_cFlashType])));
513 1 SendSPIByte((BYTE)((pageAddr << PAGE_SHIFT[g_cFlashType]) + (start_addr>>8)));
514 1 SendSPIByte((BYTE)start_addr);
515 1 for (i=0;i<len;i++) SendSPIByte(*pBuffer++);
516 1
517 1
518 1 DF_CHIP_NOSELECT;
519 1
520 1 return 1;
521 1 }
522
523 //--------------------------------------------------------
524 //功能:将缓冲区pBuffer中的长度为len的数据通过Flash的Buffer2写入到pageAddr页面中,页面自动擦除
525 //参数:start_addr,WORD:缓冲区内起始位置
526 // len, WORD: 数据长度
527 // pBuffer, BYTE*:数据缓冲区
528 // pageAddr, WORD: 页面
529 //返回值:1,成功;0:失败
530 //--------------------------------------------------------
531 BYTE FlashProgViaBuffer2(WORD start_addr, WORD len,BYTE *pBuffer,WORD pageAddr)
532 {
533 1 WORD i;
534 1
535 1 if(start_addr+len>FLASH_PAGE_BYTE[g_cFlashType])
536 1 {// 地址长度错误
537 2 return 0;
538 2 }
539 1
540 1 if(pageAddr>=FLASH_PAGE[g_cFlashType]) return 0; // 页面地址无效
541 1
542 1 while((GetFlashStatus()&0x80)==0); // 检查器件是否准备就绪
543 1
544 1 DF_CHIP_SELECT;
545 1 SendSPIByte(PAGE_PROG_THROUGH_B2);
546 1 SendSPIByte((BYTE)(pageAddr >> (8-PAGE_SHIFT[g_cFlashType])));
547 1 SendSPIByte((BYTE)((pageAddr << PAGE_SHIFT[g_cFlashType]) + (start_addr>>8)));
548 1 SendSPIByte((BYTE)start_addr);
549 1 for (i=0;i<len;i++) SendSPIByte(*pBuffer++);
550 1 DF_CHIP_NOSELECT;
551 1
C51 COMPILER V8.02 AT45 08/18/2007 20:06:55 PAGE 10
552 1 return 1;
553 1 }
554
555
556 ///////////////////////////////////////////////////////////////////////
557 // 页面自动重写入函数
558 //--------------------------------------------------------
559 //功能:首先擦除pageAddr页面并将缓冲区pBuffer中的长度为len的数据通过Flash的Buffer1写入到pageAddr页面中
560 //参数:pageAddr, WORD: 页面
561 //返回值:1,成功;0:失败
562 //--------------------------------------------------------
563 BYTE FlashAutoReWriteViaBuffer1(WORD pageAddr)
564 {
565 1 WORD i;
566 1
567 1 if(pageAddr>=FLASH_PAGE[g_cFlashType]) return 0; // 页面地址无效
568 1
569 1 while((GetFlashStatus()&0x80)==0); // 检查器件是否准备就绪
570 1
571 1 DF_CHIP_SELECT;
572 1 SendSPIByte(AUTO_PAGE_REWRITE_THROUGH_B1);
573 1 SendSPIByte((BYTE)(pageAddr >> (8-PAGE_SHIFT[g_cFlashType])));
574 1 SendSPIByte((BYTE)(pageAddr << PAGE_SHIFT[g_cFlashType]));
575 1 SendSPIByte(0);
576 1
577 1 DF_CHIP_NOSELECT;
578 1
579 1 return 1;
580 1 }
*** WARNING C280 IN LINE 565 OF AT45.C: 'i': unreferenced local variable
581
582
583 //--------------------------------------------------------
584 //功能:Page中的内容通过buffer2自动进行重新写入
585 //参数:pageAddr, WORD: 页面
586 //返回值:1,成功;0:失败
587 //--------------------------------------------------------
588 BYTE FlashAutoReWriteViaBuffer2(WORD pageAddr)
589 {
590 1 WORD i;
591 1
592 1 if(pageAddr>=FLASH_PAGE[g_cFlashType]) return 0; // 页面地址无效
593 1
594 1 while((GetFlashStatus()&0x80)==0); // 检查器件是否准备就绪
595 1
596 1 DF_CHIP_SELECT;
597 1
598 1 SendSPIByte(AUTO_PAGE_REWRITE_THROUGH_B2);
599 1 SendSPIByte((BYTE)(pageAddr >> (8-PAGE_SHIFT[g_cFlashType])));
600 1 SendSPIByte((BYTE)(pageAddr << PAGE_SHIFT[g_cFlashType]));
601 1 SendSPIByte(0);
602 1
603 1
604 1 DF_CHIP_NOSELECT;
605 1
606 1 return 1;
607 1
608 1 }
*** WARNING C280 IN LINE 590 OF AT45.C: 'i': unreferenced local variable
MODULE INFORMATION: STATIC OVERLAYABLE
C51 COMPILER V8.02 AT45 08/18/2007 20:06:55 PAGE 11
CODE SIZE = 2618 ----
CONSTANT SIZE = 116 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 1 51
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 2 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -