/*----------------------------------------------------------------------------- * * (c) Tardis Mobile - 2000 * * Name: flash.h * * Author: A Simpkins * * Date: 04 October * *----------------------------------------------------------------------------- * * Description: * * Header file to be used with flashTest.C & eventualy a flash libuary * which flashTest.c will be a part. * * Modification history: * * --- 14/08/2001 002 - converted to eCos * 04/10/2000 001 - Initial draft * * *----------------------------------------------------------------------------- */ #ifndef __FLASH_H__ #define __FLASH_H__ // Address of code loaded into RAM (.2ram.flash_query) #define FLASHCodeInRAM (0x4100caac) /* Structures */ /* ~~~~~~~~~~ */ /* Structure array length */ #define flashEscape_maxLength (0x06) struct flashPairStruct { cyg_uint32 pairAddress; cyg_uint16 pairData; }; struct flashEscape { cyg_uint16 length; struct flashPairStruct flashpair[flashEscape_maxLength]; }; /* Definitions */ /* ~~~~~~~~~~~ */ /* Memory is 16 bit wide (2 bytes). */ #define memoryWidth (0x002) #define startAddressFLASH (0x40000000) #define LengthFLASH (0x00100000) /* flash Commands */ #define flash_eraseSectorCmd (0x0030) #define flash_reset (0x00f0) #define flash_erraseCmd (0x0010) #define flash_blank (0x00ff) #if CYGHWR_HAL_ARM_TARDIS3_VERSION == 1 #define flash_make (startAddressFLASH + 0x00000000) #define flash_deviceID (startAddressFLASH + 0x00000004) #define flash_erraseAllAddr (startAddressFLASH + 0x00001554) /* List of the sectors to erase with the above command */ #define flash_SA00 (0x00000000) #define flash_SA01 (0x00002000) #define flash_SA02 (0x00003000) #define flash_SA03 (0x00004000) #define flash_SA04 (0x00008000) #define flash_SA05 (0x00010000) #define flash_SA06 (0x00018000) #define flash_SA07 (0x00020000) #define flash_SA08 (0x00028000) #define flash_SA09 (0x00030000) #define flash_SA10 (0x00038000) #define flash_SA11 (0x00040000) #define flash_SA12 (0x00048000) #define flash_SA13 (0x00050000) #define flash_SA14 (0x00058000) #define flash_SA15 (0x00060000) #define flash_SA16 (0x00068000) #define flash_SA17 (0x00070000) #define flash_SA18 (0x00078000) #else #define flash_make (startAddressFLASH + 0x00000000) #define flash_deviceID (startAddressFLASH + 0x00000002) #define flash_erraseAllAddr (startAddressFLASH + 0x00000555) /* List of the sectors to erase with the above command */ #define flash_SA00 (0x00000000) #define flash_SA01 (0x00004000) #define flash_SA02 (0x00006000) #define flash_SA03 (0x00008000) #define flash_SA04 (0x00010000) #define flash_SA05 (0x00020000) #define flash_SA06 (0x00030000) #define flash_SA07 (0x00040000) #define flash_SA08 (0x00050000) #define flash_SA09 (0x00060000) #define flash_SA10 (0x00070000) #define flash_SA11 (0x00080000) #define flash_SA12 (0x00090000) #define flash_SA13 (0x000a0000) #define flash_SA14 (0x000b0000) #define flash_SA15 (0x000c0000) #define flash_SA16 (0x000d0000) #define flash_SA17 (0x000e0000) #define flash_SA18 (0x000f0000) #endif /* Flash Error Bits */ #define flash_DQ0 (0x0001) #define flash_DQ1 (0x0002) #define flash_DQ2 (0x0004) #define flash_DQ3 (0x0008) #define flash_DQ4 (0x0010) #define flash_DQ5 (0x0020) #define flash_DQ6 (0x0040) #define flash_DQ7 (0x0080) /* Function Commands and assocated data structures */ #define flashCmd_Info (0x0001) #define flashCmd_Erase (0x0002) #define flashCmd_ResumeErase (0x0003) #define flashCmd_Write (0x0004) #define flashResult_OK (0x1001) #define flashResult_badAddress (0x1002) class flashcmd { public: int flashCommand; }; class infoFlashCmd : public flashcmd { public: int make; int deviceID; }; class eraseFlashCmd : public flashcmd { public: cyg_uint32 sectorNo; bool success; bool onHold; }; class writeFlashCmd : public flashcmd { public: cyg_uint32 writeAddress; cyg_uint16 writeData; int result; }; // Bitmap of possible SiRF Interrupts //#define SiRFIRQ (0xa260) #define SiRFIRQ (0x0000) // types of FLASH device // ~~~~~~~~~~~~~~~~~~~~~ // MAKE #define FLASHunknown (0x0000) #define AMD (0x0001) // Device ID #define AMD29LV800BB (0x225b) #define AMD29LV800BT (0x22da) // function type to call to code in RAM typedef cyg_uint32 (*RAMfn_type)(cyg_uint32 *); #endif /* __FLASH_H__ */