1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1.2 +++ b/README.txt Sun Jan 18 00:37:55 2015 +0100
1.3 @@ -0,0 +1,182 @@
1.4 +Pins
1.5 +====
1.6 +
1.7 +A0-A16 17-bit addressing
1.8 +DQ0-DQ7 8-bit data transfer
1.9 +CE# chip enable
1.10 +OE# output enable
1.11 +WE# write enable
1.12 +VCC 5V
1.13 +VSS ground
1.14 +NC (not connected)
1.15 +
1.16 +Low-Level Operations
1.17 +====================
1.18 +
1.19 +CE# high standby
1.20 +CE# low read, write or output disable
1.21 +
1.22 +OE# high, WE# high output disable
1.23 +OE# low, WE# high read
1.24 +OE# high, WE# low write
1.25 +
1.26 +Thus, for reading and writing:
1.27 +
1.28 +OE# = not WE#
1.29 +
1.30 +Timing
1.31 +======
1.32 +
1.33 +Addresses are latched on the falling edge of the latest of WE# and CE#
1.34 +Data is latched on the rising edge of the latest of WE# and CE#
1.35 +
1.36 +Strategy:
1.37 +
1.38 + 1. Start with CE#, OE#, WE# high (standby, output disable)
1.39 + 2. Bring CE# low (output disable)
1.40 + 3. Set addresses
1.41 + 4. Bring WE# or OE# low for operation (write or read)
1.42 + 5. Read or write data
1.43 + 6. Bring WE# or OE# high (output disable)
1.44 +
1.45 +Operation Modes
1.46 +===============
1.47 +
1.48 +By default, the device is in read mode, meaning that merely bringing OE# low
1.49 +will produce data for the asserted address.
1.50 +
1.51 +To issue commands to change the mode involves write operations with specific
1.52 +address and data arguments.
1.53 +
1.54 +Sectors
1.55 +=======
1.56 +
1.57 +A[16...14] selects each 16KB sector.
1.58 +
1.59 +Commands
1.60 +========
1.61 +
1.62 +Reset (A=$555; D=$AA); (A=$2AA; D=$55); (A=$555; D=$F0)
1.63 +Autoselect (manufacturer) (A=$555; D=$AA); (A=$2AA; D=$55); (A=$555; D=$90); (A=$X00; D=$XX)
1.64 + => D=$01
1.65 +Autoselect (device) (A=$555; D=$AA); (A=$2AA; D=$55); (A=$555; D=$90); (A=$X01; D=$XX)
1.66 + => D=$20
1.67 +
1.68 +Simple reset (A=$XXX; D=$F0)
1.69 +
1.70 +Arduino Interfacing
1.71 +===================
1.72 +
1.73 +Arduino can employ at most 14 digital pins, whereas the Am29F010B requires 17
1.74 +address pins, 8 data pins, plus 3 control pins to be utilised.
1.75 +
1.76 +One solution is to map the 3 control pins directly to the Arduino, then to
1.77 +channel address and data via 8 common pins to latches, and then employ the
1.78 +remaining pins to control the latches.
1.79 +
1.80 +Two pins can be used to select the latches:
1.81 +
1.82 +Pin A Pin B Latch select
1.83 +----- ----- ------------
1.84 +0 0 0
1.85 +0 1 1
1.86 +1 0 2
1.87 +1 1 3
1.88 +
1.89 +Thus, the following logic is required:
1.90 +
1.91 +CP (latch 1) = ~A & B
1.92 +CP (latch 2) = A & ~B
1.93 +CP (latch 3) = A & B
1.94 +CP (latch 0) = ~A & ~B
1.95 +
1.96 +Selector (in) 74HC04 (NOT) 74HC08 (AND) Selector (out)
1.97 +------------- ------------ ------------ --------------
1.98 +A 1A (*)
1.99 + 1Y 1A 4A
1.100 +B 1B (*)
1.101 + 1Y LS1
1.102 +A 2A (*)
1.103 +B 2A (*)
1.104 + 2Y 2B 4B
1.105 + 2Y LS2
1.106 +A 3A (*)
1.107 +B 3B (*)
1.108 + 3Y LS3
1.109 + 4Y LS0
1.110 +
1.111 +(*) Apply pull-down resistor to 74HC04 1A, 2A, 3A, 3B when driving using switches.
1.112 +
1.113 +As a result, only 13 pins are needed on the Arduino.
1.114 +
1.115 +Arduino Selector 74HC273 #1 74HC273 #2 74HC273 #3 74HC273 #0 Am29F010B
1.116 +------- -------- ---------- ---------- ---------- ---------- ---------
1.117 +1 CE#
1.118 +2 OE#
1.119 +3 WE#
1.120 +4 A
1.121 +5 B
1.122 + LS1 CP
1.123 + LS2 CP
1.124 + LS3 CP
1.125 + LS0 CP
1.126 +6 D0 (*) D0 (*) D0 (*) Q0
1.127 +7 D1 (*) D1 (*) D1 (*) Q1
1.128 +8 D2 (*) D2 (*) D2 (*) Q2
1.129 +9 D3 (*) D3 (*) D3 (*) Q3
1.130 +10 D4 (*) D4 (*) D4 (*) Q4
1.131 +11 D5 (*) D5 (*) D5 (*) Q5
1.132 +12 D6 (*) D6 (*) D6 (*) Q6
1.133 +13 D7 (*) D7 (*) D7 (*) Q7
1.134 + Q0 A0
1.135 + Q1 A1
1.136 + Q2 A2
1.137 + Q3 A3
1.138 + Q4 A4
1.139 + Q5 A5
1.140 + Q6 A6
1.141 + Q7 A7
1.142 + Q0 A8
1.143 + Q1 A9
1.144 + Q2 A10
1.145 + Q3 A11
1.146 + Q4 A12
1.147 + Q5 A13
1.148 + Q6 A14
1.149 + Q7 A15
1.150 +GND A16 (not used)
1.151 + Q0 D0 (*) DQ0
1.152 + Q1 D1 (*) DQ1
1.153 + Q2 D2 (*) DQ2
1.154 + Q3 D3 (*) DQ3
1.155 + Q4 D4 (*) DQ4
1.156 + Q5 D5 (*) DQ5
1.157 + Q6 D6 (*) DQ6
1.158 + Q7 D7 (*) DQ7
1.159 +5V MR# (**) MR# (**) MR# (**) MR# (**)
1.160 +5V VCC VCC VCC VCC VCC
1.161 +GND VSS
1.162 +
1.163 +(*) Apply pull-down resistor to 74HC273 D inputs when driving using switches.
1.164 +(**) Apply pull-up resistor to 74HC273 MR# inputs to preserve state.
1.165 +
1.166 +74HC273 Q outputs may initially be high and should be reset, either driving
1.167 +MR# low or by explicitly latching values onto each device.
1.168 +
1.169 +Set Address
1.170 +-----------
1.171 +
1.172 +Selector A = 0; Selector B = 1; 74HC273 #1 D[7...0] = A[7...0]
1.173 +Selector A = 1; Selector B = 0; 74HC273 #2 D[7...0] = A[15...8]
1.174 +
1.175 +Write Data
1.176 +----------
1.177 +
1.178 +Configure pins as D[7...0]
1.179 +Selector A = 1; Selector B = 1; 74HC273 #3 D[7...0] = D[7...0]
1.180 +
1.181 +Read Data
1.182 +---------
1.183 +
1.184 +Configure pins as Q[7...0]
1.185 +Selector A = 0; Selector B = 0; Q[7...0] = 74HC273 #0 Q[7...0]