From 0bc1146ffd7033e0ce64e42d18bfcafe29ba792e Mon Sep 17 00:00:00 2001 From: "S.J.R. van Schaik" Date: Fri, 7 Apr 2017 17:32:43 +0200 Subject: [PATCH] flash: separate SPI flash commands --- include/spi_flash.h | 18 ++++++++++++++++++ source/drivers/spi_flash.c | 33 +++++++++++---------------------- 2 files changed, 29 insertions(+), 22 deletions(-) create mode 100644 include/spi_flash.h diff --git a/include/spi_flash.h b/include/spi_flash.h new file mode 100644 index 0000000..b65048f --- /dev/null +++ b/include/spi_flash.h @@ -0,0 +1,18 @@ +#pragma once + +#define SPI_FLASH_UNIQ_ID 0x4b +#define SPI_FLASH_MFR_DEV_ID 0x90 +#define SPI_FLASH_JEDEC_ID 0x9f + +#define SPI_FLASH_READ 0x03 + +#define SPI_FLASH_PAGE_PROGRAM 0x02 +#define SPI_FLASH_WRITE_ENABLE 0x06 +#define SPI_FLASH_WRITE_DISABLE 0x04 + +#define SPI_FLASH_ERASE_4K 0x20 +#define SPI_FLASH_ERASE_32K 0x52 +#define SPI_FLASH_ERASE_64K 0xd8 +#define SPI_FLASH_ERASE_CHIP 0xc7 + +#define SPI_FLASH_SIZE(x) (1 << (x)) diff --git a/source/drivers/spi_flash.c b/source/drivers/spi_flash.c index 765e22a..64a20dd 100644 --- a/source/drivers/spi_flash.c +++ b/source/drivers/spi_flash.c @@ -5,21 +5,7 @@ #include #include #include - -/* Read commands */ -#define CMD_READ_ARRAY_SLOW 0x03 -#define CMD_READ_ID 0x9f - -/* Write commands */ -#define CMD_PAGE_PROGRAM 0x02 -#define CMD_WRITE_DISABLE 0x04 -#define CMD_WRITE_ENABLE 0x06 - -/* Erase commands */ -#define CMD_ERASE_4K 0x20 -#define CMD_ERASE_32K 0x52 -#define CMD_ERASE_64K 0xD8 -#define CMD_ERASE_CHIP 0x60 +#include static int spi_flash_read(struct flash_dev *dev, uint32_t addr, void *data, size_t len); @@ -42,7 +28,7 @@ static void spi_flash_addr(char *cmd, uint32_t addr) static void spi_flash_write_enable(struct flash_dev *dev) { - char cmd[1] = { CMD_WRITE_ENABLE }; + char cmd[1] = { SPI_FLASH_WRITE_ENABLE }; struct spi_dev *spi_dev = dev->priv; spi_set_cs_level(spi_dev, 0); @@ -52,7 +38,7 @@ static void spi_flash_write_enable(struct flash_dev *dev) static void spi_flash_write_disable(struct flash_dev *dev) { - char cmd[1] = { CMD_WRITE_DISABLE }; + char cmd[1] = { SPI_FLASH_WRITE_DISABLE }; struct spi_dev *spi_dev = dev->priv; spi_set_cs_level(spi_dev, 0); @@ -63,7 +49,7 @@ static void spi_flash_write_disable(struct flash_dev *dev) static int spi_flash_read(struct flash_dev *dev, uint32_t addr, void *data, size_t len) { - char cmd[4] = { CMD_READ_ARRAY_SLOW }; + char cmd[4] = { SPI_FLASH_READ }; struct spi_dev *spi_dev = dev->priv; spi_flash_addr(cmd, addr); @@ -79,7 +65,7 @@ static int spi_flash_read(struct flash_dev *dev, uint32_t addr, void *data, static int spi_flash_write(struct flash_dev *dev, uint32_t addr, const void *data, size_t len) { - char cmd[4] = { CMD_PAGE_PROGRAM }; + char cmd[4] = { SPI_FLASH_PAGE_PROGRAM }; struct spi_dev *spi_dev = dev->priv; spi_flash_write_enable(dev); @@ -115,9 +101,9 @@ static int spi_flash_erase(struct flash_dev *dev, uint32_t addr, size_t len) size = 0; switch (size) { - case 64 * KIB: cmd[0] = CMD_ERASE_64K; break; - case 32 * KIB: cmd[0] = CMD_ERASE_32K; break; - case 4 * KIB: cmd[0] = CMD_ERASE_4K; break; + case 64 * KIB: cmd[0] = SPI_FLASH_ERASE_64K; break; + case 32 * KIB: cmd[0] = SPI_FLASH_ERASE_32K; break; + case 4 * KIB: cmd[0] = SPI_FLASH_ERASE_4K; break; default: goto err_disable_write; }; @@ -155,6 +141,9 @@ err_free_dev: void flash_release(struct flash_dev *dev) { + if (!dev) + return; + spi_release(dev->priv); free(dev); }