ArduinoAm29F010

README.txt

3:fd32e1d619ab
2015-01-19 Paul Boddie Fixed the command definitions and pin usage; made changes to help debugging.
     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=$5555; D=$AA); (A=$2AAA; D=$55); (A=$5555; D=$F0)
    60 Autoselect (manufacturer)   (A=$5555; D=$AA); (A=$2AAA; D=$55); (A=$5555; D=$90); (A=$X00; read)
    61                             => D=$01
    62 Autoselect (device)         (A=$5555; D=$AA); (A=$2AAA; D=$55); (A=$5555; D=$90); (A=$X01; read)
    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, and when neither latch is
    78 selected, the data pins will be used to read or write data from the flash
    79 memory.
    80 
    81 As a result, only 13 pins are needed on the Arduino.
    82 
    83 Arduino     74HC273 #1  74HC273 #2  Am29F010
    84 -------     ----------  ----------  --------
    85 1                                   CE#
    86 2                                   OE#
    87 3                                   WE#
    88 4           CP
    89 5                       CP
    90 6           D0 (*)      D0 (*)      DQ0
    91 7           D1 (*)      D1 (*)      DQ1
    92 8           D2 (*)      D2 (*)      DQ2
    93 9           D3 (*)      D3 (*)      DQ3
    94 10          D4 (*)      D4 (*)      DQ4
    95 11          D5 (*)      D5 (*)      DQ5
    96 12          D6 (*)      D6 (*)      DQ6
    97 13          D7 (*)      D7 (*)      DQ7
    98             Q0                      A0
    99             Q1                      A1
   100             Q2                      A2
   101             Q3                      A3
   102             Q4                      A4
   103             Q5                      A5
   104             Q6                      A6
   105             Q7                      A7
   106                         Q0          A8
   107                         Q1          A9
   108                         Q2          A10
   109                         Q3          A11
   110                         Q4          A12
   111                         Q5          A13
   112                         Q6          A14
   113                         Q7          A15
   114 GND                                 A16 (not used)
   115 5V          MR# (**)    MR# (**)
   116 5V          VCC         VCC         VCC
   117 GND         GND         GND         VSS
   118 
   119 (*) Apply pull-down resistor to 74HC273 D inputs when driving using switches.
   120 (**) Apply pull-up resistor to 74HC273 MR# inputs to preserve state.
   121 
   122 74HC273 Q outputs may initially be high and should be reset, either driving
   123 MR# low or by explicitly latching values onto each device.
   124 
   125 Set Address
   126 -----------
   127 
   128 74HC273 #1 CP = 1; 74HC273 #2 CP = 0
   129 74HC273 #1 D[7...0] = A[7...0]
   130 74HC273 #1 CP = 0; 74HC273 #2 CP = 1
   131 74HC273 #2 D[7...0] = A[15...8]
   132 
   133 Write Data
   134 ----------
   135 
   136 Configure pins as D[7...0]
   137 WE# = 0
   138 74HC273 #1 CP = 0; 74HC273 #2 CP = 0
   139 74HC273 #3 D[7...0] = D[7...0]
   140 WE# = 1
   141 
   142 Read Data
   143 ---------
   144 
   145 Configure pins as Q[7...0]
   146 OE# = 0
   147 74HC273 #1 CP = 1; 74HC273 #2 CP = 0
   148 Q[7...0] = 74HC273 #0 Q[7...0]
   149 OE# = 1