📄 eeprom.lst
字号:
662 1 done = FALSE;
663 1 err = FALSE;
664 1
665 1 switch (sector)
666 1 {
667 2 case SECTOR_0:
668 2 *(BOOT_FLASH_SECTOR_0_X555) = 0xAA; // unlock main flash, write 0xAA to addess 0xX555
669 2 *(BOOT_FLASH_SECTOR_0_XAAA) = 0x55; // unlock main flash, write 0x55 to addess 0xXAAA
670 2 *(BOOT_FLASH_SECTOR_0_X555) = 0x80; // write 0x80 command to erase entire chip
671 2 *(BOOT_FLASH_SECTOR_0_X555) = 0xAA; // continue unlock sequence
672 2 *(BOOT_FLASH_SECTOR_0_XAAA) = 0x55; // continue unlock sequence
673 2 *((volatile unsigned char xdata *)SECTOR_0_BASE_ADDRESS) = 0x30;// erase sector
674 2 do // now use dat polling method to verify successful erase
675 2 {
C51 COMPILER V7.00 EEPROM 02/10/2003 10:48:05 PAGE 12
676 3 poll = *((volatile unsigned char xdata *)SECTOR_0_BASE_ADDRESS); // read flash status from any address
677 3 error = poll & NVM_ERROR; // save timeout error bit at DQ5
678 3 poll = poll & NVM_DATA_POLL; // look at D7
679 3 if ( poll == NVM_DATA_POLL ) // compare DQ7
680 3 done = TRUE; // bulk erase OK,
681 3 else if (error == NVM_ERROR) // check for timeout error
682 3 err = TRUE; // indicate timeout error occurred
683 3 } while( (done == FALSE) && (err == FALSE) );
684 2 if ( err == TRUE ) // make sure timeout error and dat poll didn't occur simultaneously
685 2 {
686 3 poll = *((volatile unsigned char xdata *)SECTOR_0_BASE_ADDRESS); // Read flash status again
687 3 poll = poll & NVM_DATA_POLL; // get DQ7 of poll byte read from flash
688 3 if (poll == NVM_DATA_POLL) // compare DQ7
689 3 done = TRUE; // the flash erased OK at the same time timout error occured
690 3 *(BOOT_FLASH_SECTOR_0_X555) = 0xF0; // reset the flash array (short reset instruction)
691 3 }
692 2 break;
693 2 case SECTOR_1:
694 2 *(BOOT_FLASH_SECTOR_1_X555) = 0xAA; // unlock main flash, write 0xAA to addess 0xX555
695 2 *(BOOT_FLASH_SECTOR_1_XAAA) = 0x55; // unlock main flash, write 0x55 to addess 0xXAAA
696 2 *(BOOT_FLASH_SECTOR_1_X555) = 0x80; // write 0x80 command to erase entire chip
697 2 *(BOOT_FLASH_SECTOR_1_X555) = 0xAA; // continue unlock sequence
698 2 *(BOOT_FLASH_SECTOR_1_XAAA) = 0x55; // continue unlock sequence
699 2 *((volatile unsigned char xdata *)SECTOR_1_BASE_ADDRESS) = 0x30;// erase sector
700 2 do // now use dat polling method to verify successful erase
701 2 {
702 3 poll = *((volatile unsigned char xdata *)SECTOR_1_BASE_ADDRESS); // read flash status from any address
703 3 error = poll & NVM_ERROR; // save timeout error bit at DQ5
704 3 poll = poll & NVM_DATA_POLL; // look at D7
705 3 if ( poll == NVM_DATA_POLL ) // compare DQ7
706 3 done = TRUE; // bulk erase OK,
707 3 else if (error == NVM_ERROR) // check for timeout error
708 3 err = TRUE; // indicate timeout error occurred
709 3 } while( (done == FALSE) && (err == FALSE) );
710 2 if ( err == TRUE ) // make sure timeout error and dat poll didn't occur simultaneously
711 2 {
712 3 poll = *((volatile unsigned char xdata *)SECTOR_1_BASE_ADDRESS); // Read flash status again
713 3 poll = poll & NVM_DATA_POLL; // get DQ7 of poll byte read from flash
714 3 if (poll == NVM_DATA_POLL) // compare DQ7
715 3 done = TRUE; // the flash erased OK at the same time timout error occured
716 3 *(BOOT_FLASH_SECTOR_0_X555) = 0xF0; // reset the flash array (short reset instruction)
717 3 }
718 2 break;
719 2 case SECTOR_2:
720 2 *(BOOT_FLASH_SECTOR_2_X555) = 0xAA; // unlock main flash, write 0xAA to addess 0xX555
721 2 *(BOOT_FLASH_SECTOR_2_XAAA) = 0x55; // unlock main flash, write 0x55 to addess 0xXAAA
722 2 *(BOOT_FLASH_SECTOR_2_X555) = 0x80; // write 0x80 command to erase entire chip
723 2 *(BOOT_FLASH_SECTOR_2_X555) = 0xAA; // continue unlock sequence
724 2 *(BOOT_FLASH_SECTOR_2_XAAA) = 0x55; // continue unlock sequence
725 2 *((volatile unsigned char xdata *)SECTOR_2_BASE_ADDRESS) = 0x30;// erase sector
726 2 do // now use dat polling method to verify successful erase
727 2 {
728 3 poll = *((volatile unsigned char xdata *)SECTOR_2_BASE_ADDRESS); // read flash status from any address
729 3 error = poll & NVM_ERROR; // save timeout error bit at DQ5
730 3 poll = poll & NVM_DATA_POLL; // look at D7
731 3 if ( poll == NVM_DATA_POLL ) // compare DQ7
732 3 done = TRUE; // bulk erase OK,
733 3 else if (error == NVM_ERROR) // check for timeout error
734 3 err = TRUE; // indicate timeout error occurred
735 3 } while( (done == FALSE) && (err == FALSE) );
736 2 if ( err == TRUE ) // make sure timeout error and dat poll didn't occur simultaneously
737 2 {
C51 COMPILER V7.00 EEPROM 02/10/2003 10:48:05 PAGE 13
738 3 poll = *((volatile unsigned char xdata *)SECTOR_2_BASE_ADDRESS); // Read flash status again
739 3 poll = poll & NVM_DATA_POLL; // get DQ7 of poll byte read from flash
740 3 if (poll == NVM_DATA_POLL) // compare DQ7
741 3 done = TRUE; // the flash erased OK at the same time timout error occured
742 3 *(BOOT_FLASH_SECTOR_0_X555) = 0xF0; // reset the flash array (short reset instruction)
743 3 }
744 2 break;
745 2 case SECTOR_3:
746 2 *(BOOT_FLASH_SECTOR_3_X555) = 0xAA; // unlock main flash, write 0xAA to addess 0xX555
747 2 *(BOOT_FLASH_SECTOR_3_XAAA) = 0x55; // unlock main flash, write 0x55 to addess 0xXAAA
748 2 *(BOOT_FLASH_SECTOR_3_X555) = 0x80; // write 0x80 command to erase entire chip
749 2 *(BOOT_FLASH_SECTOR_3_X555) = 0xAA; // continue unlock sequence
750 2 *(BOOT_FLASH_SECTOR_3_XAAA) = 0x55; // continue unlock sequence
751 2 *((volatile unsigned char xdata *)SECTOR_3_BASE_ADDRESS) = 0x30;// erase sector
752 2 do // now use dat polling method to verify successful erase
753 2 {
754 3 poll = *((volatile unsigned char xdata *)SECTOR_3_BASE_ADDRESS); // read flash status from any address
755 3 error = poll & NVM_ERROR; // save timeout error bit at DQ5
756 3 poll = poll & NVM_DATA_POLL; // look at D7
757 3 if ( poll == NVM_DATA_POLL ) // compare DQ7
758 3 done = TRUE; // bulk erase OK,
759 3 else if (error == NVM_ERROR) // check for timeout error
760 3 err = TRUE; // indicate timeout error occurred
761 3 } while( (done == FALSE) && (err == FALSE) );
762 2 if ( err == TRUE ) // make sure timeout error and dat poll didn't occur simultaneously
763 2 {
764 3 poll = *((volatile unsigned char xdata *)SECTOR_3_BASE_ADDRESS); // Read flash status again
765 3 poll = poll & NVM_DATA_POLL; // get DQ7 of poll byte read from flash
766 3 if (poll == NVM_DATA_POLL) // compare DQ7
767 3 done = TRUE; // the flash erased OK at the same time timout error occured
768 3 *(BOOT_FLASH_SECTOR_0_X555) = 0xF0; // reset the flash array (short reset instruction)
769 3 }
770 2 break;
771 2 default:
772 2 return 1;
773 2 }
774 1
775 1 return !(done);
776 1 }
777
778 /***** Eeprom_Sector_Erase_Start*****/
779 // Start Erases one boot flash sector.
780 // Accepts sector number (0-3).
781 // Returns 0 for successful erasure. If error, returns 1.
782 BYTE Eeprom_Sector_Erase_Start(BYTE sector)
783 {
784 1 switch (sector)
785 1 {
786 2 case SECTOR_0:
787 2 *(BOOT_FLASH_SECTOR_0_X555) = 0xAA; // unlock main flash, write 0xAA to addess 0xX555
788 2 *(BOOT_FLASH_SECTOR_0_XAAA) = 0x55; // unlock main flash, write 0x55 to addess 0xXAAA
789 2 *(BOOT_FLASH_SECTOR_0_X555) = 0x80; // write 0x80 command to erase entire chip
790 2 *(BOOT_FLASH_SECTOR_0_X555) = 0xAA; // continue unlock sequence
791 2 *(BOOT_FLASH_SECTOR_0_XAAA) = 0x55; // continue unlock sequence
792 2 *((volatile unsigned char xdata *)SECTOR_0_BASE_ADDRESS) = 0x30;// erase sector
793 2 break;
794 2 case SECTOR_1:
795 2 *(BOOT_FLASH_SECTOR_1_X555) = 0xAA; // unlock main flash, write 0xAA to addess 0xX555
796 2 *(BOOT_FLASH_SECTOR_1_XAAA) = 0x55; // unlock main flash, write 0x55 to addess 0xXAAA
797 2 *(BOOT_FLASH_SECTOR_1_X555) = 0x80; // write 0x80 command to erase entire chip
798 2 *(BOOT_FLASH_SECTOR_1_X555) = 0xAA; // continue unlock sequence
799 2 *(BOOT_FLASH_SECTOR_1_XAAA) = 0x55; // continue unlock sequence
C51 COMPILER V7.00 EEPROM 02/10/2003 10:48:05 PAGE 14
800 2 *((volatile unsigned char xdata *)SECTOR_1_BASE_ADDRESS) = 0x30;// erase sector
801 2 break;
802 2 case SECTOR_2:
803 2 *(BOOT_FLASH_SECTOR_2_X555) = 0xAA; // unlock main flash, write 0xAA to addess 0xX555
804 2 *(BOOT_FLASH_SECTOR_2_XAAA) = 0x55; // unlock main flash, write 0x55 to addess 0xXAAA
805 2 *(BOOT_FLASH_SECTOR_2_X555) = 0x80; // write 0x80 command to erase entire chip
806 2 *(BOOT_FLASH_SECTOR_2_X555) = 0xAA; // continue unlock sequence
807 2 *(BOOT_FLASH_SECTOR_2_XAAA) = 0x55; // continue unlock sequence
808 2 *((volatile unsigned char xdata *)SECTOR_2_BASE_ADDRESS) = 0x30;// erase sector
809 2 break;
810 2 case SECTOR_3:
811 2 *(BOOT_FLASH_SECTOR_3_X555) = 0xAA; // unlock main flash, write 0xAA to addess 0xX555
812 2 *(BOOT_FLASH_SECTOR_3_XAAA) = 0x55; // unlock main flash, write 0x55 to addess 0xXAAA
813 2 *(BOOT_FLASH_SECTOR_3_X555) = 0x80; // write 0x80 command to erase entire chip
814 2 *(BOOT_FLASH_SECTOR_3_X555) = 0xAA; // continue unlock sequence
815 2 *(BOOT_FLASH_SECTOR_3_XAAA) = 0x55; // continue unlock sequence
816 2 *((volatile unsigned char xdata *)SECTOR_3_BASE_ADDRESS) = 0x30;// erase sector
817 2 break;
818 2 default:
819 2 return 1;
820 2
821 2 }
822 1 return 0;
823 1 }
824
825 /***** Eeprom_Sector_Erase_Suspend*****/
826 // Susupend Erases one boot flash sector.
827 // Accepts sector number (0-3).
828 // Returns 0 for successful erasure. If error, returns 1.
829 BYTE Eeprom_Sector_Erase_Suspend(BYTE sector)
830 {
831 1 switch (sector)
832 1 {
833 2 case SECTOR_0:
834 2 *((volatile unsigned char xdata *)SECTOR_0_BASE_ADDRESS) = 0xB0;// Suspend erase sector
835 2 break;
836 2 case SECTOR_1:
837 2 *((volatile unsigned char xdata *)SECTOR_1_BASE_ADDRESS) = 0xB0;// Suspend erase sector
838 2 break;
839 2 case SECTOR_2:
840 2 *((volatile unsigned char xdata *)SECTOR_2_BASE_ADDRESS) = 0xB0;// Suspend erase sector
841 2 break;
842 2 case SECTOR_3:
843 2 *((volatile unsigned char xdata *)SECTOR_3_BASE_ADDRESS) = 0xB0;// Suspend erase sector
844 2 break;
845 2 default:
846 2 return 1;
847 2 }
848 1
849 1
850 1 return 0;
851 1 }
852
853 /***** Eeprom_Sector_Erase_Resume*****/
854 // Resume Erases one boot flash sector.
855 // Accepts sector number (0-3).
856 // Returns 0 for successful erasure. If error, returns 1.
857 BYTE Eeprom_Sector_Erase_Resume(BYTE sector)
858 {
859 1 switch (sector)
860 1 {
861 2 case SECTOR_0:
C51 COMPILER V7.00 EEPROM 02/10/2003 10:48:05 PAGE 15
862 2 *((volatile unsigned char xdata *)SECTOR_0_BASE_ADDRESS) = 0x30;// Resume erase sector
863 2 break;
864 2 case SECTOR_1:
865 2 *((volatile unsigned char xdata *)SECTOR_1_BASE_ADDRESS) = 0x30;// Resume erase sector
866 2 break;
867 2 case SECTOR_2:
868 2 *((volatile unsigned char xdata *)SECTOR_2_BASE_ADDRESS) = 0x30;// Resume erase sector
869 2 break;
870 2 case SECTOR_3:
871 2 *((volatile unsigned char xdata *)SECTOR_3_BASE_ADDRESS) = 0x30;// Resume erase sector
872 2 break;
873 2 default:
874 2 return 1;
875 2 }
876 1
877 1 return 0;
878 1 }
879
880 /***** Eeprom_Sector_Erase_Status *****/
881 // Gets status of sector erase.
882 // Accepts sector number (0-3).
883 // Returns 0 if erase cycle finished. Returns 1 if erase in progress.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -