From bae00a3d42f150482c973a7238f3501ccd026063 Mon Sep 17 00:00:00 2001 From: Dean Camera Date: Thu, 3 Dec 2009 08:59:12 +0000 Subject: Added support for the Dataflash mounted on the XPLAIN board. Added new XPLAIN_REV1 board target for the first revision XPLAIN board, which used a different (smaller) Dataflash IC to later revisions. --- LUFA/Common/BoardTypes.h | 7 +- LUFA/Drivers/Board/Dataflash.h | 4 ++ LUFA/Drivers/Board/LEDs.h | 2 + LUFA/Drivers/Board/STK525/Dataflash.h | 2 +- LUFA/Drivers/Board/STK526/Dataflash.h | 2 +- LUFA/Drivers/Board/USBKEY/Dataflash.h | 2 +- LUFA/Drivers/Board/XPLAIN/AT45DB642D.h | 102 +++++++++++++++++++++++++++ LUFA/Drivers/Board/XPLAIN/Dataflash.h | 124 +++++++++++++++++++++++++++++++++ LUFA/ManPages/ChangeLog.txt | 2 + LUFA/ManPages/DeviceSupport.txt | 3 +- 10 files changed, 244 insertions(+), 6 deletions(-) create mode 100644 LUFA/Drivers/Board/XPLAIN/AT45DB642D.h create mode 100644 LUFA/Drivers/Board/XPLAIN/Dataflash.h (limited to 'LUFA') diff --git a/LUFA/Common/BoardTypes.h b/LUFA/Common/BoardTypes.h index 38d0af14c..5d5535801 100644 --- a/LUFA/Common/BoardTypes.h +++ b/LUFA/Common/BoardTypes.h @@ -80,9 +80,12 @@ /** Selects the BUMBLEB specific board drivers, using the officially recommended peripheral layout. */ #define BOARD_BUMBLEB 6 - - /** Selects the XPLAIN specific board drivers, including LED driver. */ + + /** Selects the XPLAIN (Revision 2 or newer) specific board drivers, including LED and Dataflash driver. */ #define BOARD_XPLAIN 7 + + /** Selects the XPLAIN (Revision 1) specific board drivers, including LED and Dataflash driver. */ + #define BOARD_XPLAIN_REV1 8 #endif diff --git a/LUFA/Drivers/Board/Dataflash.h b/LUFA/Drivers/Board/Dataflash.h index 3502dca41..28ac99677 100644 --- a/LUFA/Drivers/Board/Dataflash.h +++ b/LUFA/Drivers/Board/Dataflash.h @@ -158,6 +158,10 @@ #include "STK525/Dataflash.h" #elif (BOARD == BOARD_STK526) #include "STK526/Dataflash.h" + #elif (BOARD == BOARD_XPLAIN) + #include "XPLAIN/Dataflash.h" + #elif (BOARD == BOARD_XPLAIN_REV1) + #include "XPLAIN/Dataflash.h" #elif (BOARD == BOARD_USER) #include "Board/Dataflash.h" #else diff --git a/LUFA/Drivers/Board/LEDs.h b/LUFA/Drivers/Board/LEDs.h index f710734d0..2f217006f 100644 --- a/LUFA/Drivers/Board/LEDs.h +++ b/LUFA/Drivers/Board/LEDs.h @@ -90,6 +90,8 @@ #include "ATAVRUSBRF01/LEDs.h" #elif (BOARD == BOARD_XPLAIN) #include "XPLAIN/LEDs.h" + #elif (BOARD == BOARD_XPLAIN_REV1) + #include "XPLAIN/LEDs.h" #elif (BOARD == BOARD_BUMBLEB) #include "BUMBLEB/LEDs.h" #elif (BOARD == BOARD_USER) diff --git a/LUFA/Drivers/Board/STK525/Dataflash.h b/LUFA/Drivers/Board/STK525/Dataflash.h index 33787569a..8fbbb4175 100644 --- a/LUFA/Drivers/Board/STK525/Dataflash.h +++ b/LUFA/Drivers/Board/STK525/Dataflash.h @@ -92,7 +92,7 @@ { Dataflash_DeselectChip(); - if (PageAddress >= (DATAFLASH_PAGES * DATAFLASH_TOTALCHIPS)) + if (PageAddress >= DATAFLASH_PAGES) return; Dataflash_SelectChip(DATAFLASH_CHIP1); diff --git a/LUFA/Drivers/Board/STK526/Dataflash.h b/LUFA/Drivers/Board/STK526/Dataflash.h index 0b388e301..66d23ef10 100644 --- a/LUFA/Drivers/Board/STK526/Dataflash.h +++ b/LUFA/Drivers/Board/STK526/Dataflash.h @@ -92,7 +92,7 @@ { Dataflash_DeselectChip(); - if (PageAddress >= (DATAFLASH_PAGES * DATAFLASH_TOTALCHIPS)) + if (PageAddress >= DATAFLASH_PAGES) return; Dataflash_SelectChip(DATAFLASH_CHIP1); diff --git a/LUFA/Drivers/Board/USBKEY/Dataflash.h b/LUFA/Drivers/Board/USBKEY/Dataflash.h index 52681dedb..41ca278a9 100644 --- a/LUFA/Drivers/Board/USBKEY/Dataflash.h +++ b/LUFA/Drivers/Board/USBKEY/Dataflash.h @@ -30,7 +30,7 @@ /** \file * - * Board specific Dataflash driver header for the STK525. + * Board specific Dataflash driver header for the USBKEY. * * \note This file should not be included directly. It is automatically included as needed by the dataflash driver * dispatch header located in LUFA/Drivers/Board/Dataflash.h. diff --git a/LUFA/Drivers/Board/XPLAIN/AT45DB642D.h b/LUFA/Drivers/Board/XPLAIN/AT45DB642D.h new file mode 100644 index 000000000..db8728508 --- /dev/null +++ b/LUFA/Drivers/Board/XPLAIN/AT45DB642D.h @@ -0,0 +1,102 @@ +/* + LUFA Library + Copyright (C) Dean Camera, 2009. + + dean [at] fourwalledcubicle [dot] com + www.fourwalledcubicle.com +*/ + +/* + Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com) + + Permission to use, copy, modify, and distribute this software + and its documentation for any purpose and without fee is hereby + granted, provided that the above copyright notice appear in all + copies and that both that the copyright notice and this + permission notice and warranty disclaimer appear in supporting + documentation, and that the name of the author not be used in + advertising or publicity pertaining to distribution of the + software without specific, written prior permission. + + The author disclaim all warranties with regard to this + software, including all implied warranties of merchantability + and fitness. In no event shall the author be liable for any + special, indirect or consequential damages or any damages + whatsoever resulting from loss of use, data or profits, whether + in an action of contract, negligence or other tortious action, + arising out of or in connection with the use or performance of + this software. +*/ + +/** \file + * + * Board specific Dataflash commands header for the AT45DB642D as mounted on the XPLAIN. + * + * \note This file should not be included directly. It is automatically included as needed by the dataflash driver + * dispatch header located in LUFA/Drivers/Board/Dataflash.h. + */ + +/** \ingroup Group_Dataflash_XPLAIN + * @defgroup Group_Dataflash_XPLAIN_AT45DB642D AT45DB642D + * + * @{ + */ + +#ifndef __DATAFLASH_CMDS_H__ +#define __DATAFLASH_CMDS_H__ + + /* Public Interface - May be used in end-application: */ + /* Macros: */ + #define DF_STATUS_READY (1 << 7) + #define DF_STATUS_COMPMISMATCH (1 << 6) + #define DF_STATUS_SECTORPROTECTION_ON (1 << 1) + #define DF_STATUS_BINARYPAGESIZE_ON (1 << 0) + + #define DF_MANUFACTURER_ATMEL 0x1F + + #define DF_CMD_GETSTATUS 0xD7 + #define DF_CMD_POWERDOWN 0xB9 + #define DF_CMD_WAKEUP 0xAB + + #define DF_CMD_MAINMEMTOBUFF1 0x53 + #define DF_CMD_MAINMEMTOBUFF2 0x55 + #define DF_CMD_MAINMEMTOBUFF1COMP 0x60 + #define DF_CMD_MAINMEMTOBUFF2COMP 0x61 + #define DF_CMD_AUTOREWRITEBUFF1 0x58 + #define DF_CMD_AUTOREWRITEBUFF2 0x59 + + #define DF_CMD_MAINMEMPAGEREAD 0xD2 + #define DF_CMD_CONTARRAYREAD_LF 0x03 + #define DF_CMD_BUFF1READ_LF 0xD1 + #define DF_CMD_BUFF2READ_LF 0xD3 + + #define DF_CMD_BUFF1WRITE 0x84 + #define DF_CMD_BUFF2WRITE 0x87 + #define DF_CMD_BUFF1TOMAINMEMWITHERASE 0x83 + #define DF_CMD_BUFF2TOMAINMEMWITHERASE 0x86 + #define DF_CMD_BUFF1TOMAINMEM 0x88 + #define DF_CMD_BUFF2TOMAINMEM 0x89 + #define DF_CMD_MAINMEMPAGETHROUGHBUFF1 0x82 + #define DF_CMD_MAINMEMPAGETHROUGHBUFF2 0x85 + + #define DF_CMD_PAGEERASE 0x81 + #define DF_CMD_BLOCKERASE 0x50 + #define DF_CMD_SECTORERASE 0x7C + + #define DF_CMD_CHIPERASE ((char[]){0xC7, 0x94, 0x80, 0x9A}) + #define DF_CMD_CHIPERASE_BYTE1 0xC7 + #define DF_CMD_CHIPERASE_BYTE2 0x94 + #define DF_CMD_CHIPERASE_BYTE3 0x80 + #define DF_CMD_CHIPERASE_BYTE4 0x9A + + #define DF_CMD_SECTORPROTECTIONOFF ((char[]){0x3D, 0x2A, 0x7F, 0x9A}) + #define DF_CMD_SECTORPROTECTIONOFF_BYTE1 0x3D + #define DF_CMD_SECTORPROTECTIONOFF_BYTE2 0x2A + #define DF_CMD_SECTORPROTECTIONOFF_BYTE3 0x7F + #define DF_CMD_SECTORPROTECTIONOFF_BYTE4 0x9A + + #define DF_CMD_READMANUFACTURERDEVICEINFO 0x9F + +#endif + +/** @} */ diff --git a/LUFA/Drivers/Board/XPLAIN/Dataflash.h b/LUFA/Drivers/Board/XPLAIN/Dataflash.h new file mode 100644 index 000000000..ef9555282 --- /dev/null +++ b/LUFA/Drivers/Board/XPLAIN/Dataflash.h @@ -0,0 +1,124 @@ +/* + LUFA Library + Copyright (C) Dean Camera, 2009. + + dean [at] fourwalledcubicle [dot] com + www.fourwalledcubicle.com +*/ + +/* + Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com) + + Permission to use, copy, modify, and distribute this software + and its documentation for any purpose and without fee is hereby + granted, provided that the above copyright notice appear in all + copies and that both that the copyright notice and this + permission notice and warranty disclaimer appear in supporting + documentation, and that the name of the author not be used in + advertising or publicity pertaining to distribution of the + software without specific, written prior permission. + + The author disclaim all warranties with regard to this + software, including all implied warranties of merchantability + and fitness. In no event shall the author be liable for any + special, indirect or consequential damages or any damages + whatsoever resulting from loss of use, data or profits, whether + in an action of contract, negligence or other tortious action, + arising out of or in connection with the use or performance of + this software. +*/ + +/** \file + * + * Board specific Dataflash driver header for the XPLAIN. + * + * \note This file should not be included directly. It is automatically included as needed by the dataflash driver + * dispatch header located in LUFA/Drivers/Board/Dataflash.h. + */ + +/** \ingroup Group_Dataflash + * @defgroup Group_Dataflash_XPLAIN XPLAIN + * + * @{ + */ + +#ifndef __DATAFLASH_XPLAIN_H__ +#define __DATAFLASH_XPLAIN_H__ + + /* Includes: */ + #include "AT45DB642D.h" + + /* Preprocessor Checks: */ + #if !defined(INCLUDE_FROM_DATAFLASH_H) + #error Do not include this file directly. Include LUFA/Drivers/Board/Dataflash.h instead. + #endif + + /* Private Interface - For use in library only: */ + #if !defined(__DOXYGEN__) + /* Macros: */ + #define DATAFLASH_CHIPCS_MASK (1 << 5) + #define DATAFLASH_CHIPCS_DDR DDRB + #define DATAFLASH_CHIPCS_PORT PORTB + #endif + + /* Public Interface - May be used in end-application: */ + /* Macros: */ + /** Constant indicating the total number of dataflash ICs mounted on the selected board. */ + #define DATAFLASH_TOTALCHIPS 1 + + /** Mask for no dataflash chip selected. */ + #define DATAFLASH_NO_CHIP DATAFLASH_CHIPCS_MASK + + /** Mask for the first dataflash chip selected. */ + #define DATAFLASH_CHIP1 (1 << 5) + + #if BOAD == XPLAIN_REV1 + #define DATAFLASH_PAGE_SIZE 256 + + #define DATAFLASH_PAGES 2048 + #else + /** Internal main memory page size for the board's dataflash ICs. */ + #define DATAFLASH_PAGE_SIZE 1024 + + /** Total number of pages inside each of the board's dataflash ICs. */ + #define DATAFLASH_PAGES 8192 + #endif + + /* Inline Functions: */ + /** Selects a dataflash IC from the given page number, which should range from 0 to + * ((DATAFLASH_PAGES * DATAFLASH_TOTALCHIPS) - 1). For boards containing only one + * dataflash IC, this will select DATAFLASH_CHIP1. If the given page number is outside + * the total number of pages contained in the boards dataflash ICs, all dataflash ICs + * are deselected. + * + * \param[in] PageAddress Address of the page to manipulate, ranging from + * ((DATAFLASH_PAGES * DATAFLASH_TOTALCHIPS) - 1). + */ + static inline void Dataflash_SelectChipFromPage(const uint16_t PageAddress) + { + Dataflash_DeselectChip(); + + if (PageAddress >= DATAFLASH_PAGES) + return; + + Dataflash_SelectChip(DATAFLASH_CHIP1); + } + + /** Sends a set of page and buffer address bytes to the currently selected dataflash IC, for use with + * dataflash commands which require a complete 24-byte address. + * + * \param[in] PageAddress Page address within the selected dataflash IC + * \param[in] BufferByte Address within the dataflash's buffer + */ + static inline void Dataflash_SendAddressBytes(uint16_t PageAddress, const uint16_t BufferByte) + { + PageAddress >>= 1; + + Dataflash_SendByte(PageAddress >> 5); + Dataflash_SendByte((PageAddress << 3) | (BufferByte >> 8)); + Dataflash_SendByte(BufferByte); + } + +#endif + +/** @} */ diff --git a/LUFA/ManPages/ChangeLog.txt b/LUFA/ManPages/ChangeLog.txt index bbded93f3..4d89a293a 100644 --- a/LUFA/ManPages/ChangeLog.txt +++ b/LUFA/ManPages/ChangeLog.txt @@ -17,6 +17,8 @@ * - Added new RNDIS Ethernet Host ClassDriver demo * - Added CDC_Host_Flush() function to the CDC Host Class driver to flush sent data to the attached device * - Added PDI programming support for XMEGA devices to the AVRISP programmer project + * - Added support for the XPLAIN dataflash, with new XPLAIN_REV1 board target for the different dataflash used on the + * first revision boards compared to the ones mounted on later revisions * * Changed: * - Removed code in the Keyboard demos to send zeroed reports between two reports with differing numbers of keycodes diff --git a/LUFA/ManPages/DeviceSupport.txt b/LUFA/ManPages/DeviceSupport.txt index 2ee1bf5ac..9cbcadae2 100644 --- a/LUFA/ManPages/DeviceSupport.txt +++ b/LUFA/ManPages/DeviceSupport.txt @@ -27,7 +27,8 @@ * - STK526 * - RZUSBSTICK * - ATAVRUSBRF01 - * - XPLAIN (AT90USB1287 only) + * - XPLAIN Revision 1 (Board AT90USB1287 only, original 45DB041D Dataflash IC) + * - XPLAIN Revision 2 onwards (Board AT90USB1287 only, newer 45DB642D Dataflash IC) * * Currently supported third-party boards (via hardware drivers): * - BUMBLEB (using officially recommended peripheral layout) -- cgit v1.2.3