1.1 --- a/README.txt Mon Mar 09 01:02:53 2015 +0100
1.2 +++ b/README.txt Mon Mar 09 01:03:39 2015 +0100
1.3 @@ -1,6 +1,68 @@
1.4 The Am29F010-90PC product has been used to test the software and hardware
1.5 design described here.
1.6
1.7 +Using the Software
1.8 +==================
1.9 +
1.10 +First of all, to use the Arduino-based programming solution, the Arduino needs
1.11 +to have a program transferred to it. The program is compiled using the
1.12 +Makefile provided, using the simple command...
1.13 +
1.14 +make
1.15 +
1.16 +To upload the program, the "upload" target is used as follows:
1.17 +
1.18 +make upload
1.19 +
1.20 +It is likely that this will fail unless appropriate permissions are available
1.21 +on the device through which the Arduino is accessed on the host machine. Thus,
1.22 +a privileged invocation is likely to be necessary:
1.23 +
1.24 +sudo make upload
1.25 +
1.26 +With the program uploaded, it should now be possible to communicate with the
1.27 +Arduino. Unless the programming circuit has been constructed, however, there
1.28 +will not be any effect of communicating with the Arduino, other than to check
1.29 +that the program is operational. Running the upload.py script as follows will
1.30 +permit such a test:
1.31 +
1.32 +./upload.py -i
1.33 +
1.34 +Again, it is likely that this will need to be run in a privileged fashion as
1.35 +follows:
1.36 +
1.37 +sudo ./upload.py -i
1.38 +
1.39 +The script should act as a terminal, showing a ">" prompt that can accept
1.40 +various commands. Merely getting the prompt should be enough of an indication
1.41 +that the program is functioning on the device.
1.42 +
1.43 +Once the programming circuit has been constructed (see "Arduino Interfacing"
1.44 +below), the upload.py script can be used to upload data to the Am29F010
1.45 +device. For example:
1.46 +
1.47 +sudo ./upload.py jungle.rom
1.48 +
1.49 +This will take jungle.rom and write it to the first sector of the Am29F010. To
1.50 +verify the operation, the following command can be used:
1.51 +
1.52 +sudo ./upload.py -v jungle.rom
1.53 +
1.54 +To write to other sectors, an option can be specified. For example:
1.55 +
1.56 +sudo ./upload.py -s 1 junglecode.rom
1.57 +
1.58 +Again, the operation can be verified as follows:
1.59 +
1.60 +sudo ./upload.py -s 1 -v junglecode.rom
1.61 +
1.62 +Note that the -s option must appear first.
1.63 +
1.64 +The upload.py script can accept multiple files and will write each of them to
1.65 +consecutive sectors. However, it can be more prudent to write files
1.66 +individually, especially if the circuit is behaving in a less than completely
1.67 +reliable fashion.
1.68 +
1.69 Device Compatibility
1.70 ====================
1.71
1.72 @@ -76,102 +138,47 @@
1.73
1.74 Am29F010 CE# = ROM #1 CS# AND ROM #2 CS#
1.75
1.76 +Wiring Details
1.77 +--------------
1.78 +
1.79 ROM #1 ROM #2 74HC08 Am29F010
1.80 ------ ------ ------ --------
1.81 CS# 1A A14
1.82 CS# 1B
1.83 1Y CE#
1.84 -
1.85 -Pins
1.86 -====
1.87 -
1.88 -A0-A16 17-bit addressing
1.89 -DQ0-DQ7 8-bit data transfer
1.90 -CE# chip enable
1.91 -OE# output enable
1.92 -WE# write enable
1.93 -VCC 5V
1.94 -VSS ground
1.95 -NC (not connected)
1.96 -
1.97 -Low-Level Operations
1.98 -====================
1.99 -
1.100 -CE# high standby
1.101 -CE# low read, write or output disable
1.102 -
1.103 -OE# high, WE# high output disable
1.104 -OE# low, WE# high read
1.105 -OE# high, WE# low write
1.106 -
1.107 -Thus, for reading and writing:
1.108 -
1.109 -OE# = not WE#
1.110 -
1.111 -Timing
1.112 -======
1.113 -
1.114 -Addresses are latched on the falling edge of the latest of WE# and CE#
1.115 -Data is latched on the rising edge of the latest of WE# and CE#
1.116 -
1.117 -Strategy:
1.118 -
1.119 - 1. Start with CE#, OE#, WE# high (standby, output disable)
1.120 - 2. Bring CE# low (output disable)
1.121 - 3. Set addresses
1.122 - 4. Bring WE# or OE# low for operation (write or read)
1.123 - 5. Read or write data
1.124 - 6. Bring WE# or OE# high (output disable)
1.125 -
1.126 -Operation Modes
1.127 -===============
1.128 +OE# OE#
1.129
1.130 -By default, the device is in read mode, meaning that merely bringing OE# low
1.131 -will produce data for the asserted address.
1.132 -
1.133 -To issue commands to change the mode involves write operations with specific
1.134 -address and data arguments.
1.135 -
1.136 -Sectors
1.137 -=======
1.138 -
1.139 -A[16...14] selects each 16KB sector and is referred to as the sector address
1.140 -or SA in the documentation.
1.141 -
1.142 -Commands
1.143 -========
1.144 -
1.145 -Reset (A=$5555; D=$AA); (A=$2AAA; D=$55); (A=$5555; D=$F0)
1.146 -
1.147 -Autoselect (manufacturer) (A=$5555; D=$AA); (A=$2AAA; D=$55); (A=$5555; D=$90);
1.148 - (A=$X00; read)
1.149 - => D=$01
1.150 -
1.151 -Autoselect (device) (A=$5555; D=$AA); (A=$2AAA; D=$55); (A=$5555; D=$90);
1.152 - (A=$X01; read)
1.153 - => D=$20
1.154 -
1.155 -Simple reset (A=$XXXX; D=$F0)
1.156 -
1.157 -Sector erase (A=$5555; D=$AA); (A=$2AAA; D=$55); (A=$5555; D=$80);
1.158 - (A=$5555; D=$AA); (A=$2AAA; D=$55); (A=SA; D=$30)
1.159 -
1.160 -Program (A=$5555; D=$AA); (A=$2AAA; D=$55); (A=$5555; D=$A0);
1.161 - (A=PA; D=PD)
1.162 -
1.163 -Progress
1.164 ---------
1.165 -
1.166 -Programming and erasure commands employ data pins as follows:
1.167 -
1.168 - Programming Erasure
1.169 -DQ7 On completion: DQ7-out On completion: 1
1.170 -DQ6 During: toggling value During: toggling value
1.171 -DQ5 On failure: 1 On failure: 1
1.172 -DQ3 Sector erase begun: 1
1.173 -
1.174 -A read operation is required to obtain these outputs, typically with the same
1.175 -address used to initiate each operation.
1.176 +ROM (Common) 74HC08 Am29F010
1.177 +------------ ------ --------
1.178 +VCC VCC
1.179 +GND GND
1.180 +VCC VCC
1.181 +VCC WE#
1.182 +D0 DQ0
1.183 +D1 DQ1
1.184 +D2 DQ2
1.185 +D3 DQ3
1.186 +D4 DQ4
1.187 +D5 DQ5
1.188 +D6 DQ6
1.189 +D7 DQ7
1.190 +A0 A0
1.191 +A1 A1
1.192 +A2 A2
1.193 +A3 A3
1.194 +A4 A4
1.195 +A5 A5
1.196 +A6 A6
1.197 +A7 A7
1.198 +A8 A8
1.199 +A9 A9
1.200 +A10 A10
1.201 +A11 A11
1.202 +A12 A12
1.203 +A13 A13
1.204 +GND A15
1.205 +GND A16
1.206 +GND GND
1.207
1.208 Arduino Interfacing
1.209 ===================
1.210 @@ -264,3 +271,95 @@
1.211 74HC273 #1 CP = 1; 74HC273 #2 CP = 0
1.212 Q[7...0] = 74HC273 #0 Q[7...0]
1.213 OE# = 1
1.214 +
1.215 +Pins
1.216 +====
1.217 +
1.218 +A0-A16 17-bit addressing
1.219 +DQ0-DQ7 8-bit data transfer
1.220 +CE# chip enable
1.221 +OE# output enable
1.222 +WE# write enable
1.223 +VCC 5V
1.224 +VSS ground
1.225 +NC (not connected)
1.226 +
1.227 +Low-Level Operations
1.228 +====================
1.229 +
1.230 +CE# high standby
1.231 +CE# low read, write or output disable
1.232 +
1.233 +OE# high, WE# high output disable
1.234 +OE# low, WE# high read
1.235 +OE# high, WE# low write
1.236 +
1.237 +Thus, for reading and writing:
1.238 +
1.239 +OE# = not WE#
1.240 +
1.241 +Timing
1.242 +======
1.243 +
1.244 +According to the datasheet, addresses are latched on the falling edge of the
1.245 +latest of WE# and CE#, data is latched on the rising edge of the latest of WE#
1.246 +and CE#.
1.247 +
1.248 +Strategy:
1.249 +
1.250 + 1. Start with CE#, OE#, WE# high (standby, output disable)
1.251 + 2. Bring CE# low (output disable)
1.252 + 3. Set addresses
1.253 + 4. Bring WE# or OE# low for operation (write or read)
1.254 + 5. Read or write data
1.255 + 6. Bring WE# or OE# high (output disable)
1.256 +
1.257 +Operation Modes
1.258 +===============
1.259 +
1.260 +By default, the device is in read mode, meaning that merely bringing OE# low
1.261 +will produce data for the asserted address.
1.262 +
1.263 +To issue commands to change the mode involves write operations with specific
1.264 +address and data arguments.
1.265 +
1.266 +Sectors
1.267 +=======
1.268 +
1.269 +A[16...14] selects each 16KB sector and is referred to as the sector address
1.270 +or SA in the documentation.
1.271 +
1.272 +Commands
1.273 +========
1.274 +
1.275 +Reset (A=$5555; D=$AA); (A=$2AAA; D=$55); (A=$5555; D=$F0)
1.276 +
1.277 +Autoselect (manufacturer) (A=$5555; D=$AA); (A=$2AAA; D=$55); (A=$5555; D=$90);
1.278 + (A=$X00; read)
1.279 + => D=$01
1.280 +
1.281 +Autoselect (device) (A=$5555; D=$AA); (A=$2AAA; D=$55); (A=$5555; D=$90);
1.282 + (A=$X01; read)
1.283 + => D=$20
1.284 +
1.285 +Simple reset (A=$XXXX; D=$F0)
1.286 +
1.287 +Sector erase (A=$5555; D=$AA); (A=$2AAA; D=$55); (A=$5555; D=$80);
1.288 + (A=$5555; D=$AA); (A=$2AAA; D=$55); (A=SA; D=$30)
1.289 +
1.290 +Program (A=$5555; D=$AA); (A=$2AAA; D=$55); (A=$5555; D=$A0);
1.291 + (A=PA; D=PD)
1.292 +
1.293 +Progress
1.294 +--------
1.295 +
1.296 +Programming and erasure commands employ data pins as follows:
1.297 +
1.298 + Programming Erasure
1.299 +DQ7 On completion: DQ7-out On completion: 1
1.300 +DQ6 During: toggling value During: toggling value
1.301 +DQ5 On failure: 1 On failure: 1
1.302 +DQ3 Sector erase begun: 1
1.303 +
1.304 +A read operation is required to obtain these outputs, typically with the same
1.305 +address used to initiate each operation.