annotate packages/devs/flash/sst/39vfxxx/current/include/flash_sst_39vfxxx.inl @ 1755:21fc12d67292

Update following changes to the flash device driver interface
author bartv
date Mon, 22 Nov 2004 20:40:54 +0000
parents 80232dbac7fb
children 9c1d9e5039c2
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1346
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
1 #ifndef CYGONCE_DEVS_FLASH_SST_39VFXXX_INL
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
2 #define CYGONCE_DEVS_FLASH_SST_39VFXXX_INL
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
3 //==========================================================================
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
4 //
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
5 // flash_sst_39vfxxx.inl
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
6 //
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
7 // SST 39VFxxx series flash driver
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
8 //
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
9 //==========================================================================
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
10 //####ECOSGPLCOPYRIGHTBEGIN####
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
11 // -------------------------------------------
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
12 // This file is part of eCos, the Embedded Configurable Operating System.
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
13 // Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
1701
773d77981a7d * include/flash_sst_39vfxxx.inl: Added support for the SST39VF160
asl
parents: 1346
diff changeset
14 // Copyright (C) 2004 Andrew Lunn
1346
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
15 //
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
16 // eCos is free software; you can redistribute it and/or modify it under
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
17 // the terms of the GNU General Public License as published by the Free
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
18 // Software Foundation; either version 2 or (at your option) any later version.
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
19 //
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
20 // eCos is distributed in the hope that it will be useful, but WITHOUT ANY
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
21 // WARRANTY; without even the implied warranty of MERCHANTABILITY or
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
22 // FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
23 // for more details.
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
24 //
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
25 // You should have received a copy of the GNU General Public License along
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
26 // with eCos; if not, write to the Free Software Foundation, Inc.,
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
27 // 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
28 //
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
29 // As a special exception, if other files instantiate templates or use macros
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
30 // or inline functions from this file, or you compile this file and link it
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
31 // with other works to produce a work based on this file, this file does not
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
32 // by itself cause the resulting work to be covered by the GNU General Public
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
33 // License. However the source code for this file must still be made available
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
34 // in accordance with section (3) of the GNU General Public License.
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
35 //
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
36 // This exception does not invalidate any other reasons why a work based on
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
37 // this file might be covered by the GNU General Public License.
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
38 //
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
39 // Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
40 // at http://sources.redhat.com/ecos/ecos-license/
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
41 // -------------------------------------------
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
42 //####ECOSGPLCOPYRIGHTEND####
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
43 //==========================================================================
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
44 //#####DESCRIPTIONBEGIN####
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
45 //
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
46 // Author(s): gthomas
1701
773d77981a7d * include/flash_sst_39vfxxx.inl: Added support for the SST39VF160
asl
parents: 1346
diff changeset
47 // Contributors: gthomas, jskov, rcassebohm, Andrew Lunn
1346
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
48 // Date: 2001-02-21
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
49 // Purpose:
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
50 // Description:
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
51 //
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
52 // Notes: FLASH_P2V is not properly used.
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
53 // Needs locking.
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
54 //####DESCRIPTIONEND####
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
55 //
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
56 //==========================================================================
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
57
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
58 #include <pkgconf/hal.h>
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
59 #include <cyg/hal/hal_arch.h>
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
60 #include <cyg/hal/hal_cache.h>
1701
773d77981a7d * include/flash_sst_39vfxxx.inl: Added support for the SST39VF160
asl
parents: 1346
diff changeset
61 #include <cyg/infra/cyg_ass.h>
1346
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
62 #include CYGHWR_MEMORY_LAYOUT_H
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
63
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
64 #define _FLASH_PRIVATE_
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
65 #include <cyg/io/flash.h>
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
66
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
67 //----------------------------------------------------------------------------
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
68 // Common device details.
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
69 #define FLASH_Read_ID FLASHWORD( 0x90 )
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
70 #define FLASH_Read_ID_Exit FLASHWORD( 0xF0 )
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
71 #define FLASH_Reset FLASHWORD( 0xFF )
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
72 #define FLASH_Program FLASHWORD( 0xA0 )
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
73 #define FLASH_Block_Erase FLASHWORD( 0x30 )
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
74
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
75 #define FLASH_Data FLASHWORD( 0x80 ) // Data complement
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
76 #define FLASH_Busy FLASHWORD( 0x40 ) // "Toggle" bit
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
77 #define FLASH_Err FLASHWORD( 0x20 )
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
78 #define FLASH_Sector_Erase_Timer FLASHWORD( 0x08 )
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
79
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
80 #define FLASH_Setup_Addr1 (0x5555)
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
81 #define FLASH_Setup_Addr2 (0x2AAA)
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
82 #define FLASH_Setup_Code1 FLASHWORD( 0xAA )
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
83 #define FLASH_Setup_Code2 FLASHWORD( 0x55 )
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
84 #define FLASH_Setup_Erase FLASHWORD( 0x80 )
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
85
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
86 // Platform code must define the below
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
87 // #define CYGNUM_FLASH_INTERLEAVE : Number of interleaved devices (in parallel)
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
88 // #define CYGNUM_FLASH_SERIES : Number of devices in series
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
89 // And select one of the below device variants
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
90
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
91 #ifdef CYGPKG_DEVS_FLASH_SST_39VF080
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
92 # define FLASH_BLOCK_SIZE (0x1000*CYGNUM_FLASH_INTERLEAVE)
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
93 # define FLASH_NUM_REGIONS (256)
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
94 # define CYGNUM_FLASH_BASE_MASK (0xFFF00000u) // 1024kB devices
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
95 # define CYGNUM_FLASH_WIDTH (8)
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
96 # define CYGNUM_FLASH_BLANK (1)
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
97 # define CYGNUM_FLASH_ID_MANUFACTURER FLASHWORD(0xBF)
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
98 # define CYGNUM_FLASH_ID_DEVICE FLASHWORD(0xD8)
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
99 #endif
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
100 #ifdef CYGPKG_DEVS_FLASH_SST_39VF016
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
101 # define FLASH_BLOCK_SIZE (0x1000*CYGNUM_FLASH_INTERLEAVE)
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
102 # define FLASH_NUM_REGIONS (512)
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
103 # define CYGNUM_FLASH_BASE_MASK (0xFFE00000u) // 2048kB devices
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
104 # define CYGNUM_FLASH_WIDTH (8)
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
105 # define CYGNUM_FLASH_BLANK (1)
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
106 # define CYGNUM_FLASH_ID_MANUFACTURER FLASHWORD(0xBF)
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
107 # define CYGNUM_FLASH_ID_DEVICE FLASHWORD(0xD9)
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
108 #endif
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
109 #ifdef CYGPKG_DEVS_FLASH_SST_39VF400
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
110 # define FLASH_BLOCK_SIZE (0x1000*CYGNUM_FLASH_INTERLEAVE)
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
111 # define FLASH_NUM_REGIONS (0x80000/FLASH_BLOCK_SIZE)
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
112 # define CYGNUM_FLASH_BASE_MASK (0xFFF80000u) // 512kB devices
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
113 # define CYGNUM_FLASH_WIDTH (16)
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
114 # define CYGNUM_FLASH_BLANK (1)
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
115 # define CYGNUM_FLASH_ID_MANUFACTURER FLASHWORD(0x00BF)
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
116 # define CYGNUM_FLASH_ID_DEVICE FLASHWORD(0x2780)
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
117 #endif
1701
773d77981a7d * include/flash_sst_39vfxxx.inl: Added support for the SST39VF160
asl
parents: 1346
diff changeset
118 #ifdef CYGPKG_DEVS_FLASH_SST_39VF160
773d77981a7d * include/flash_sst_39vfxxx.inl: Added support for the SST39VF160
asl
parents: 1346
diff changeset
119 # define FLASH_BLOCK_SIZE (0x1000*CYGNUM_FLASH_INTERLEAVE)
773d77981a7d * include/flash_sst_39vfxxx.inl: Added support for the SST39VF160
asl
parents: 1346
diff changeset
120 # define FLASH_NUM_REGIONS (0x200000/FLASH_BLOCK_SIZE)
773d77981a7d * include/flash_sst_39vfxxx.inl: Added support for the SST39VF160
asl
parents: 1346
diff changeset
121 # define CYGNUM_FLASH_BASE_MASK (0xFFE00000u) // 512kB devices
773d77981a7d * include/flash_sst_39vfxxx.inl: Added support for the SST39VF160
asl
parents: 1346
diff changeset
122 # define CYGNUM_FLASH_WIDTH (16)
773d77981a7d * include/flash_sst_39vfxxx.inl: Added support for the SST39VF160
asl
parents: 1346
diff changeset
123 # define CYGNUM_FLASH_BLANK (1)
773d77981a7d * include/flash_sst_39vfxxx.inl: Added support for the SST39VF160
asl
parents: 1346
diff changeset
124 # define CYGNUM_FLASH_ID_MANUFACTURER FLASHWORD(0x00BF)
773d77981a7d * include/flash_sst_39vfxxx.inl: Added support for the SST39VF160
asl
parents: 1346
diff changeset
125 # define CYGNUM_FLASH_ID_DEVICE FLASHWORD(0x2782)
773d77981a7d * include/flash_sst_39vfxxx.inl: Added support for the SST39VF160
asl
parents: 1346
diff changeset
126 #endif
1346
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
127
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
128 #define FLASH_DEVICE_SIZE (FLASH_BLOCK_SIZE*FLASH_NUM_REGIONS)
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
129 #define CYGNUM_FLASH_DEVICES (CYGNUM_FLASH_INTERLEAVE*CYGNUM_FLASH_SERIES)
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
130
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
131 //----------------------------------------------------------------------------
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
132 // Now that device properties are defined, include magic for defining
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
133 // accessor type and constants.
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
134 #include <cyg/io/flash_dev.h>
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
135
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
136 //----------------------------------------------------------------------------
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
137 // Functions that put the flash device into non-read mode must reside
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
138 // in RAM.
1755
21fc12d67292 Update following changes to the flash device driver interface
bartv
parents: 1749
diff changeset
139 static size_t sst_query(struct cyg_flash_dev *dev, void* data, size_t len)
1701
773d77981a7d * include/flash_sst_39vfxxx.inl: Added support for the SST39VF160
asl
parents: 1346
diff changeset
140 __attribute__ ((section (".2ram.flash_query")));
773d77981a7d * include/flash_sst_39vfxxx.inl: Added support for the SST39VF160
asl
parents: 1346
diff changeset
141 static int sst_erase_block(struct cyg_flash_dev *dev, cyg_flashaddr_t block_base)
773d77981a7d * include/flash_sst_39vfxxx.inl: Added support for the SST39VF160
asl
parents: 1346
diff changeset
142 __attribute__ ((section (".2ram.flash_erase_block")));
773d77981a7d * include/flash_sst_39vfxxx.inl: Added support for the SST39VF160
asl
parents: 1346
diff changeset
143 static int sst_program(struct cyg_flash_dev *dev, cyg_flashaddr_t base,
1755
21fc12d67292 Update following changes to the flash device driver interface
bartv
parents: 1749
diff changeset
144 const void* data, size_t length)
1701
773d77981a7d * include/flash_sst_39vfxxx.inl: Added support for the SST39VF160
asl
parents: 1346
diff changeset
145 __attribute__ ((section (".2ram.flash_program_buf")));
1346
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
146
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
147
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
148 //----------------------------------------------------------------------------
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
149 // Initialize driver details
1701
773d77981a7d * include/flash_sst_39vfxxx.inl: Added support for the SST39VF160
asl
parents: 1346
diff changeset
150 static int
773d77981a7d * include/flash_sst_39vfxxx.inl: Added support for the SST39VF160
asl
parents: 1346
diff changeset
151 sst_init(struct cyg_flash_dev *dev)
1346
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
152 {
1701
773d77981a7d * include/flash_sst_39vfxxx.inl: Added support for the SST39VF160
asl
parents: 1346
diff changeset
153 flash_data_t id[2];
1346
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
154
1701
773d77981a7d * include/flash_sst_39vfxxx.inl: Added support for the SST39VF160
asl
parents: 1346
diff changeset
155 dev->funs->flash_query(dev,id,sizeof(id));
1346
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
156
1701
773d77981a7d * include/flash_sst_39vfxxx.inl: Added support for the SST39VF160
asl
parents: 1346
diff changeset
157 // Check that flash_id data is matching the one the driver was
773d77981a7d * include/flash_sst_39vfxxx.inl: Added support for the SST39VF160
asl
parents: 1346
diff changeset
158 // configured for.
773d77981a7d * include/flash_sst_39vfxxx.inl: Added support for the SST39VF160
asl
parents: 1346
diff changeset
159 if (id[0] != CYGNUM_FLASH_ID_MANUFACTURER
773d77981a7d * include/flash_sst_39vfxxx.inl: Added support for the SST39VF160
asl
parents: 1346
diff changeset
160 || id[1] != CYGNUM_FLASH_ID_DEVICE)
773d77981a7d * include/flash_sst_39vfxxx.inl: Added support for the SST39VF160
asl
parents: 1346
diff changeset
161 return CYG_FLASH_ERR_DRV_WRONG_PART;
773d77981a7d * include/flash_sst_39vfxxx.inl: Added support for the SST39VF160
asl
parents: 1346
diff changeset
162 return CYG_FLASH_ERR_OK;
1346
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
163 }
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
164
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
165 //----------------------------------------------------------------------------
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
166 // Map a hardware status to a package error
1701
773d77981a7d * include/flash_sst_39vfxxx.inl: Added support for the SST39VF160
asl
parents: 1346
diff changeset
167 static int
773d77981a7d * include/flash_sst_39vfxxx.inl: Added support for the SST39VF160
asl
parents: 1346
diff changeset
168 sst_hwr_map_error(struct cyg_flash_dev *dev, int err)
1346
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
169 {
1701
773d77981a7d * include/flash_sst_39vfxxx.inl: Added support for the SST39VF160
asl
parents: 1346
diff changeset
170 return err;
1346
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
171 }
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
172
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
173
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
174 //----------------------------------------------------------------------------
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
175 // Flash Query
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
176 //
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
177 // Only reads the manufacturer and part number codes for the first
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
178 // device(s) in series. It is assumed that any devices in series
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
179 // will be of the same type.
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
180
1701
773d77981a7d * include/flash_sst_39vfxxx.inl: Added support for the SST39VF160
asl
parents: 1346
diff changeset
181 static size_t
1755
21fc12d67292 Update following changes to the flash device driver interface
bartv
parents: 1749
diff changeset
182 sst_query(struct cyg_flash_dev *dev, void* data, size_t len)
1346
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
183 {
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
184 volatile flash_data_t *ROM;
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
185 flash_data_t* id = (flash_data_t*) data;
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
186 int i;
1701
773d77981a7d * include/flash_sst_39vfxxx.inl: Added support for the SST39VF160
asl
parents: 1346
diff changeset
187
773d77981a7d * include/flash_sst_39vfxxx.inl: Added support for the SST39VF160
asl
parents: 1346
diff changeset
188 CYG_ASSERT(len == 2, "Invalid length");
1346
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
189
1701
773d77981a7d * include/flash_sst_39vfxxx.inl: Added support for the SST39VF160
asl
parents: 1346
diff changeset
190 ROM = (volatile flash_data_t*) dev->start;
1346
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
191
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
192 ROM[FLASH_Setup_Addr1] = FLASH_Setup_Code1;
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
193 ROM[FLASH_Setup_Addr2] = FLASH_Setup_Code2;
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
194 ROM[FLASH_Setup_Addr1] = FLASH_Read_ID;
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
195
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
196 // FIXME: 10ms delay
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
197 for (i = 10000; i > 0; i--);
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
198
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
199 // Manufacturers' code
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
200 id[0] = ROM[0];
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
201 // Part number
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
202 id[1] = ROM[1];
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
203
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
204 ROM[FLASH_Setup_Addr1] = FLASH_Setup_Code1;
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
205 ROM[FLASH_Setup_Addr2] = FLASH_Setup_Code2;
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
206 ROM[FLASH_Setup_Addr1] = FLASH_Read_ID_Exit;
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
207
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
208 // FIXME: 10ms delay
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
209 for (i = 10000; i > 0; i--);
1701
773d77981a7d * include/flash_sst_39vfxxx.inl: Added support for the SST39VF160
asl
parents: 1346
diff changeset
210
773d77981a7d * include/flash_sst_39vfxxx.inl: Added support for the SST39VF160
asl
parents: 1346
diff changeset
211 return len;
1346
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
212 }
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
213
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
214 //----------------------------------------------------------------------------
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
215 // Erase Block
1701
773d77981a7d * include/flash_sst_39vfxxx.inl: Added support for the SST39VF160
asl
parents: 1346
diff changeset
216 static int
773d77981a7d * include/flash_sst_39vfxxx.inl: Added support for the SST39VF160
asl
parents: 1346
diff changeset
217 sst_erase_block(struct cyg_flash_dev *dev, cyg_flashaddr_t block_base)
1346
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
218 {
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
219 volatile flash_data_t* ROM;
1701
773d77981a7d * include/flash_sst_39vfxxx.inl: Added support for the SST39VF160
asl
parents: 1346
diff changeset
220 volatile flash_data_t* addr_ptr = (volatile flash_data_t*) block_base;
773d77981a7d * include/flash_sst_39vfxxx.inl: Added support for the SST39VF160
asl
parents: 1346
diff changeset
221 int len = dev->block_info[0].block_size;
773d77981a7d * include/flash_sst_39vfxxx.inl: Added support for the SST39VF160
asl
parents: 1346
diff changeset
222 int res = CYG_FLASH_ERR_OK;
1346
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
223
1701
773d77981a7d * include/flash_sst_39vfxxx.inl: Added support for the SST39VF160
asl
parents: 1346
diff changeset
224 while ((CYG_FLASH_ERR_OK == res) && (len > 0)) {
1346
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
225 int timeout;
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
226 flash_data_t state, prev_state;
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
227
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
228 // Base address of device(s) being programmed.
1701
773d77981a7d * include/flash_sst_39vfxxx.inl: Added support for the SST39VF160
asl
parents: 1346
diff changeset
229 ROM = (volatile flash_data_t*)((unsigned long)block_base & ~(FLASH_DEVICE_SIZE-1));
1346
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
230
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
231 // Program data [byte] - 6 step sequence
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
232 ROM[FLASH_Setup_Addr1] = FLASH_Setup_Code1;
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
233 ROM[FLASH_Setup_Addr2] = FLASH_Setup_Code2;
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
234 ROM[FLASH_Setup_Addr1] = FLASH_Setup_Erase;
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
235 ROM[FLASH_Setup_Addr1] = FLASH_Setup_Code1;
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
236 ROM[FLASH_Setup_Addr2] = FLASH_Setup_Code2;
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
237 *addr_ptr = FLASH_Block_Erase;
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
238
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
239 // Wait for completion (bit 6 stops toggling)
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
240 timeout = 5000000;
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
241 prev_state = *addr_ptr & FLASH_Busy;
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
242 while (true) {
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
243 state = *addr_ptr & FLASH_Busy;
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
244 if (prev_state == state) {
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
245 break;
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
246 }
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
247 if (--timeout == 0) {
1701
773d77981a7d * include/flash_sst_39vfxxx.inl: Added support for the SST39VF160
asl
parents: 1346
diff changeset
248 res = CYG_FLASH_ERR_DRV_TIMEOUT;
1346
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
249 break;
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
250 }
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
251 prev_state = state;
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
252 }
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
253 // Verify loaded data bytes
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
254 while (len > 0) {
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
255 if (*addr_ptr != FLASH_BlankValue) {
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
256 // Only update return value if erase operation was OK
1701
773d77981a7d * include/flash_sst_39vfxxx.inl: Added support for the SST39VF160
asl
parents: 1346
diff changeset
257 if (CYG_FLASH_ERR_OK == res) res = CYG_FLASH_ERR_DRV_VERIFY;
1346
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
258 break;
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
259 }
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
260 addr_ptr++;
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
261 len -= sizeof(*addr_ptr);
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
262 }
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
263 }
1701
773d77981a7d * include/flash_sst_39vfxxx.inl: Added support for the SST39VF160
asl
parents: 1346
diff changeset
264 return CYG_FLASH_ERR_OK;
1346
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
265 }
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
266
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
267 //----------------------------------------------------------------------------
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
268 // Program Buffer
1701
773d77981a7d * include/flash_sst_39vfxxx.inl: Added support for the SST39VF160
asl
parents: 1346
diff changeset
269 static int
773d77981a7d * include/flash_sst_39vfxxx.inl: Added support for the SST39VF160
asl
parents: 1346
diff changeset
270 sst_program(struct cyg_flash_dev *dev, cyg_flashaddr_t base,
1755
21fc12d67292 Update following changes to the flash device driver interface
bartv
parents: 1749
diff changeset
271 const void* data, size_t length)
1346
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
272 {
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
273 volatile flash_data_t* ROM;
1701
773d77981a7d * include/flash_sst_39vfxxx.inl: Added support for the SST39VF160
asl
parents: 1346
diff changeset
274 volatile flash_data_t* addr_ptr = (volatile flash_data_t*) base;
1346
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
275 volatile flash_data_t* data_ptr = (volatile flash_data_t*) data;
1701
773d77981a7d * include/flash_sst_39vfxxx.inl: Added support for the SST39VF160
asl
parents: 1346
diff changeset
276 size_t len = length;
773d77981a7d * include/flash_sst_39vfxxx.inl: Added support for the SST39VF160
asl
parents: 1346
diff changeset
277 int res = CYG_FLASH_ERR_OK;
1346
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
278
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
279 #if 0
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
280 CYG_ASSERT((unsigned long)data_ptr & (sizeof(flash_data_t)-1) == 0,
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
281 "Data not properly aligned");
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
282 CYG_ASSERT((unsigned long)addr_ptr & (CYGNUM_FLASH_INTERLEAVE*sizeof(flash_data_t)-1) == 0,
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
283 "Addr not properly aligned (to first interleaved device)");
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
284 #endif
1701
773d77981a7d * include/flash_sst_39vfxxx.inl: Added support for the SST39VF160
asl
parents: 1346
diff changeset
285 while ((CYG_FLASH_ERR_OK == res) && (len > 0)) {
1346
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
286 int timeout;
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
287 flash_data_t state, prev_state;
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
288
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
289 // Base address of device(s) being programmed.
1701
773d77981a7d * include/flash_sst_39vfxxx.inl: Added support for the SST39VF160
asl
parents: 1346
diff changeset
290 ROM = (volatile flash_data_t*)((unsigned long)base & ~(FLASH_DEVICE_SIZE-1));
1346
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
291
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
292 // Program data [byte] - 4 step sequence
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
293 ROM[FLASH_Setup_Addr1] = FLASH_Setup_Code1;
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
294 ROM[FLASH_Setup_Addr2] = FLASH_Setup_Code2;
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
295 ROM[FLASH_Setup_Addr1] = FLASH_Program;
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
296 *addr_ptr = *data_ptr;
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
297
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
298 // Wait for completion (bit 6 stops toggling)
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
299 timeout = 5000000;
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
300 prev_state = *addr_ptr & FLASH_Busy;
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
301 while (true) {
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
302 state = *addr_ptr & FLASH_Busy;
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
303 if (prev_state == state) {
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
304 break;
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
305 }
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
306 if (--timeout == 0) {
1701
773d77981a7d * include/flash_sst_39vfxxx.inl: Added support for the SST39VF160
asl
parents: 1346
diff changeset
307 res = CYG_FLASH_ERR_DRV_TIMEOUT;
1346
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
308 break;
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
309 }
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
310 prev_state = state;
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
311 }
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
312
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
313 // Verify loaded data bytes
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
314 if (*addr_ptr != *data_ptr) {
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
315 // Only update return value if program operation was OK
1701
773d77981a7d * include/flash_sst_39vfxxx.inl: Added support for the SST39VF160
asl
parents: 1346
diff changeset
316 if (CYG_FLASH_ERR_OK == res) res = CYG_FLASH_ERR_DRV_VERIFY;
773d77981a7d * include/flash_sst_39vfxxx.inl: Added support for the SST39VF160
asl
parents: 1346
diff changeset
317 break;
1346
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
318 }
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
319 addr_ptr++;
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
320 data_ptr++;
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
321 len -= sizeof(*data_ptr);
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
322 }
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
323
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
324 // Ideally, we'd want to return not only the failure code, but also
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
325 // the address/device that reported the error.
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
326 return res;
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
327 }
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
328
1755
21fc12d67292 Update following changes to the flash device driver interface
bartv
parents: 1749
diff changeset
329 #ifdef CYGHWR_IO_FLASH_BLOCK_LOCKING
21fc12d67292 Update following changes to the flash device driver interface
bartv
parents: 1749
diff changeset
330 static int
21fc12d67292 Update following changes to the flash device driver interface
bartv
parents: 1749
diff changeset
331 sst_block_lock(struct cyg_flash_dev *dev, const cyg_flashaddr_t block_base)
21fc12d67292 Update following changes to the flash device driver interface
bartv
parents: 1749
diff changeset
332 {
21fc12d67292 Update following changes to the flash device driver interface
bartv
parents: 1749
diff changeset
333 return CYG_DATAFLASH_ERR_INVALID;
21fc12d67292 Update following changes to the flash device driver interface
bartv
parents: 1749
diff changeset
334 }
21fc12d67292 Update following changes to the flash device driver interface
bartv
parents: 1749
diff changeset
335
21fc12d67292 Update following changes to the flash device driver interface
bartv
parents: 1749
diff changeset
336 static int
21fc12d67292 Update following changes to the flash device driver interface
bartv
parents: 1749
diff changeset
337 sst_block_unlock(struct cyg_flash_dev *dev, const cyg_flashaddr_t block_base)
21fc12d67292 Update following changes to the flash device driver interface
bartv
parents: 1749
diff changeset
338 {
21fc12d67292 Update following changes to the flash device driver interface
bartv
parents: 1749
diff changeset
339 return CYG_DATAFLASH_ERR_INVALID;
21fc12d67292 Update following changes to the flash device driver interface
bartv
parents: 1749
diff changeset
340 }
21fc12d67292 Update following changes to the flash device driver interface
bartv
parents: 1749
diff changeset
341 #endif
21fc12d67292 Update following changes to the flash device driver interface
bartv
parents: 1749
diff changeset
342
21fc12d67292 Update following changes to the flash device driver interface
bartv
parents: 1749
diff changeset
343 static const CYG_FLASH_FUNS(cyg_sst_funs,
21fc12d67292 Update following changes to the flash device driver interface
bartv
parents: 1749
diff changeset
344 sst_init,
21fc12d67292 Update following changes to the flash device driver interface
bartv
parents: 1749
diff changeset
345 sst_query,
21fc12d67292 Update following changes to the flash device driver interface
bartv
parents: 1749
diff changeset
346 sst_erase_block,
21fc12d67292 Update following changes to the flash device driver interface
bartv
parents: 1749
diff changeset
347 sst_program,
21fc12d67292 Update following changes to the flash device driver interface
bartv
parents: 1749
diff changeset
348 NULL, // read
21fc12d67292 Update following changes to the flash device driver interface
bartv
parents: 1749
diff changeset
349 sst_hwr_map_error,
21fc12d67292 Update following changes to the flash device driver interface
bartv
parents: 1749
diff changeset
350 sst_block_lock,
21fc12d67292 Update following changes to the flash device driver interface
bartv
parents: 1749
diff changeset
351 sst_block_unlock);
1701
773d77981a7d * include/flash_sst_39vfxxx.inl: Added support for the SST39VF160
asl
parents: 1346
diff changeset
352
1346
a8c6b7e1ced9 * include/flash_sst_39vfxxx.inl:
asl
parents:
diff changeset
353 #endif // CYGONCE_DEVS_FLASH_SST_39VFXXX_INL