ArduinoAm29F010

Changeset

25:d6482c4f3bb2
2015-03-09 Paul Boddie raw files shortlog changelog graph Added software notes, Dual ROM Adaptor wiring details, and moved the Arduino interfacing details above the general technical notes.
README.txt (file)
     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.