|
@@ -90,13 +90,18 @@ void w25x20cl_wr_status_reg(uint8_t val)
|
|
|
}
|
|
|
#endif
|
|
|
|
|
|
-void xflash_rd_data(uint32_t addr, uint8_t* data, uint16_t cnt)
|
|
|
+static void xflash_send_cmdaddr(uint8_t cmd, uint32_t addr)
|
|
|
{
|
|
|
- _CS_LOW();
|
|
|
- _SPI_TX(_CMD_RD_DATA); // send command 0x03
|
|
|
+ _SPI_TX(cmd); // send command 0x03
|
|
|
_SPI_TX(((uint8_t*)&addr)[2]); // send addr bits 16..23
|
|
|
_SPI_TX(((uint8_t*)&addr)[1]); // send addr bits 8..15
|
|
|
_SPI_TX(((uint8_t*)&addr)[0]); // send addr bits 0..7
|
|
|
+}
|
|
|
+
|
|
|
+void xflash_rd_data(uint32_t addr, uint8_t* data, uint16_t cnt)
|
|
|
+{
|
|
|
+ _CS_LOW();
|
|
|
+ xflash_send_cmdaddr(_CMD_RD_DATA, addr);
|
|
|
while (cnt--) // receive data
|
|
|
*(data++) = _SPI_RX();
|
|
|
_CS_HIGH();
|
|
@@ -105,10 +110,7 @@ void xflash_rd_data(uint32_t addr, uint8_t* data, uint16_t cnt)
|
|
|
void xflash_page_program(uint32_t addr, uint8_t* data, uint16_t cnt)
|
|
|
{
|
|
|
_CS_LOW();
|
|
|
- _SPI_TX(_CMD_PAGE_PROGRAM); // send command 0x02
|
|
|
- _SPI_TX(((uint8_t*)&addr)[2]); // send addr bits 16..23
|
|
|
- _SPI_TX(((uint8_t*)&addr)[1]); // send addr bits 8..15
|
|
|
- _SPI_TX(((uint8_t*)&addr)[0]); // send addr bits 0..7
|
|
|
+ xflash_send_cmdaddr(_CMD_PAGE_PROGRAM, addr);
|
|
|
while (cnt--) // send data
|
|
|
_SPI_TX(*(data++));
|
|
|
_CS_HIGH();
|
|
@@ -117,10 +119,7 @@ void xflash_page_program(uint32_t addr, uint8_t* data, uint16_t cnt)
|
|
|
void xflash_page_program_P(uint32_t addr, uint8_t* data, uint16_t cnt)
|
|
|
{
|
|
|
_CS_LOW();
|
|
|
- _SPI_TX(_CMD_PAGE_PROGRAM); // send command 0x02
|
|
|
- _SPI_TX(((uint8_t*)&addr)[2]); // send addr bits 16..23
|
|
|
- _SPI_TX(((uint8_t*)&addr)[1]); // send addr bits 8..15
|
|
|
- _SPI_TX(((uint8_t*)&addr)[0]); // send addr bits 0..7
|
|
|
+ xflash_send_cmdaddr(_CMD_PAGE_PROGRAM, addr);
|
|
|
while (cnt--) // send data
|
|
|
_SPI_TX(pgm_read_byte(data++));
|
|
|
_CS_HIGH();
|
|
@@ -129,10 +128,7 @@ void xflash_page_program_P(uint32_t addr, uint8_t* data, uint16_t cnt)
|
|
|
void xflash_erase(uint8_t cmd, uint32_t addr)
|
|
|
{
|
|
|
_CS_LOW();
|
|
|
- _SPI_TX(cmd); // send command 0x20
|
|
|
- _SPI_TX(((uint8_t*)&addr)[2]); // send addr bits 16..23
|
|
|
- _SPI_TX(((uint8_t*)&addr)[1]); // send addr bits 8..15
|
|
|
- _SPI_TX(((uint8_t*)&addr)[0]); // send addr bits 0..7
|
|
|
+ xflash_send_cmdaddr(cmd, addr);
|
|
|
_CS_HIGH();
|
|
|
}
|
|
|
|