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

📄 sst_spi_w25x.lst

📁 大容量Flash存储器W25X16,W25X32,W25X64读写擦除程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.50   SST_SPI_W25X                                                          01/12/2009 23:18:17 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE SST_SPI_W25X
OBJECT MODULE PLACED IN SST_SPI_W25X.OBJ
COMPILER INVOKED BY: D:\Program Files\Keil750\C51\BIN\C51.EXE SST_SPI_W25X.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /****************************************************************************/
   2          
   3          /****************************************************************************/
   4          #include <SST89x5xxRD2.H>
   5          #include <W25X.H>
   6          #include <intrins.h>
   7          
   8          #define SST_SPI
   9          
  10          extern  uint8 upper_128[16];
  11          extern  uint8 tx_buff[16];
  12          //=================================================================================================
  13          void    delay_nms(uchar i)
  14          {       uchar  j;
  15   1              i=i*2;
  16   1              for(;i>0;i--)   {   j = 246;    while(--j);     }
  17   1      }
  18          void    delay(uchar tt)
  19          {       while(tt--);}
  20          //=================================================================================================
  21          //SPI_Read_StatusReg            Reads the status register of the serial flash
  22          //SPI_Write_StatusReg           Performs a write to the status register
  23          //SPI_Write_Enable                      Write enables the serial flash
  24          //SPI_Write_Disable                     Write disables the serial flash
  25          //SPI_Read_ID1                          Reads the device ID using the instruction 0xAB
  26          //SPI_Read_ID2                          Reads the manufacturer ID and device ID with 0x90
  27          //SPI_Read_ID3()                        Reads the JedecDevice ID
  28          //SPI_Read_Byte                         Reads one byte from the serial flash and returns byte(max of 20 MHz CLK frequency)
  29          //SPI_Read_nBytes                       Reads multiple bytes(max of 20 MHz CLK frequency)
  30          //SPI_FastRead_Byte                     Reads one byte from the serial flash and returns byte(max of 33 MHz CLK frequency)
  31          //SPI_FastRead_nBytes           Reads multiple bytes(max of 33 MHz CLK frequency)
  32          //SPI_Write_Byte                        Program one byte to the serial flash
  33          //SPI_Write_nBytes                      Program n bytes to the serial flash, n<=256
  34          //SPI_Erase_Chip                        Erases entire serial flash
  35          //SPI_Erase_Sector                      Erases one sector (64 KB) of the serial flash
  36          //SPI_Wait_Busy                         Polls status register until busy bit is low
  37          //=================================================================================================
  38          uchar   SPI_Read_StatusReg()
  39          {       uchar byte = 0;
  40   1              W25X_CS = 0;                                                    //      enable device
  41   1              SPI_Send_Byte(W25X_ReadStatusReg);              //      send Read Status Register command
  42   1              byte = SPI_Get_Byte();                                  //      receive byte
  43   1              W25X_CS = 1;                                                    //      disable device  
  44   1              return byte;
  45   1      }
  46          void    SPI_Write_StatusReg(byte)
  47          {       W25X_CS = 0;                                                    //      enable device
  48   1              SPI_Send_Byte(W25X_WriteStatusReg);             //      select write to status register
  49   1              SPI_Send_Byte(byte);                                    //      data that will change the status(only bits 2,3,7 can be written)
  50   1              W25X_CS = 1;                                                    //      disable the device
  51   1      }
  52          void    SPI_Write_Enable()
  53          {       W25X_CS = 0;                                                    //      enable device
  54   1              SPI_Send_Byte(W25X_WriteEnable);                //      send W25X_Write_Enable command
  55   1              W25X_CS = 1;                                                    //      disable device
C51 COMPILER V7.50   SST_SPI_W25X                                                          01/12/2009 23:18:17 PAGE 2   

  56   1      }
  57          void    SPI_Write_Disable()
  58          {       W25X_CS = 0;                                                    //      enable device
  59   1              SPI_Send_Byte(W25X_WriteDisable);               //      send W25X_WriteW25X_DIsable command
  60   1              W25X_CS = 1;                                                    //      disable device
  61   1      }
  62          uchar   SPI_Read_ID1()
  63          {       uchar byte;
  64   1              W25X_CS = 0;                                                    //      enable device
  65   1              SPI_Send_Byte(W25X_DeviceID);                   //      send read device ID command (ABh)
  66   1          SPI_Send_Byte(0);                                           //      send address
  67   1              SPI_Send_Byte(0);                                               //      send address
  68   1              SPI_Send_Byte(0);                                               //      send 3_Dummy address
  69   1              byte = SPI_Get_Byte();                                  //      receive Device ID byte  
  70   1              W25X_CS  = 1;                                                   //      disable device
  71   1              delay(4);                                                               //      remain CS high for tRES2 = 1.8uS
  72   1              return byte;
  73   1      }
  74          uint    SPI_Read_ID2(uchar ID_Addr)
  75          {       uint IData16;
  76   1              W25X_CS = 0;                                                    //      enable device
  77   1              SPI_Send_Byte(W25X_ManufactDeviceID);   //      send read ID command (90h)
  78   1          SPI_Send_Byte(0x00);                                        //      send address
  79   1              SPI_Send_Byte(0x00);                                    //      send address
  80   1              SPI_Send_Byte(ID_Addr);                                 //      send W25Pxx selectable ID address 00H or 01H
  81   1              IData16 = SPI_Get_Byte()<<8;                    //      receive Manufature or Device ID byte
  82   1              IData16 |= SPI_Get_Byte();                              //      receive Device or Manufacture ID byte
  83   1              W25X_CS = 1;                                                    //      disable device  
  84   1              return IData16;
  85   1      }
  86          uint    SPI_Read_ID3()
  87          {       uint IData16;
  88   1              W25X_CS = 0;                                                    //      enable device
  89   1              SPI_Send_Byte(W25X_JedecDeviceID);              //      send read ID command (9Fh)
  90   1              IData16 = SPI_Get_Byte()<<8;                    //      receive Manufature or Device ID byte
  91   1              IData16 |= SPI_Get_Byte();                              //      receive Device or Manufacture ID byte
  92   1              tx_buff[2] = SPI_Get_Byte();    
  93   1              W25X_CS = 1;                                                    //      disable device  
  94   1              return IData16;
  95   1      }
  96          uchar   SPI_Read_Byte(uint32 Dst_Addr) 
  97          {       uchar byte = 0; 
  98   1              W25X_CS = 0;                                                                            //      enable device
  99   1              SPI_Send_Byte(W25X_ReadData);                                           //      read command
 100   1              SPI_Send_Byte((uchar)((Dst_Addr & 0xFFFFFF) >> 16));//  send 3 address bytes
 101   1              SPI_Send_Byte((uchar)((Dst_Addr & 0xFFFF) >> 8));
 102   1              SPI_Send_Byte((uchar)(Dst_Addr & 0xFF));
 103   1              byte = SPI_Get_Byte();
 104   1              W25X_CS = 1;                                                                            //      disable device  
 105   1              return byte;                                                                            //      return one byte read
 106   1      }
 107          void    SPI_Read_nBytes(uint32 Dst_Addr, uchar nBytes_128)
 108          {       uint32 i = 0;   
 109   1              W25X_CS = 0;                                                                            //      enable device
 110   1              SPI_Send_Byte(W25X_ReadData);                                           //      read command
 111   1              SPI_Send_Byte(((Dst_Addr & 0xFFFFFF) >> 16));           //      send 3 address bytes
 112   1              SPI_Send_Byte(((Dst_Addr & 0xFFFF) >> 8));
 113   1              SPI_Send_Byte(Dst_Addr & 0xFF);
 114   1              for (i = 0; i < nBytes_128; i++)                                        //      read until no_bytes is reached
 115   1                      upper_128[i] = SPI_Get_Byte();                                  //      receive byte and store at address 80H - FFH
 116   1              W25X_CS = 1;                                                                            //      disable device
 117   1      }
