还在为玩转你的四色板还烦恼吗?技术放大招了,飞思卡尔的DSPI和SPI驱动W25QXX,SPIFLASH的代码,测试通过,用的拿走,不谢!- #ifndef __SPI_H
- #define __SPI_H
- /////DSPIÇý¶¯
- #include "fsl_gpio.h"
- #include "fsl_common.h"
- #include "fsl_port.h"
- #include "fsl_dspi.h"
- #define TRANSFER_BAUDRATE 500000U
- //W25X??/Q??????
- //W25Q80 ID 0XEF13
- //W25Q16 ID 0XEF14
- //W25Q32 ID 0XEF15
- //W25Q64 ID 0XEF16
- //W25Q128 ID 0XEF17
- #define W25Q80 0XEF13
- #define W25Q16 0XEF14
- #define W25Q32 0XEF15
- #define W25Q64 0XEF16
- #define W25Q128 0XEF17
- //??W25QXX????
- ////////////////////////////////////////////////////////////////////////////
- #define W25QXX_CS_High GPIO_WritePinOutput(GPIOD,11U,1)
- #define W25QXX_CS_Low GPIO_WritePinOutput(GPIOD,11U,0);
- /************************************************************
- * º¯ÊýÃû³Æ:SPI_Config()
- * º¯Êý¹¦ÄÜ:ÅäÖÃSPI2
- * Èë¿Ú²ÎÊý:
- * ³ö¿Ú²ÎÊý:
- * º¯Êý˵Ã÷:
- ************************************************************/
- void SPI_Config(void);
- //void SPI_Test();
- void SPI_Transfer(uint8_t *txData,uint8_t *rxData,uint8_t size);
- uint8_t SPI_ReadWriteByte(uint8_t inData);
- #endif
[color=rgb(51, 102, 153) !important]复制代码
0
|
|
|
|
- #include "spi.h"
- volatile bool isTransferCompleted = false;
- uint8_t TxData[64]={0x90,0x00,0x00,0x00};
- uint8_t RxData[64]={0xff};
- /************************************************************
- * º¯ÊýÃû³Æ:SPI_Config()
- * º¯Êý¹¦ÄÜ:ÅäÖÃDSPI2,SPIģʽ0£¬²¨ÌØÂÊ500K
- * Èë¿Ú²ÎÊý:
- * ³ö¿Ú²ÎÊý:
- * º¯Êý˵Ã÷:
- ************************************************************/
- void SPI_Config(void)
- {
- dspi_master_config_t masterConfig;
- gpio_pin_config_t cs_config = {kGPIO_DigitalOutput, 1,};
- CLOCK_EnableClock ( kCLOCK_PortD);//¿ªÆôPTD¶Ë¿ÚʱÖÓ
- //PORT_SetPinMux(PORTD, 11U, kPORT_MuxAlt2);//CS
- PORT_SetPinMux(PORTD, 12U, kPORT_MuxAlt2);
- PORT_SetPinMux(PORTD, 13U, kPORT_MuxAlt2);
- PORT_SetPinMux(PORTD, 14U, kPORT_MuxAlt2);
- PORT_SetPinMux(PORTD, 11U, kPORT_MuxAsGpio);
- GPIO_PinInit (GPIOD,11U,&cs_config);
- /* Master config */
- masterConfig.whichCtar = kDSPI_Ctar0;
- masterConfig.ctarConfig.baudRate = 500000U;
- masterConfig.ctarConfig.bitsPerFrame = 8U;
- masterConfig.ctarConfig.cpol = 1;//kDSPI_ClockPolarityActiveHigh
- masterConfig.ctarConfig.cpha = kDSPI_ClockPhaseSecondEdge;
- masterConfig.ctarConfig.direction = kDSPI_M***First;
- masterConfig.ctarConfig.pcsToSckDelayInNanoSec = 1000000000U / 500000U;
- masterConfig.ctarConfig.lastSckToPcsDelayInNanoSec = 1000000000U / 500000U;
- masterConfig.ctarConfig.betweenTransferDelayInNanoSec = 1000000000U / 500000U;
- masterConfig.whichPcs = kDSPI_Pcs0;
- masterConfig.pcsActiveHighOrLow = kDSPI_PcsActiveLow;
- masterConfig.enableContinuousSCK = false;
- masterConfig.enableRxFifoOverWrite = false;
- masterConfig.enableModifiedTimingFormat = false;
- masterConfig.samplePoint = kDSPI_SckToSin0Clock;
- DSPI_MasterInit(SPI2, &masterConfig, CLOCK_GetFreq(DSPI2_CLK_SRC));
- }
- /************************************************************
- * º¯ÊýÃû³Æ:SPI_Transfer(uint8_t *txData,uint8_t *rxData,uint8_t size)
- * º¯Êý¹¦ÄÜ:SPI´«ËÍÊý¾Ý
- * Èë¿Ú²ÎÊý:uint8_t txData/rxDataÊý¾Ý·¢ËͽÓÊÕ»º³åÇø-uint8_t sizeÊý¾Ý´óС
- * ³ö¿Ú²ÎÊý:
- * º¯Êý˵Ã÷:
- ************************************************************/
- void SPI_Transfer(uint8_t *txData,uint8_t *rxData,uint8_t size)
- {
- dspi_transfer_t masterXfer;
- isTransferCompleted = false;
- isTransferCompleted = false;
- masterXfer.txData = txData;
- masterXfer.rxData = rxData;
- masterXfer.dataSize = size;
- masterXfer.configFlags = kDSPI_MasterPcsContinuous;//kDSPI_MasterCtar0 | kDSPI_MasterPcs0 |
- DSPI_MasterTransferBlocking(SPI2, &masterXfer);
- }
- uint8_t SPI_ReadWriteByte(uint8_t inData)
- {
- uint8_t a = inData,b=0x00;
- SPI_Transfer(&a,&b,1);
- return b;
- }
|
|
|
|
|
- #ifndef __SPI_H
- #define __SPI_H
- //SPI Driver
- #include "fsl_spi.h"
- //#include "fsl_debug_console.h"
- #include "fsl_gpio.h"
- #include "fsl_common.h"
- #include "fsl_port.h"
- #define SPI_Port_Clock kCLOCK_PortD
- #define SPI0_MISO_Pin (3U)
- #define SPI0_MOSI_Pin (2U)
- #define SPI0_SCLK_Pin (1U)
- #define SPI0_CS_Pin (0U)//as GPIO
- #define SIP0_CS_GPIO GPIOD
- #define SPI0_Port PORTD
- void SPI_Config(void);
- uint8_t SPI_ReadWriteByte(uint8_t inData);
- #define SPI0_CS_High GPIO_WritePinOutput(GPIOD,0U,1)
- #define SPI0_CS_Low GPIO_WritePinOutput(GPIOD,0U,0);
- #endif
|
|
|
|
|
- #include "spi.h"
- static volatile bool masterFinished = false;
- static spi_master_handle_t masterHandle;
- static void masterCallback(SPI_Type *base, spi_master_handle_t *handle, status_t status, void *userData)
- {
- masterFinished = true;
- }
- void SPI_Config(void)
- {
- uint32_t sourceClock=0;
- spi_master_config_t masterConfig = {0};
- gpio_pin_config_t cs_config = {kGPIO_DigitalOutput, 1,};
- CLOCK_EnableClock ( SPI_Port_Clock);//¿ªÆôPTD¶Ë¿ÚʱÖÓ
- PORT_SetPinMux(SPI0_Port, SPI0_SCLK_Pin, kPORT_MuxAlt2);
- PORT_SetPinMux(SPI0_Port, SPI0_MISO_Pin, kPORT_MuxAlt5);
- PORT_SetPinMux(SPI0_Port, SPI0_MOSI_Pin, kPORT_MuxAlt5);
- PORT_SetPinMux(SPI0_Port, SPI0_CS_Pin, kPORT_MuxAsGpio);
- GPIO_PinInit (SIP0_CS_GPIO,SPI0_CS_Pin,&cs_config);
- SPI_MasterGetDefaultConfig(&masterConfig);
- masterConfig.enableStopInWaitMode = false;
- masterConfig.polarity = 1;//1
- masterConfig.phase = kSPI_ClockPhaseSecondEdge;//ʱÖÓÏàλ
- masterConfig.direction = kSPI_M***First;
- masterConfig.dataMode = kSPI_8BitMode;
- //masterConfig.txWatermark = kSPI_TxFifoOneHalfEmpty;
- //masterConfig.rxWatermark = kSPI_RxFifoOneHalfFull;
- masterConfig.pinMode = kSPI_PinModeOutput;//Òý½ÅģʽkSPI_PinModeInput
- masterConfig.outputMode = kSPI_SlaveSelectAsGpio;
- masterConfig.baudRate_Bps = 500000U;
- // SPI_MasterGetDefaultConfig(&masterConfig);
- sourceClock = CLOCK_GetFreq(kCLOCK_BusClk);
- SPI_MasterInit(SPI0, &masterConfig, sourceClock);
- //SPI_MasterTransferCreateHandle(SPI0, &masterHandle, masterCallback, NULL);
- }
- void SPI_Transfer(uint8_t *txData,uint8_t *rxData,uint8_t size)
- {
- spi_transfer_t masterXfer;
- masterXfer.txData = txData;
- masterXfer.rxData = rxData;
- masterXfer.dataSize = size;
- SPI_MasterTransferBlocking(SPI0, &masterXfer);
- // while (masterFinished != true)
- // {
- // }
- }
- uint8_t SPI_ReadWriteByte(uint8_t inData)
- {
- uint8_t a = inData,b=0x00;
- SPI_Transfer(&a,&b,1);
- return b;
- }SPI的驱动代码
|
|
|
|
|
- #ifndef __W25QXX_H
- #define __W25QXX_H
- #include "spi.h"
- #define W25Q80 0X1451
- #define W25Q16 0XEF14
- #define W25Q32 0XEF15
- #define W25Q64 0XEF16
- #define W25Q128 0XEF17
- #define W25QXX_CS_Low SPI0_CS_Low
- #define W25QXX_CS_High SPI0_CS_High
- extern uint16_t W25QXX_TYPE; //¶¨ÒåW25QXXоƬÐͺÅ
- #define W25QXX_CS PBout(12) //W25QXXµÄƬѡÐźÅ
- ////////////////////////////////////////////////////////////////////////////
- //Ö¸Áî±í
- #define W25X_WriteEnable 0x06
- #define W25X_WriteDisable 0x04
- #define W25X_ReadStatusReg 0x05
- #define W25X_WriteStatusReg 0x01
- #define W25X_ReadData 0x03
- #define W25X_FastReadData 0x0B
- #define W25X_FastReadDual 0x3B
- #define W25X_PageProgram 0x02
- #define W25X_BlockErase 0xD8
- #define W25X_SectorErase 0x20
- #define W25X_ChipErase 0xC7
- #define W25X_PowerDown 0xB9
- #define W25X_ReleasePowerDown 0xAB
- #define W25X_DeviceID 0xAB
- #define W25X_ManufactDeviceID 0x90
- #define W25X_JedecDeviceID 0x9F
- uint16_t W25QXX_ReadID(void); //¶ÁÈ¡FLASH ID
- uint8_t W25QXX_ReadByte(uint32_t ReadAdress);
- void W25QXX_Read(uint8_t* pBuffer,uint32_t ReadAddr,uint16_t NumByteToRead);
- uint8_t W25QXX_ReadSR(void) ;
- void W25QXX_Write_SR(uint8_t sr);
- void W25QXX_Write_Enable(void);
- void W25QXX_Write_Disable(void);
- void W25QXX_Write_Page(uint8_t* pBuffer,uint32_t WriteAddr,uint16_t NumByteToWrite);
- void W25QXX_Write_NoCheck(uint8_t* pBuffer,uint32_t WriteAddr,uint16_t NumByteToWrite);
- void W25QXX_Write(uint8_t* pBuffer,uint32_t WriteAddr,uint16_t NumByteToWrite);
- void W25QXX_Erase_Sector(uint32_t Dst_Addr);
- #endif
|
|
|
|
|
- #include "w25qxx.h"
- void W25QXX_Wait_Busy(void);
- //¶ÁȡоƬID
- //·µ»ØÖµÈçÏÂ:
- //0XEF13,±íʾоƬÐͺÅΪW25Q80
- //0XEF14,±íʾоƬÐͺÅΪW25Q16
- //0XEF15,±íʾоƬÐͺÅΪW25Q32
- //0XEF16,±íʾоƬÐͺÅΪW25Q64
- //0XEF17,±íʾоƬÐͺÅΪW25Q128
- uint16_t W25QXX_ReadID(void)
- {
- uint16_t Temp = 0;
- uint8_t a,b;
- SPI_ReadWriteByte (0x00);//BUG
- W25QXX_CS_Low ;
- SPI_ReadWriteByte (0x90);
- SPI_ReadWriteByte (0x00);
- SPI_ReadWriteByte (0x00);
- SPI_ReadWriteByte (0x00);
- Temp|=SPI_ReadWriteByte(0xFF)<<8;
- Temp|=SPI_ReadWriteByte(0xFF);
- W25QXX_CS_High;
- return Temp;
- }
- /************************************************************
- * º¯ÊýÃû³Æ:uint8_t W25QXX_ReadSR(void)
- * º¯Êý¹¦ÄÜ:¶ÁÈ¡W25QXX״̬¼ÄÆ÷
- * Èë¿Ú²ÎÊý:
- * ³ö¿Ú²ÎÊý:
- * º¯Êý˵Ã÷:
- ************************************************************/
- uint8_t W25QXX_ReadSR(void)
- {
- uint8_t byte=0;
- SPI_ReadWriteByte (0x00);//BUG
- W25QXX_CS_Low; //????
- SPI_ReadWriteByte(W25X_ReadStatusReg); //???????????
- byte=SPI_ReadWriteByte(0Xff); //??????
- W25QXX_CS_High; //????
- return byte;
- }
- /************************************************************
- * º¯ÊýÃû³Æ:void W25QXX_Write_SR(uint8_t sr)
- * º¯Êý¹¦ÄÜ:дW25QXX״̬¼ÄÆ÷
- * Èë¿Ú²ÎÊý:
- * ³ö¿Ú²ÎÊý:
- * º¯Êý˵Ã÷:Ö»ÓÐSPR,TB,BP2,BP1,BP0(bit 7,5,4,3,2)¿ÉÒÔд£¡£¡
- ************************************************************/
- void W25QXX_Write_SR(uint8_t sr)
- {
- SPI_ReadWriteByte (0x00); //BUG
- W25QXX_CS_Low; //????
- SPI_ReadWriteByte(W25X_WriteStatusReg);//???????????
- SPI_ReadWriteByte(sr); //??????
- W25QXX_CS_High; //????
- }
- /************************************************************
- * º¯ÊýÃû³Æ:void W25QXX_Write_Enable(void)
- * º¯Êý¹¦ÄÜ:W25QXXдÔÊÐí
- * Èë¿Ú²ÎÊý:
- * ³ö¿Ú²ÎÊý:
- * º¯Êý˵Ã÷:
- ************************************************************/
- void W25QXX_Write_Enable(void)
- {
- SPI_ReadWriteByte (0x00); //BUG
- W25QXX_CS_Low; //????
- SPI_ReadWriteByte(W25X_WriteEnable); //?????
- W25QXX_CS_High; //????
- }
- /************************************************************
- * º¯ÊýÃû³Æ:void W25QXX_Write_Disable(void)
- * º¯Êý¹¦ÄÜ:W25QXX½ûֹд
- * Èë¿Ú²ÎÊý:
- * ³ö¿Ú²ÎÊý:
- * º¯Êý˵Ã÷:
- ************************************************************/
- void W25QXX_Write_Disable(void)
- {
- SPI_ReadWriteByte (0x00); //BUG
- W25QXX_CS_Low; //????
- SPI_ReadWriteByte(W25X_WriteDisable); //???????
- W25QXX_CS_High; //????
- }
- /************************************************************
- * º¯ÊýÃû³Æ:void W25QXX_Read(uint8_t* pBuffer,uint32_t ReadAddr,uint16_t NumByteToRead)
- * º¯Êý¹¦ÄÜ:W25QXX¶Á
- * Èë¿Ú²ÎÊý:pBuff:Êý¾Ý´æ´¢Çø-ReadAddr£º24bitµØÖ·--NumByteToRead£ºÒª¶ÁÈ¡µÄ×Ö½ÚÊý£¨×î´ó65535£©
- * ³ö¿Ú²ÎÊý:
- * º¯Êý˵Ã÷:
- ************************************************************/
- void W25QXX_Read(uint8_t* pBuffer,uint32_t ReadAddr,uint16_t NumByteToRead)
- {
- uint16_t i;
- SPI_ReadWriteByte (0x00); //BUG
- W25QXX_CS_Low; //????
- SPI_ReadWriteByte(W25X_ReadData); //??????
- SPI_ReadWriteByte((uint8_t)((ReadAddr)>>16)); //??24bit??
- SPI_ReadWriteByte((uint8_t)((ReadAddr)>>8));
- SPI_ReadWriteByte((uint8_t)ReadAddr);
- for(i=0;i {
- pBuffer=SPI_ReadWriteByte(0XFF); //????
- }
- W25QXX_CS_High;
- }
- /************************************************************
- * º¯ÊýÃû³Æ:void W25QXX_Write_Page(uint8_t* pBuffer,uint32_t WriteAddr,uint16_t NumByteToWrite)
- * º¯Êý¹¦ÄÜ:W25QXXҳд
- * Èë¿Ú²ÎÊý:pBuff:Êý¾Ý´æ´¢Çø-ReadAddr£º24bitµØÖ·--NumByteToRead£ºÒªÐ´ÈëµÄ×Ö½ÚÊý£¨×î´ó256£©
- * ³ö¿Ú²ÎÊý:
- * º¯Êý˵Ã÷:
- ************************************************************/
- void W25QXX_Write_Page(uint8_t* pBuffer,uint32_t WriteAddr,uint16_t NumByteToWrite)
- {
- uint16_t i;
- W25QXX_Write_Enable(); //SET WEL
- SPI_ReadWriteByte (0x00); //BUG
- W25QXX_CS_Low; //????
- SPI_ReadWriteByte(W25X_PageProgram); //??????
- SPI_ReadWriteByte((uint8_t)((WriteAddr)>>16)); //??24bit??
- SPI_ReadWriteByte((uint8_t)((WriteAddr)>>8));
- SPI_ReadWriteByte((uint8_t)WriteAddr);
- for(i=0;i);//????
- W25QXX_CS_High; //????
- W25QXX_Wait_Busy(); //??????
- }
- /************************************************************
- * º¯ÊýÃû³Æ:25QXX_Write_NoCheck(uint8_t* pBuffer,uint32_t WriteAddr,uint16_t NumByteToWrite)
- * º¯Êý¹¦ÄÜ:ÎÞУÑéдW25QXX
- * Èë¿Ú²ÎÊý:pBuff:Êý¾Ý´æ´¢Çø-ReadAddr£º24bitµØÖ·--NumByteToRead£ºÒªÐ´ÈëµÄ×Ö½ÚÊý£¨×î´ó65535£©
- * ³ö¿Ú²ÎÊý:
- * º¯Êý˵Ã÷:
- ************************************************************/
- void W25QXX_Write_NoCheck(uint8_t* pBuffer,uint32_t WriteAddr,uint16_t NumByteToWrite)
- {
- uint16_t pageremain;
- pageremain=256-WriteAddr%256; //????????
- if(NumByteToWrite<=pageremain)pageremain=NumByteToWrite;//???256???
- while(1)
- {
- W25QXX_Write_Page(pBuffer,WriteAddr,pageremain);
- if(NumByteToWrite==pageremain)break;//?????
- else //NumByteToWrite>pageremain
- {
- pBuffer+=pageremain;
- WriteAddr+=pageremain;
- NumByteToWrite-=pageremain; //???????????
- if(NumByteToWrite>256)pageremain=256; //??????256???
- else pageremain=NumByteToWrite; //??256????
- }
- };
- }
- /************************************************************
- * º¯ÊýÃû³Æ:W25QXX_Write(uint8_t* pBuffer,uint32_t WriteAddr,uint16_t NumByteToWrite)
- * º¯Êý¹¦ÄÜ:дSPI Flash
- * Èë¿Ú²ÎÊý:pBuff:Êý¾Ý´æ´¢Çø-ReadAddr£º24bitµØÖ·--NumByteToRead£ºÒªÐ´ÈëµÄ×Ö½ÚÊý£¨×î´ó65535£©
- * ³ö¿Ú²ÎÊý:
- * º¯Êý˵Ã÷:
- ************************************************************/
- uint8_t W25QXX_BUFFER[4096];
- void W25QXX_Write(uint8_t* pBuffer,uint32_t WriteAddr,uint16_t NumByteToWrite)
- {
- uint32_t secpos;
- uint16_t secoff;
- uint16_t secremain;
- uint16_t i;
- uint8_t * W25QXX_BUF;
- W25QXX_BUF=W25QXX_BUFFER;
- secpos=WriteAddr/4096;//????
- secoff=WriteAddr%4096;//???????
- secremain=4096-secoff;//????????
- //printf("ad:%X,nb:%Xrn",WriteAddr,NumByteToWrite);//???
- if(NumByteToWrite<=secremain)secremain=NumByteToWrite;//???4096???
- while(1)
- {
- W25QXX_Read(W25QXX_BUF,secpos*4096,4096);//?????????
- for(i=0;i {
- if(W25QXX_BUF[secoff+i]!=0XFF)break;//????
- }
- if(i {
- W25QXX_Erase_Sector(secpos); //??????
- for(i=0;i {
- W25QXX_BUF[i+secoff]=pBuffer;
- }
- W25QXX_Write_NoCheck(W25QXX_BUF,secpos*4096,4096);//??????
- }else W25QXX_Write_NoCheck(pBuffer,WriteAddr,secremain);//???????,??????????.
- if(NumByteToWrite==secremain)break;//?????
- else//?????
- {
- secpos++;//?????1
- secoff=0;//?????0
- pBuffer+=secremain; //????
- WriteAddr+=secremain; //?????
- NumByteToWrite-=secremain; //?????
- if(NumByteToWrite>4096)secremain=4096;//??????????
- else secremain=NumByteToWrite; //??????????
- }
- };
- }
- /************************************************************
- * º¯ÊýÃû³Æ:void W25QXX_Erase_Chip(void)
- * º¯Êý¹¦ÄÜ:²Á³ýÕû¸öоƬ£¬µÈ´ýʱ¼ä½Ï³¤
- * Èë¿Ú²ÎÊý:
- * ³ö¿Ú²ÎÊý:
- * º¯Êý˵Ã÷:
- ************************************************************/
- void W25QXX_Erase_Chip(void)
- {
- W25QXX_Write_Enable(); //SET WEL
- W25QXX_Wait_Busy();
- SPI_ReadWriteByte (0x00); //BUG
- W25QXX_CS_Low; //????
- SPI_ReadWriteByte(W25X_ChipErase); //???????
- W25QXX_CS_High; //????
- W25QXX_Wait_Busy(); //????????
- }
- /************************************************************
- * º¯ÊýÃû³Æ:void W25QXX_Erase_Sector(uint32_t Dst_Addr)
- * º¯Êý¹¦ÄÜ:²Á³ýÒ»¸öÉÈÇø
- * Èë¿Ú²ÎÊý:Dst_Addr£ºÉÈÇøµØÖ·
- * ³ö¿Ú²ÎÊý:
- * º¯Êý˵Ã÷:
- ************************************************************/
- void W25QXX_Erase_Sector(uint32_t Dst_Addr)
- {
- //??falsh????,???
- //printf("fe:%xrn",Dst_Addr);
- Dst_Addr*=4096;
- W25QXX_Write_Enable(); //SET WEL
- W25QXX_Wait_Busy();
- SPI_ReadWriteByte (0x00); //BUG
- W25QXX_CS_Low; //????
- SPI_ReadWriteByte(W25X_SectorErase); //????????
- SPI_ReadWriteByte((uint8_t)((Dst_Addr)>>16)); //??24bit??
- SPI_ReadWriteByte((uint8_t)((Dst_Addr)>>8));
- SPI_ReadWriteByte((uint8_t)Dst_Addr);
- W25QXX_CS_High; //????
- W25QXX_Wait_Busy(); //??????
- }
- /************************************************************
- * º¯ÊýÃû³Æ:void W25QXX_Wait_Busy(void)
- * º¯Êý¹¦ÄÜ:µÈ´ý¿ÕÏÐ
- * Èë¿Ú²ÎÊý:
- * ³ö¿Ú²ÎÊý:
- * º¯Êý˵Ã÷:
- ************************************************************/
- void W25QXX_Wait_Busy(void)
- {
- while((W25QXX_ReadSR()&0x01)==0x01); // ??BUSY???
- }
- /************************************************************
- * º¯ÊýÃû³Æ:void W25QXX_PowerDown(void)
- * º¯Êý¹¦ÄÜ:½øÈëµôµçģʽ
- * Èë¿Ú²ÎÊý:
- * ³ö¿Ú²ÎÊý:
- * º¯Êý˵Ã÷:
- ************************************************************/
- void W25QXX_PowerDown(void)
- {
- SPI_ReadWriteByte (0x00); //BUG
- W25QXX_CS_Low; //????
- SPI_ReadWriteByte(W25X_PowerDown); //??????
- W25QXX_CS_High; //????
- //delay_us(3); //??TPD
- __asm("NOP");
- __asm("NOP");
- __asm("NOP");
- __asm("NOP");
- __asm("NOP");
- __asm("NOP");
- __asm("NOP");
- __asm("NOP");
- }
- /************************************************************
- * º¯ÊýÃû³Æ:void W25QXX_WAKEUP(void)
- * º¯Êý¹¦ÄÜ:»½ÐÑ
- * Èë¿Ú²ÎÊý:
- * ³ö¿Ú²ÎÊý:
- * º¯Êý˵Ã÷:
- ************************************************************/
- void W25QXX_WAKEUP(void)
- {
- SPI_ReadWriteByte (0x00); //BUG
- W25QXX_CS_Low; //????
- SPI_ReadWriteByte(W25X_ReleasePowerDown); // send W25X_PowerDown command 0xAB
- W25QXX_CS_High; //????
- //delay_us(3); //??TRES1
- __asm("NOP");
- __asm("NOP");
- __asm("NOP");
- __asm("NOP");
- __asm("NOP");
- __asm("NOP");
- __asm("NOP");
- __asm("NOP");
- }
|
|
|
|
|