123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 |
- #include "gd32f10x.h"
- #include "spi.h"
- #include "w25q32.h"
- void W25Q32_Init(void)
- {
- rcu_periph_clock_enable(RCU_GPIOA);
- gpio_init(GPIOA,GPIO_MODE_OUT_PP,GPIO_OSPEED_50MHZ,GPIO_PIN_4);
- CS_DISENABLE;
- SPI0_Init();
- }
- void W25Q32_WaitBusy(void)
- {
- uint8_t res;
-
- do{
- CS_ENABLE;
- SPI0_ReadWriteByte(0x05);
- res = SPI0_ReadWriteByte(0xff);
- CS_DISENABLE;
- }while((res&0x01)==0x01);
- }
- void W25Q32_Enable(void)
- {
- W25Q32_WaitBusy();
- CS_ENABLE;
- SPI0_ReadWriteByte(0x06);
- CS_DISENABLE;
- }
- void W25Q32_Erase64K(uint8_t blockNB)
- {
- uint8_t wdata[4];
-
- wdata[0] = 0xD8;
- wdata[1] = (blockNB*64*1024)>>16;
- wdata[2] = (blockNB*64*1024)>>8;
- wdata[3] = (blockNB*64*1024)>>0;
-
- W25Q32_WaitBusy();
- W25Q32_Enable();
- CS_ENABLE;
- SPI0_Write(wdata,4);
- CS_DISENABLE;
- W25Q32_WaitBusy();
- }
- void W25Q32_PageWrite(uint8_t *wbuff, uint16_t pageNB)
- {
- uint8_t wdata[4];
-
- wdata[0] = 0x02;
- wdata[1] = (pageNB*256)>>16;
- wdata[2] = (pageNB*256)>>8;
- wdata[3] = (pageNB*256)>>0;
-
- W25Q32_WaitBusy();
- W25Q32_Enable();
- CS_ENABLE;
- SPI0_Write(wdata,4);
- SPI0_Write(wbuff,256);
- CS_DISENABLE;
- }
- void W25Q32_Read(uint8_t *rbuff, uint32_t addr, uint32_t datalen)
- {
- uint8_t wdata[4];
-
- wdata[0] = 0x03;
- wdata[1] = (addr)>>16;
- wdata[2] = (addr)>>8;
- wdata[3] = (addr)>>0;
-
- W25Q32_WaitBusy();
- CS_ENABLE;
- SPI0_Write(wdata,4);
- SPI0_Read(rbuff,datalen);
- CS_DISENABLE;
- }
|