⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 nx25p40.lst

📁 w25p40flash存储芯片程序
💻 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 + -