From 19e46b08b4f88eee49619f4c968c835bf75e60b7 Mon Sep 17 00:00:00 2001 From: tpu Date: Thu, 8 May 2025 17:19:22 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B5=8B=E8=AF=95SPI=20Flash=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Keil_5/ble_app_peripheral.uvoptx | 10 +- pinout_0.xlsx | Bin 0 -> 11839 bytes pinout_1.xlsx | Bin 0 -> 11826 bytes src/epd/epd.h | 11 +- src/epd/spi_flash.c | 202 +++++++++++++++---------------- src/user_peripheral.c | 7 +- 6 files changed, 118 insertions(+), 112 deletions(-) create mode 100644 pinout_0.xlsx create mode 100644 pinout_1.xlsx diff --git a/Keil_5/ble_app_peripheral.uvoptx b/Keil_5/ble_app_peripheral.uvoptx index 0579de1..c162e6a 100644 --- a/Keil_5/ble_app_peripheral.uvoptx +++ b/Keil_5/ble_app_peripheral.uvoptx @@ -120,7 +120,7 @@ 0 DLGUARM - d + 0 @@ -149,6 +149,14 @@ + + + 1 + 0 + 0x07f8ff00 + 0 + + 0 diff --git a/pinout_0.xlsx b/pinout_0.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..40bdaf1a179dbfd0ecf83fd9b1c8e0fd345705d1 GIT binary patch literal 11839 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 literal 0 HcmV?d00001 diff --git a/src/epd/epd.h b/src/epd/epd.h index c3ac9cb..092af19 100644 --- a/src/epd/epd.h +++ b/src/epd/epd.h @@ -17,11 +17,12 @@ int gpio_get(int index); // spi flash -int fspi_init(u32 gpio_word); -int epcs_readid(void); -int epcs_sector_erase(int addr); -int epcs_page_write(int addr, u8 *buf, int size); -int epcs_read(int addr, int len, u8 *buf); +int fspi_config(u32 gpio_word); +int fspi_init(void); +int sf_readid(void); +int sf_sector_erase(int addr); +int sf_page_write(int addr, u8 *buf, int size); +int sf_read(int addr, int len, u8 *buf); // epd_hw void epd_hw_init(u32 config0, u32 config1); diff --git a/src/epd/spi_flash.c b/src/epd/spi_flash.c index 3e87e50..f14edfe 100644 --- a/src/epd/spi_flash.c +++ b/src/epd/spi_flash.c @@ -3,230 +3,222 @@ +#define SPI_CTRL0 *(volatile unsigned short*)(0x50001200) +#define SPI_RXTX0 *(volatile unsigned short*)(0x50001202) +#define SPI_RXTX1 *(volatile unsigned short*)(0x50001204) +#define SPI_IACK *(volatile unsigned short*)(0x50001206) +#define SPI_CTRL1 *(volatile unsigned short*)(0x50001208) + static int spio_clk; static int spio_cs; static int spio_di; static int spio_do; +#define BIT_8 0 +#define BIT_16 1 +#define BIT_32 2 + +static int spi_bitmode; + /******************************************************************************/ -#define FSPI_DELAY 10 +#define FSPI_CS(n) gpio_set(spio_cs, (n)); -void fspi_delay(void) +void fspi_set_bitmode(int mode) { - int i; + spi_bitmode = mode; - for(i=0; i>16; } + SPI_RXTX0 = data; + while((SPI_CTRL0&0x2000)==0); + SPI_IACK = 0; + + data = SPI_RXTX0; + if(spi_bitmode==BIT_8){ + data &= 0xff; + }else if(spi_bitmode==BIT_32){ + data |= (SPI_RXTX1)<<16; + } return data; } -int fspi_init(u32 gpio_word) +int fspi_config(u32 gpio_word) { spio_clk = (gpio_word>>24)&0xff; spio_cs = (gpio_word>>16)&0xff; - spio_di = (gpio_word>> 8)&0xff; - spio_do = (gpio_word>> 0)&0xff; + spio_do = (gpio_word>> 8)&0xff; + spio_di = (gpio_word>> 0)&0xff; + + return 0; +} + + +int fspi_init(void) +{ + SetBits16(CLK_PER_REG, SPI_ENABLE, 1); - gpio_config(spio_clk, 0x0300, 0); gpio_config(spio_cs, 0x0300, 1); - gpio_config(spio_di, 0x0300, 1); - gpio_config(spio_do, 0x0100, 1); - + gpio_config(spio_clk, 0x0307, 0); + gpio_config(spio_do, 0x0306, 1); + gpio_config(spio_di, 0x0105, 1); + + SPI_CTRL0 = 0x0010; + fspi_set_bitmode(BIT_32); + FSPI_CS(0); - fspi_delay(); - fspi_trans(0xab); + fspi_trans(0xab000000); FSPI_CS(1); return 0; } +int fspi_exit(void) +{ + SPI_CTRL0 = 0; + SetBits16(CLK_PER_REG, SPI_ENABLE, 0); + + gpio_config(spio_cs, 0x0300, 1); + gpio_config(spio_clk, 0x0300, 0); + gpio_config(spio_do, 0x0300, 0); + gpio_config(spio_di, 0x0100, 0); + return 0; +} + + /******************************************************************************/ /* SPI flash */ /******************************************************************************/ -int epcs_readid(void) +int sf_readid(void) { - int mid, pid; - + fspi_set_bitmode(BIT_32); FSPI_CS(0); - fspi_delay(); - - fspi_trans(0x90); - fspi_trans(0); - fspi_trans(0); - fspi_trans(0); - - mid = fspi_trans(0); - pid = fspi_trans(0); - + fspi_trans(0x90000000); + int id = fspi_trans(0); FSPI_CS(1); - fspi_delay(); - return (mid<<8)|pid; + return id; } -int epcs_status(void) +int sf_status(void) { int status; + fspi_set_bitmode(BIT_16); FSPI_CS(0); - fspi_delay(); - fspi_trans(0x05); - status = fspi_trans(0); + status = fspi_trans(0x0500); FSPI_CS(1); - fspi_delay(); return status; } -int epcs_wstat(int stat) +int sf_wstat(int stat) { + // status write enable + fspi_set_bitmode(BIT_8); FSPI_CS(0); - fspi_delay(); fspi_trans(0x50); FSPI_CS(1); - fspi_delay(); + fspi_set_bitmode(BIT_16); FSPI_CS(0); - fspi_delay(); - fspi_trans(0x01); - fspi_trans(stat); + fspi_trans(0x0100|stat); FSPI_CS(1); - fspi_delay(); return 0; } -int epcs_wen(int en) +int sf_wen(int en) { + fspi_set_bitmode(BIT_8); FSPI_CS(0); - fspi_delay(); if(en) fspi_trans(0x06); else fspi_trans(0x04); FSPI_CS(1); - fspi_delay(); return 0; } -int epcs_wait() +int sf_wait() { int status; while(1){ - status = epcs_status(); + status = sf_status(); if((status&1)==0) break; - fspi_delay(); } return 0; } -int epcs_sector_erase(int addr) +int sf_sector_erase(int addr) { - epcs_wen(1); + sf_wen(1); + fspi_set_bitmode(BIT_32); FSPI_CS(0); - fspi_delay(); - - fspi_trans(0x20); - fspi_trans((addr>>16)&0xff); - fspi_trans((addr>> 8)&0xff); - fspi_trans((addr>> 0)&0xff); - + fspi_trans(0x20000000|addr); FSPI_CS(1); - fspi_delay(); - epcs_wait(); + sf_wait(); return 0; } -int epcs_page_write(int addr, u8 *buf, int size) +int sf_page_write(int addr, u8 *buf, int size) { int i; - epcs_wen(1); + sf_wen(1); + fspi_set_bitmode(BIT_32); FSPI_CS(0); - fspi_delay(); - fspi_trans(0x02); - fspi_trans((addr>>16)&0xff); - fspi_trans((addr>> 8)&0xff); - fspi_trans((addr>> 0)&0xff); - - for(i=0; i>16)&0xff); - fspi_trans((addr>> 8)&0xff); - fspi_trans((addr>> 0)&0xff); + fspi_trans(0x03000000|addr); - fspi_trans(0); - - for(i=0; i