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=$555; D=$AA); (A=$2AA; D=$55); (A=$555; D=$F0)
60 Autoselect (manufacturer) (A=$555; D=$AA); (A=$2AA; D=$55); (A=$555; D=$90); (A=$X00; D=$XX)
61 => D=$01
62 Autoselect (device) (A=$555; D=$AA); (A=$2AA; D=$55); (A=$555; D=$90); (A=$X01; D=$XX)
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:
78
79 Pin A Pin B Latch select
80 ----- ----- ------------
81 0 0 0
82 0 1 1
83 1 0 2
84 1 1 3
85
86 Thus, the following logic is required:
87
88 CP (latch 1) = ~A & B
89 CP (latch 2) = A & ~B
90 CP (latch 3) = A & B
91 CP (latch 0) = ~A & ~B
92
93 Selector (in) 74HC04 (NOT) 74HC08 (AND) Selector (out)
94 ------------- ------------ ------------ --------------
95 A 1A (*)
96 1Y 1A 4A
97 B 1B (*)
98 1Y LS1
99 A 2A (*)
100 B 2A (*)
101 2Y 2B 4B
102 2Y LS2
103 A 3A (*)
104 B 3B (*)
105 3Y LS3
106 4Y LS0
107
108 (*) Apply pull-down resistor to 74HC04 1A, 2A, 3A, 3B when driving using switches.
109
110 As a result, only 13 pins are needed on the Arduino.
111
112 Arduino Selector 74HC273 #1 74HC273 #2 74HC273 #3 74HC273 #0 Am29F010B
113 ------- -------- ---------- ---------- ---------- ---------- ---------
114 1 CE#
115 2 OE#
116 3 WE#
117 4 A
118 5 B
119 LS1 CP
120 LS2 CP
121 LS3 CP
122 LS0 CP
123 6 D0 (*) D0 (*) D0 (*) Q0
124 7 D1 (*) D1 (*) D1 (*) Q1
125 8 D2 (*) D2 (*) D2 (*) Q2
126 9 D3 (*) D3 (*) D3 (*) Q3
127 10 D4 (*) D4 (*) D4 (*) Q4
128 11 D5 (*) D5 (*) D5 (*) Q5
129 12 D6 (*) D6 (*) D6 (*) Q6
130 13 D7 (*) D7 (*) D7 (*) Q7
131 Q0 A0
132 Q1 A1
133 Q2 A2
134 Q3 A3
135 Q4 A4
136 Q5 A5
137 Q6 A6
138 Q7 A7
139 Q0 A8
140 Q1 A9
141 Q2 A10
142 Q3 A11
143 Q4 A12
144 Q5 A13
145 Q6 A14
146 Q7 A15
147 GND A16 (not used)
148 Q0 D0 (*) DQ0
149 Q1 D1 (*) DQ1
150 Q2 D2 (*) DQ2
151 Q3 D3 (*) DQ3
152 Q4 D4 (*) DQ4
153 Q5 D5 (*) DQ5
154 Q6 D6 (*) DQ6
155 Q7 D7 (*) DQ7
156 5V MR# (**) MR# (**) MR# (**) MR# (**)
157 5V VCC VCC VCC VCC VCC
158 GND VSS
159
160 (*) Apply pull-down resistor to 74HC273 D inputs when driving using switches.
161 (**) Apply pull-up resistor to 74HC273 MR# inputs to preserve state.
162
163 74HC273 Q outputs may initially be high and should be reset, either driving
164 MR# low or by explicitly latching values onto each device.
165
166 Set Address
167 -----------
168
169 Selector A = 0; Selector B = 1; 74HC273 #1 D[7...0] = A[7...0]
170 Selector A = 1; Selector B = 0; 74HC273 #2 D[7...0] = A[15...8]
171
172 Write Data
173 ----------
174
175 Configure pins as D[7...0]
176 Selector A = 1; Selector B = 1; 74HC273 #3 D[7...0] = D[7...0]
177
178 Read Data
179 ---------
180
181 Configure pins as Q[7...0]
182 Selector A = 0; Selector B = 0; Q[7...0] = 74HC273 #0 Q[7...0]