C51 COMPILER V7.50   SST_SPI_W25X                                                          01/12/2009 23:18:17 PAGE 3   

 118          uchar   SPI_FastRead_Byte(uint32 Dst_Addr) 
 119          {       uchar byte = 0;
 120   1              W25X_CS = 0;                                                                            //      enable device
 121   1              SPI_Send_Byte(W25X_FastReadData);                                       //      fast read command
 122   1              SPI_Send_Byte(((Dst_Addr & 0xFFFFFF) >> 16));           //      send 3 address bytes
 123   1              SPI_Send_Byte(((Dst_Addr & 0xFFFF) >> 8));
 124   1              SPI_Send_Byte(Dst_Addr & 0xFF);
 125   1              SPI_Send_Byte(0xFF);                                                            //      dummy byte
 126   1              byte = SPI_Get_Byte();
 127   1              W25X_CS = 1;                                                                            //      disable device  
 128   1              return byte;                                                                            //      return one byte read
 129   1      }
 130          void    SPI_FastRead_nBytes(uint32 Dst_Addr, uchar nBytes_128)
 131          {       uchar i = 0;    
 132   1              W25X_CS = 0;                                                                            //      enable device
 133   1              SPI_Send_Byte(W25X_FastReadData);                                       //      read command
 134   1              SPI_Send_Byte(((Dst_Addr & 0xFFFFFF) >> 16));           //      send 3 address bytes
 135   1              SPI_Send_Byte(((Dst_Addr & 0xFFFF) >> 8));
 136   1              SPI_Send_Byte(Dst_Addr & 0xFF);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -