From 0f1fb69e99a56934f34dfb0eeb9703322e55f128 Mon Sep 17 00:00:00 2001 From: schneider <schneider@blinkenlichts.net> Date: Fri, 3 May 2019 00:21:33 +0200 Subject: [PATCH] feat(GD25): Hack GD25 support into the MX25 code --- sdk/Libraries/Boards/Include/mx25.h | 26 +++++++++++++++++ sdk/Libraries/Boards/Source/mx25.c | 43 +++++++++++++++++++++++++++++ 2 files changed, 69 insertions(+) diff --git a/sdk/Libraries/Boards/Include/mx25.h b/sdk/Libraries/Boards/Include/mx25.h index 8752edc8..fa93b4f2 100644 --- a/sdk/Libraries/Boards/Include/mx25.h +++ b/sdk/Libraries/Boards/Include/mx25.h @@ -49,6 +49,8 @@ #include "spixfc.h" #include "mxc_errors.h" +#define GD25 1 + #ifdef __cplusplus extern "C" { #endif @@ -65,7 +67,11 @@ extern "C" { #define MX25_WIP_MASK 0x01 /**< Status Register */ #define MX25_WEL_MASK 0x02 /**< Write Enable Latch mask */ +#if GD25 +#define MX25_QE_MASK 0x02 /**< Quad-SPI enable mask */ +#else #define MX25_QE_MASK 0x40 /**< Quad-SPI enable mask */ +#endif #define MX25_WP_MASK 0x80 /**< Write protect enable mask */ /** @@ -85,10 +91,22 @@ extern "C" { #define MX25_CMD_HPM 0xA3 /**< Hardware Protection Mode */ #define MX25_CMD_READ_SR 0x05 /**< Read Status Register */ +#if GD25 +#define MX25_CMD_READ_SR2 0x35 /**< Read Status Register */ +#define MX25_CMD_READ_SR3 0x15 /**< Read Status Register */ +#endif #define MX25_CMD_WRITE_SR 0x01 /**< Write Status Register */ +#if GD25 +#define MX25_CMD_WRITE_SR2 0x31 /**< Write Status Register */ +#define MX25_CMD_WRITE_SR3 0x11 /**< Write Status Register */ +#endif #define MX25_CMD_PPROG 0x02 /**< Page Program */ +#if GD25 +#define MX25_CMD_QUAD_PROG 0X32 /**< Quad (4 x I/O) Page Program */ +#else #define MX25_CMD_QUAD_PROG 0X38 /**< Quad (4 x I/O) Page Program */ +#endif #define MX25_CMD_4K_ERASE 0x20 /**< Page Erase */ #define MX25_CMD_32K_ERASE 0x52 /**< Sector Type 2 (32KB) Erase */ @@ -192,12 +210,20 @@ int MX25_Erase(uint32_t address, MX25_Erase_t size); * @param buf Pointer to store the value of the status register. */ int MX25_Read_SR(uint8_t* buf); +#if GD25 +int MX25_Read_SR2(uint8_t* buf); +int MX25_Read_SR3(uint8_t* buf); +#endif /** * @brief Write status register * @param value Value to write to the status register. */ int MX25_Write_SR(uint8_t value); +#if GD25 +int MX25_Write_SR2(uint8_t value); +int MX25_Write_SR3(uint8_t value); +#endif /**@} end of group mx25_driver */ #ifdef __cplusplus diff --git a/sdk/Libraries/Boards/Source/mx25.c b/sdk/Libraries/Boards/Source/mx25.c index 103c1bef..9709c9a8 100644 --- a/sdk/Libraries/Boards/Source/mx25.c +++ b/sdk/Libraries/Boards/Source/mx25.c @@ -189,7 +189,11 @@ int MX25_Quad(int enable) uint8_t post_buf; int err; +#if GD25 + MX25_Read_SR2(&pre_buf); +#else MX25_Read_SR(&pre_buf); +#endif if(enable) { pre_buf |= MX25_QE_MASK; @@ -201,13 +205,21 @@ int MX25_Quad(int enable) return E_BAD_STATE; } +#if GD25 + if(MX25_Write_SR2(pre_buf) != E_NO_ERROR) { +#else if(MX25_Write_SR(pre_buf) != E_NO_ERROR) { +#endif return E_COMM_ERR; } while(flash_busy()) {} +#if GD25 + if(MX25_Read_SR2(&post_buf) != E_NO_ERROR) { +#else if(MX25_Read_SR(&post_buf) != E_NO_ERROR) { +#endif return E_COMM_ERR; } @@ -377,7 +389,11 @@ int MX25_Program_Page(uint32_t address, const uint8_t *tx_buf, uint32_t tx_len, } // Send the address +#if GD25 + if(MX25_Board_Write(&cmd[1],3,0,SPIXFC_WIDTH_1) != 3) { +#else if(MX25_Board_Write(&cmd[1],3,0,width) != 3) { +#endif return E_COMM_ERR; } } @@ -497,7 +513,20 @@ int MX25_Read_SR(uint8_t* buf) return read_reg(cmd, buf); } +#if GD25 +int MX25_Read_SR2(uint8_t* buf) +{ + uint8_t cmd = MX25_CMD_READ_SR2; + + return read_reg(cmd, buf); +} +int MX25_Read_SR3(uint8_t* buf) +{ + uint8_t cmd = MX25_CMD_READ_SR3; + return read_reg(cmd, buf); +} +#endif /* ************************************************************************* */ int MX25_Write_SR(uint8_t value) { @@ -505,4 +534,18 @@ int MX25_Write_SR(uint8_t value) return write_reg(cmd, 2); } +#if GD25 +int MX25_Write_SR2(uint8_t value) +{ + uint8_t cmd[2] = {MX25_CMD_WRITE_SR2, value}; + + return write_reg(cmd, 2); +} +int MX25_Write_SR3(uint8_t value) +{ + uint8_t cmd[2] = {MX25_CMD_WRITE_SR3, value}; + + return write_reg(cmd, 2); +} +#endif /**@} end of ingroup mx25 */ -- GitLab