From be73bfff74eb5de6c7eaf8a911fd020b468db924 Mon Sep 17 00:00:00 2001 From: patacongo Date: Sun, 12 Sep 2010 13:21:04 +0000 Subject: Extend support to other chips in the family git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@2941 42af7a65-404d-4744-a932-0658087f49c3 --- nuttx/drivers/mtd/at45db.c | 66 +++++++++++++++++++++++++++++++++++----------- 1 file changed, 50 insertions(+), 16 deletions(-) (limited to 'nuttx/drivers/mtd') diff --git a/nuttx/drivers/mtd/at45db.c b/nuttx/drivers/mtd/at45db.c index f84db48ad..c90dd4550 100644 --- a/nuttx/drivers/mtd/at45db.c +++ b/nuttx/drivers/mtd/at45db.c @@ -150,9 +150,15 @@ #define AT45DB_MANUFACTURER 0x1f /* Manufacturer ID: Atmel */ #define AT45DB_DEVID1_CAPMSK 0x1f /* Bits 0-4: Capacity */ -#define AT45DB_DEVID1_16MBIT 0x06 /* xxx0 0110 = 16Mbit */ +#define AT45DB_DEVID1_1MBIT 0x02 /* xxx0 0010 = 1Mbit AT45DB011 */ +#define AT45DB_DEVID1_2MBIT 0x03 /* xxx0 0012 = 2Mbit AT45DB021 */ +#define AT45DB_DEVID1_4MBIT 0x04 /* xxx0 0100 = 4Mbit AT45DB041 */ +#define AT45DB_DEVID1_8MBIT 0x05 /* xxx0 0101 = 8Mbit AT45DB081 */ +#define AT45DB_DEVID1_16MBIT 0x06 /* xxx0 0110 = 16Mbit AT45DB161 */ +#define AT45DB_DEVID1_32MBIT 0x07 /* xxx0 0111 = 32Mbit AT45DB321 */ #define AT45DB_DEVID1_FAMMSK 0xe0 /* Bits 5-7: Family */ #define AT45DB_DEVID1_DFLASH 0x20 /* 001x xxxx = Dataflash */ +#define AT45DB_DEVID1_AT26DF 0x40 /* 010x xxxx = AT26DFxxx series (Not supported) */ #define AT45DB_DEVID2_VERMSK 0x1f /* Bits 0-4: MLC mask */ #define AT45DB_DEVID2_MLCMSK 0xe0 /* Bits 5-7: MLC mask */ @@ -335,25 +341,53 @@ static inline int at45db_rdid(struct at45db_dev_s *priv) /* Okay.. is it a FLASH capacity that we understand? */ capacity = devid1 & AT45DB_DEVID1_CAPMSK; - - if (capacity == AT45DB_DEVID1_16MBIT) + switch (capacity) { - /* Save the FLASH geometry for the 16Mbit AT45DB161 */ + case AT45DB_DEVID1_1MBIT: + /* Save the FLASH geometry for the 16Mbit AT45DB011 */ - priv->pageshift = 9; /* Page size = 512 bytes */ - priv->npages = 4096; /* 4096 pages */ - return OK; - } -# if 0 /* Add support for other at45db FLASH parts here */ - else if (capacity == ) - { - /* Save the FLASH geometry */ + priv->pageshift = 8; /* Page size = 256 bytes */ + priv->npages = 512; /* 512 pages */ + return OK; + + case AT45DB_DEVID1_2MBIT: + /* Save the FLASH geometry for the 16Mbit AT45DB021 */ + + priv->pageshift = 8; /* Page size = 256 bytes */ + priv->npages = 1024; /* 1024 pages */ + return OK; + + case AT45DB_DEVID1_4MBIT: + /* Save the FLASH geometry for the 16Mbit AT45DB041 */ + + priv->pageshift = 8; /* Page size = 256 bytes */ + priv->npages = 2048; /* 2048 pages */ + return OK; - priv->pageshift = ; - priv->npages = ; - return OK; + case AT45DB_DEVID1_8MBIT: + /* Save the FLASH geometry for the 16Mbit AT45DB081 */ + + priv->pageshift = 8; /* Page size = 256 bytes */ + priv->npages = 4096; /* 4096 pages */ + return OK; + + case AT45DB_DEVID1_16MBIT: + /* Save the FLASH geometry for the 16Mbit AT45DB161 */ + + priv->pageshift = 9; /* Page size = 512 bytes */ + priv->npages = 4096; /* 4096 pages */ + return OK; + + case AT45DB_DEVID1_32MBIT: + /* Save the FLASH geometry for the 16Mbit AT45DB321 */ + + priv->pageshift = 9; /* Page size = 512 bytes */ + priv->npages = 8192; /* 8192 pages */ + return OK; + + default: + return -ENODEV; } -#endif } return -ENODEV; -- cgit v1.2.3