1 Pins
2 ====
3
4 A0-A16 17-bit addressing
5 DQ0-DQ7 8-bit data transfer
6 CE# chip enable
7 OE# output enable
8 WE# write enable
9 VCC 5V
10 VSS ground
11 NC (not connected)
12
13 Low-Level Operations
14 ====================
15
16 CE# high standby
17 CE# low read, write or output disable
18
19 OE# high, WE# high output disable
20 OE# low, WE# high read
21 OE# high, WE# low write
22
23 Thus, for reading and writing:
24
25 OE# = not WE#
26
27 Timing
28 ======
29
30 Addresses are latched on the falling edge of the latest of WE# and CE#
31 Data is latched on the rising edge of the latest of WE# and CE#
32
33 Strategy:
34
35 1. Start with CE#, OE#, WE# high (standby, output disable)
36 2. Bring CE# low (output disable)
37 3. Set addresses
38 4. Bring WE# or OE# low for operation (write or read)
39 5. Read or write data
40 6. Bring WE# or OE# high (output disable)
41
42 Operation Modes
43 ===============
44
45 By default, the device is in read mode, meaning that merely bringing OE# low
46 will produce data for the asserted address.
47
48 To issue commands to change the mode involves write operations with specific
49 address and data arguments.
50
51 Sectors
52 =======
53
54 A[16...14] selects each 16KB sector.
55
56 Commands
57 ========
58
59 Reset (A=$5555; D=$AA); (A=$2AAA; D=$55); (A=$5555; D=$F0)
60 Autoselect (manufacturer) (A=$5555; D=$AA); (A=$2AAA; D=$55); (A=$5555; D=$90); (A=$X00; read)
61 => D=$01
62 Autoselect (device) (A=$5555; D=$AA); (A=$2AAA; D=$55); (A=$5555; D=$90); (A=$X01; read)
63 => D=$20
64
65 Simple reset (A=$XXX; D=$F0)
66
67 Arduino Interfacing
68 ===================
69
70 Arduino can employ at most 14 digital pins, whereas the Am29F010B requires 17
71 address pins, 8 data pins, plus 3 control pins to be utilised.
72
73 One solution is to map the 3 control pins directly to the Arduino, then to
74 channel address and data via 8 common pins to latches, and then employ the
75 remaining pins to control the latches.
76
77 Two pins can be used to select the latches, and when neither latch is
78 selected, the data pins will be used to read or write data from the flash
79 memory.
80
81 As a result, only 13 pins are needed on the Arduino.
82
83 Arduino 74HC273 #1 74HC273 #2 Am29F010
84 ------- ---------- ---------- --------
85 1 CE#
86 2 OE#
87 3 WE#
88 4 CP
89 5 CP
90 6 D0 (*) D0 (*) DQ0
91 7 D1 (*) D1 (*) DQ1
92 8 D2 (*) D2 (*) DQ2
93 9 D3 (*) D3 (*) DQ3
94 10 D4 (*) D4 (*) DQ4
95 11 D5 (*) D5 (*) DQ5
96 12 D6 (*) D6 (*) DQ6
97 13 D7 (*) D7 (*) DQ7
98 Q0 A0
99 Q1 A1
100 Q2 A2
101 Q3 A3
102 Q4 A4
103 Q5 A5
104 Q6 A6
105 Q7 A7
106 Q0 A8
107 Q1 A9
108 Q2 A10
109 Q3 A11
110 Q4 A12
111 Q5 A13
112 Q6 A14
113 Q7 A15
114 GND A16 (not used)
115 5V MR# (**) MR# (**)
116 5V VCC VCC VCC
117 GND GND GND VSS
118
119 (*) Apply pull-down resistor to 74HC273 D inputs when driving using switches.
120 (**) Apply pull-up resistor to 74HC273 MR# inputs to preserve state.
121
122 74HC273 Q outputs may initially be high and should be reset, either driving
123 MR# low or by explicitly latching values onto each device.
124
125 Set Address
126 -----------
127
128 74HC273 #1 CP = 1; 74HC273 #2 CP = 0
129 74HC273 #1 D[7...0] = A[7...0]
130 74HC273 #1 CP = 0; 74HC273 #2 CP = 1
131 74HC273 #2 D[7...0] = A[15...8]
132
133 Write Data
134 ----------
135
136 Configure pins as D[7...0]
137 WE# = 0
138 74HC273 #1 CP = 0; 74HC273 #2 CP = 0
139 74HC273 #3 D[7...0] = D[7...0]
140 WE# = 1
141
142 Read Data
143 ---------
144
145 Configure pins as Q[7...0]
146 OE# = 0
147 74HC273 #1 CP = 1; 74HC273 #2 CP = 0
148 Q[7...0] = 74HC273 #0 Q[7...0]
149 OE# = 1