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