Вы находитесь на странице: 1из 23

Flash Memory Technology and Techniques

Class 327 Embedded Systems Conference Spring 98


William Grundmann, Intel Corporation

OVERVIEW INTRODUCTION TO FLASH MEMORY

Flash memory has emerged as a The type of flash memory used in


mainstream technology for storing firmware most embedded systems has the same kind of
in embedded systems. While flash memory bus interface as EPROMs or SRAMs. Some
can be used like an EPROM–installing a of the first applications for flash were to
programmed device into a PCB–such an replace EPROMs for firmware storage, so
implementation wastes a great deal of good way to introduce flash memory is to
functionality. The same flash memory that compare it to EPROMs.
stores the firmware can store data that is
important to an end user or service technician. PROGRAMMING AND ERASING
All that is needed to take full advantage of
flash memory?s capabilities is an When operating in a system,
understanding of how to use flash, and EPROMs have one kind of bus operation, bus
perhaps a few suggestions on how flash can read, and one operating mode, read array.
improve a product. EPROMs cannot be written to in-circuit, so
they have no internal state machines that can
This paper provides an overview of be put into special modes. EPROMs do have
flash memory technology—how to read, other modes of operation though. They can
write, program and erase it. It continues by be programmed in a programmer by applying
taking a brief look at how a flash memory cell elevated voltages--the programmer adds two
stores data. This is useful, because it explains modes: program and verify. There is another
some of the unique operating characteristics mode, erase. In this mode the EPROM is
of flash. illuminated by UV light, and all the cells are
erased..
There are two new developments that
will increase the density of flash memories Current flash devices have all this
and make them easier to use. Multi-Level built in. Consequently, flash devices need
Cell technology allows two bits to be stored two types of bus operations--read and write.
in one transistor. The Common Flash These two operations are used to put the
Interface is a new JEDEC standard that memory into a variety of operating modes:
improves forward and backward Read Array, Program, Erase, and so on.
compatibility. Both will be covered.
BUS OPERATIONS
This paper will discuss three
techniques that improve a product or The bus operations for all flash
manufacturing flow without adding memories are static in nature. There is no
substantial cost: programming the boot code maximum time between edges and
in-system, logging errors in flash and adding operations. Figure 1 shows qualitative timing
removable media to an embedded system diagrams for read and write bus transactions.
OPERATING MODES

CE# Operating modes vary somewhat


ADDRESS between different manufacturers, and a
OE# manufacturer can offer two devices with
DATA OUT different modes and commands to reflect
different architectures. This discussion will
READ WAVEFORMS use the modes supported by the 28F400B3, an
Intel Boot Block Flash memory.
CE#
ADDRESS These modes make use of the Write
WE# State Machine (WSM). The WSM is a
DATA IN controller that is built into each device. It
looks at all writes to the flash, decodes them
WRITE WAVEFORMS and implements the commands.

Read Array
Figure 1
The Read Array is the default mode.
BUS Read The flash memory enters this mode upon
power-up. It stays in this mode until a valid
command is received that puts it in a different
The read interface of a typical flash
mode. While in this mode, all read operations
memory is identical to a standard EPROM.
return memory contents. This is exactly
The address is applied along with an active
what an EPROM does, and unless
low control signal, CE# . After the tACC, the
commanded otherwise, the flash will act just
data will be available, and the Output Enable
like an EPROM. Incidentally, disabling the
(OE#) input will gate the data onto the bus.
WE# input (tying it high) will prevent any
This data will usually be the contents of the
commands from being received, so the flash
addressed location, but it can also be status
will always be in the Read Array mode.
information about a program or erase
operation. The current operating mode
Since Read Array is the default mode,
selects what is placed on the bus in response
the rest of the command sequences discussed
to a read.
will assume that the flash is in Read Array.

BUS Write Program

Writing to a flash memory is identical Writing the value 0x40 to the


to writing to an SRAM or peripheral. The memory will put it in the Program mode.
address is applied and CE# is asserted While in this mode, any bus reads may return
followed by the WE# signal. Prior to WE# invalid data. The address and data included
being de-asserted, the data must be applied to in the next write cycle will be used to
the bi-directional data I/Os. The data written program the array.
can be commands, or the new memory Figure 2 shows a flow chart of a
contents depending on the flash's operating typical programming operation. For a typical
mode. location there will be a minimum of 4 bus
transactions: Program Setup Command,
Program Command, Read Array Command
and Read Status Register.
driver to SRAM and run from it until the
flash is available.
Program
Erase

Write 0x40 Writing 0x20 to the flash begins the


to Flash
Erase mode. If the next write has a data value
of 0xD0, then an erase operation will
Write Address and commence. Any read operations done when
Data of location to
be programmed in the Erase mode may return invalid data or
status.

Put Flash into Once again, the entire erase operation


Read Status Mode is automatic, and the result is posted to the
status register. This set of commands erases
an entire block or segment and takes a few
Read Status seconds. Clearly, the WSM off-loads a lot of
no details from the CPU.

Read Status
Finished
Programming
? Both program and erase operations
post their results in the status register. When
Yes
the flash receives the data 0x70, it enters the
Return Read Status mode. In this mode, any read
operation returns the contents of the status
register.
Figure 2
Upon receiving a valid program PROTECTION
sequence the WSM turns on the charge
pumps and programs the location. It does this Flash devices incorporate some form
by internally applying program pulses until of protection. The concern is that if a
the location verifies correctly. Once the processor were operating in some erroneous
location is verified, it reflects this successful way, it could erroneously issue program or
operation in the status register. Failure of the erase commands to the flash memory. To
programming operation sets one or more error prevent this, a flash memory will usually
flags. Once begun, all this happens without support some combination of two basic types
the intervention of the external controller, and of protection schemes: hardware and
for a typical location in a new device, takes software.
about 10 microseconds.
A hardware scheme requires that
Most flash memories can only do one specific voltages be applied to pins on the
thing at a time, so while a location is being device before the device can be altered. The
programmed or erased, the rest of the device voltages can be TTL logic levels or some
is unavailable. This means that a CPU cannot special voltage like 12v, and the pins can be
execute code from a flash that is not in the dedicated or shared with other functions. An
Read Array mode. Systems with other example of hardware protection is the VPP pin
execution memory locate the low-level flash
driver there. Those without typically copy a
on a flash memory; if no voltage is applied,
the device will not program or erase. The boot code is in a separate block
so that data or application code can be erased
and reprogrammed without affecting the boot
BYTE
ADDRESS program.
0x3FFFF

128 K B
SUSPEND FEATURES
M A IN S E G M E N T
C O D E or D A TA

As will be seen in the next section,


0x20000
program and erase operations can take
0x1FFFF
milliseconds or even seconds. There are
96 KB
many instances where a system will need to
M A IN S E G M E N T
C O D E or D A TA read data in one block while a different block
0x8000
is being erased or programmed. Flash
0x7FFF
8 K B D A TA or P A R A M E TE R memories implement a suspend command
SEGM EN T
8 K B D A TA or P A R A M E TE R that permits this.
0x4000 SEGM EN T
0x3FFF
16 KB BO O T SEG M EN T
0x0000
When the WSM receives a suspend
command during an erase or program
Figure 3 operation, it saves the state of the operation
and enters a mode that allows the array to be
accessed. This is like the Read Array mode,
Software protection mandates that a except that the WSM is running, so the
code sequence be written in order to initiate component may draw more a little more
an operation. Consider the erase command current.
in the preceding discussion. Two codes, 0x20
and 0xD0, were required in order to begin the SUMMARY
erase operation. The first can be considered a
command, but the second is clearly a code. Flash memories can be a complete
Some devices require code sequences that are non-volatile memory subsystem. Current
four or six bytes long. devices implement all the pumps and control
electronics necessary to program or erase
SEGMENTATION them.

Current flash devices are blocked or FLASH CELL TECHNOLOGY


segmented. All the locations in a block share
common erase circuitry, so while only one Flash memories can do more than
location can be programmed at a time, an store the firmware; they can store or log data.
entire block or segment is erased at once. By Some understanding of how flash memories
definition, a single location in a flash memory store data will be useful in matching flash’s
cannot be erased without erasing the rest of programming characteristics to an
the block. application.

Normally, the boot code will be Flash, EEPROM and EPROM all
located in one segment, the application code store data the same way. Figure 4 shows a
placed in several other segments and some simplified diagram of one of these cells. It is
non-volatile data stored in another. Figure 3 a N-channel transistor with a second gate, the
shows an address map of an Intel 28F200. Floating Gate, sandwiched between the
Its blocks are sized to fulfill these three Control Gate, and the channel.
functions.
while the block is transferred out of the
The Control Gate (CG) is connected memory array and into an on-chip SRAM
to other circuitry and works like a normal buffer. It can be transferred out of the buffer
gate would. When sufficient positive voltage at a rate of 20 Mbytes/s.
is applied to it, greater than the threshold
voltage, the transistor turns on, and a The type of reading supported by an
conduction path will be established between architecture determines if the memory can be
the Source and the Drain. executed from. The former example supports
direct execution, or eXecution In Place (XIP),
The Floating Gate(FG) modulates the the latter does not.
affect of the CG. If the Floating Gate has a
sufficient negative charge, it will prevent the PROGRAMMING OR ERASING
transistor from turning on when the normal
threshold voltage is applied to the Control These devices store data by injecting
Gate. electrons onto the Floating Gate. On today’s
devices, a cell is programmed when
approximately 50,000 excess electrons are in
OXIDE the FG. They stay in the FG for 10 years or
CONTROL GATE more, because there is no conduction path to
FLOATING GATE
the FG--the FG is completely isolated from
the rest of the transistor. The only way for
SOURCE DRAIN electrons to get into it is for them to be driven
CHANNEL
through the oxide that surrounds the FG. The
cell is erased by removing the electrons.

Figure 4 Programming and erasing are


accomplished by applying elevated voltages,
10v to 20v, to the cell to cause electrons to
READING A FLASH CELL propagate through the oxide. This has three
consequences.
An unprogrammed cell has no
additional charge on the FG, and the • It takes time to drive the current
transistor turns on at its characteristic through the oxide barrier, so program
threshold . When the same cell is and erase operations take much longer
programmed, it has enough electrons in the than in an SRAM.
FG to prevent it from turning on when the
threshold voltage is applied. To read a cell, • The oxide barrier can “wear out” after
the external circuitry applies the threshold repeated program/erase cycles.
voltage to the CG and observes if the
transistor turns on. • Elevated voltages are required by the
cell
While all architectures use similar
principles to store and read data, they do not Program and Erase Performance
act the same from a system point of view.
NOR permits a single location—word or If the application will store data in a
byte—to be read in approximately 100ns. flash memory, the amount of time it takes to
program or erase the device can be an
NAND only reads blocks of 512 important specification. Also, flash
bytes. There is an initial latency of 10 µs memories typically operate on blocks. To
accurately specify a device, it is necessary to and reduces the amount of current that flows
understand how long it takes for an operation into the Floating Gate. The result is a slower
and how big a block the operation affects. An program or erase operation.
operation that takes 1 second may seem slow,
but if it erases 128-Kbytes, the throughput is The typical times published in
128 Kbytes/sec. datasheets are for a new cell. Since the
amount of performance degradation will vary
Depending on the type of flash, it will with the technology and vendor, it is
take between 5 µs and 1 second to program or necessary to contact the vendor to estimate
erase a cell. Cells are usually programmed or what effect cycling will have on their devices.
erased in parallel, so that a slow operation is
done on a lot of cells at once. For example, a In general though, the degradation is
NOR architecture device may program a gradual and occurs over tens of thousands of
single byte in 5 µS and erase 64-Kbytes in 1 program erase cycles.
second
Applying Elevated Voltages
There are three aspects to consider
when choosing a flash memory that will be The original flash memories required
used to store data and will be programmed in- that elevated voltages be applied for precise
system. times. New devices can generate and control
these voltages internally. It is worth
• What rate does the application mentioning that the flash transistor requires
require? these elevated voltages, and if they are not
applied externally, they are generated on-chip
• What rate does the device support? by voltage pumps.
This can be the average time to
program and erase a byte Voltage pumps take up silicon and
add cost to the device. The more current the
• How big of a buffer is necessary, if pump can supply the more bits that can be
any, to store in-coming data while the programmed at once. However, that higher
flash is busy programming or erasing performance pump takes up more space
the previous block. Typical flash memories strike a balance
between the two.
Oxide Wear-Out
Several vendors have a separate pin
When electrons or holes propagate for a programming voltage, VPP. One benefit
through the oxide, some do not make it all the of this is that a device may program quicker
way--they get trapped. When they do, they when a higher voltage is applied to the pin.
alter behavior of, or wear out, the oxide. This is because the device will sense the
higher voltage and modify the internal
A cell whose oxide has trapped algorithm to program more bits at once.
charge does not program or erase as fast as an
electrically neutral one. The trapped charges SUMMARY
repel the carriers that are trying to propagate
through it. For example, if a programming The flash memory cell intrinsically
mechanism drives electrons through the take time to program or erase. How much
oxide, then the oxide regions that sustain the time depends on the method used to for
heaviest program current will gain a negative carriers through insulating barriers. For a
charge. That negative charge repels electrons given method, the rate can be increased by
operating on many bits in parallel. To choose The second issue is that the identifier
a flash memory, match the write/erase must, by definition, be unique. When a new
characteristics of the memory to the device is introduced, it will have a new,
application. unique identifier, so all software written prior
to the release will reject the new device. This
COMMON FLASH INTERFACE is unnecessary, because most manufacturers
make new devices compatible with their
The Common Flash Interface (CFI) is previous ones.
a new way to find out what kind of flash
memory is in a socket. It is designed to work COMMON FLASH INTERFACE
even with flash components that are designed
and produced after the system software has The Common Flash Interface solves
been written. this problem by providing a standard way for
a system to interrogate a flash memory, and it
JEDEC IDENTIFIERS defines the format for the information. The
information is descriptive. Embedded in the
In the past, a flash memory or an component is a trimmed-down datasheet that
EPROM had a mode where a JEDEC contains enough information for the system to
Identifier could be read from the device. This program or erase the flash memory, even if
was originally intended for, and used by, the component was designed after the system
EPROM programmers. When system firmware was frozen in ROM.
designers decided to make their flash sockets
accept different devices, they used these CFI ACCESS
identifiers, because they were the only way to
tell what program and erase algorithm to use. A flash memory will enter into the
CFI data mode when a value of 0x98 is
This technique had two flaws: there written to location 0x00055. From then on,
was no standard way to read the identifier, all read cycles will return data from the CFI
and there was no way to anticipate what the ROM instead of the flash array. Figure 5
identifiers would be for future devices. shows how this works.

To read the identifier from an Intel CFI DATA


device, the system must first write 0x90 to it,
then read the identifier from locations The ROM is separated into two areas,
0x00001 and 0x00002. To accomplish the data that applies to all devices and data that is
same thing with a device from another specific to one vendor. The generic area has
vendor, the system must write 0x55 to a predetermined format. Each location stores
location 0x0000, followed by 0xAA to a specific parameter using a standard
location 0x0000. The identifier can then be encoding.
read from locations 0x0000 and 0x0001.
For example, the minimum VCC is
To find out what kind of memory is stored in location 0x1B of the CFI ROM. It is
in the socket, the program attempts to read an in BCD with a decimal point between the two
identifier using one algorithm, and if it fails nybbles. Other information like access time,
to return the expected result, it tries a block architecture, typical program and erase
different one. This is workable but not times and VPP are also stored in this area.
optimal.
The format and encoding are listed in
the “Common Flash Memory Interface
Specification”. This specification was uses the Intel basic algorithm—algorithm
recently adopted by JEDEC and should number 3.
appear on their website soon. Check
www.eia.org/jedec/. There is also a mechanism to support
minor variations of the same algorithm.
These details are located in the vendor
specific area.
CFI
ROM SUMMARY
FLASH INTERFACE

FLASH
ARRAY
The Common Flash Interface allows
a single software driver to work with a variety
of flash components from different
manufacturers.
CFI COMPLIANT FLASH
MULTI-LEVEL CELL

The CFI data is stored in a separate ROM Multi-Level Cell (MLC) technology
located on-chip. The memory locations in the
ROM do not detract from the size of the array. stores two bits in a single flash memory
This illustration shows a 2 Mbit device that transistor, twice the density of existing
supports CFI. It has a 2 Mbit Flash array and a
ROM with about 50 locations. When 0x98 is devices that store one bit. An MLC flash
written to 0x0005, the interface is switched memory with
over to the ROM. To access the Flash again,
write 0xFF to location 0x0005.
Charge on the Floating Gate

00
Figure 5
0
01
PROGRAMMING ALGORITHMS

One location in the generic area 10


contains a number that identifies what 1
programming algorithm the device supports. 11
If two devices have the same algorithm, they
will have the same number in the algorithm Coding for Coding for
location. Existing MLC
Devices Devices
Notice the difference between CFI
data and the JEDEC ID. The JEDEC ID was
Figure 6
unique for each device. Since CFI data is
descriptive, two devices with identical 16 million transistors can store 32
programming algorithms will have the same million bits. This is not a mode that can be
number in the algorithm location. invoked in any device; the flash memory
must have been designed to do this.
The table that lists what numbers go
with what algorithms is in a separate Current devices store data by varying
document, “CFI Publication 100”. Each flash the amount of charge on a Floating Gate. If
vendor will have a few numbers that the gate is neutral, the cell is erased and
correspond to their unique programming contains a 1. If charged, the cell is
algorithms. For example, the boot block programmed and contains a 0. These
device described in the introductory section
components implement two charge levels per hence the specifics of storing it in flash, will
cell. vary between applications. There is one kind
of data that is useful in almost all systems:
MLC devices also vary the gate data that helps an engineer diagnose field
charge, but more precisely. They use four failures or problems. A brief discussion of
levels; each level represents one of four states what to save and how to save it is included.
or two bits. Figure 6 illustrates the
difference between MLC flash memories and Few systems operate completely
standard ones. independently. Most exchange code or data
with other computers throughout their
USING MLC FLASH MEMORIES lifetime. One way of doing this is with
removable flash memory cards, and the
MLC devices have the same interface industry standard card form factor is
as regular flash memories. The Write State PCMCIA. The final section discusses how to
Machine does all the work and improved add a PCMCIA socket to an embedded
sense circuitry distinguishes between the four system.
levels to produce the read data. MLC devices
behave the same as standard devices because PROGRAMMING BOOT CODE IN-
the details are handled on-chip. SYSTEM

SUMMARY The boot code resides at the CPU's


reset address and performs critical functions
For a given array size and to start the system. These functions can be as
lithography, MLC technology can double the simple as initializing a few interrupt vectors
amount of data the array can store. MLC prior to branching to resident applications
components in chip-sized packages offer code, or it can involve something more
unprecedented capacity in a small area. One complex like loading the application code
new MLC device can store 64Mbits in a from a disk prior to branching. In a system
package that is less than half the size of a with flash memory, this boot code may also
postage stamp. contain the necessary code for in-system
application program updates.
FLASH TECHNIQUES
A system cannot program its own
This section discusses ways to add boot code, because the boot code is necessary
functionality to a product without adding for the CPU to operate. Therefore, a typical
substantial cost production flow involves programming the
boot code into the flash memory prior to
In most systems, the first job of a soldering it to the PCB. A better way would
flash memory is to store the firmware, so the be to solder blank components to the PCB
processor boots directly from the flash. The and program the boot code in-system. There
first technique describes how to program this are several advantages to doing this: reduced
boot code in-systems, hence improving the component handling, reduced inventory and
manufacturing flow. This section also improved responsiveness.
includes a few pointers on programming the There are two mutually exclusive
rest of the code. trends in flash packaging: the size is
decreasing and the lead count is increasing.
This paper began with the idea that The only way to satisfy both is to decrease the
flash could do more than store firmware; it lead pitch. An example of this is the TSOP
can also store data. The kind of data, and (Thin Small Outline Package) package; it has
a 0.5 mm lead pitch. As components shrink, will usually be 4 to 8 bits long, then shift in
they become more difficult to handle reliably, the data for the command. The JTAG
and a programming step introduces interface is static, so there is no maximum
opportunity for lead damage. New chip-sized time between bits or edges.
packages make a programming operation
even more difficult. All JTAG implementations will have
the capability to do boundary scan. The
Programming and handling boundary scan register is a shift register that
equipment is expensive, so many companies is connected to all the I/O pins in the device.
elect to have a third party do their flash The state of all input pins can be latched into
programming. This adds lead-time to the this register then shifted out, or the levels to
production process, and if different products be output can be shifted in, then driven onto
have different boot codes, the added lead- the pins. All this can be done with the CPU
time will mean increased inventory. This in a suspended state.
inventory makes it difficult to respond to
unexpected events such as emergency orders The result of this is that bus cycles,
albeit slow ones, can be generated by shifting
When a flash memory is in the correct levels for address, control and
programmed, it becomes more application data pins; driving them onto the bus; latching
specific, and therefore, less flexible. The best any inputs and shifting them out. The entire
approach is to postpone the programming boundary scan register must be shifted in or
until it is necessary, and allow the capability out to write or read a pin, but more than one
to change the programming. In-system pin can be read or written in a single shift
programming of boot code achieves both of operation.
these goals.
For a more complete discussion of
TECHNIQUES this technique, refer to "Designing for On-
Board Programming Using the IEEE 1149.1
The basic strategy for including this (JTAG) Access Port ", Intel Application Note
capability in a system is opportunistic--one AP-630 . It is available from
looks at what one has to work with, then www.intel.com/design/flcomp/applnots
chooses the tactic that minimizes system cost and includes sources for
and manufacturing infrastructure penalties. commercially available JTAG programmers
Most of these techniques will fall into two
main categories: those that make use of the CPU DEBUG INTERFACE
CPU or interface logic to operate on the flash,
and those that simply isolate the flash from Many CPUs have a debug interface.
everything else, so it can be manipulated. This usually takes the form of a proprietary
serial interface and protocol that can access
JTAG BOUNDARY SCAN internal CPU registers and the bus. Although
included on the same chip, this capability is
If the CPU chip includes a JTAG totally separate from the CPU, so the CPU
interface, that interface can be used to need not be running in order for this to work.
manipulate the CPU's pins and hence the bus. The commands that are useful for
programming flash are ones that simply read
JTAG is a standard interface and and write memory; they are used to write
protocol consisting of a 4 or 5 signals that can commands to and read status from the flash.
shift commands and data into a device. The
basic protocol is to shift in a command which
Contact the CPU vendor for
information on the debug interface and any

'373 LATCHES
tools that support it.

ADDRESS
TAPPING INTO THE INTERFACE LOGIC

FLASH MEMORY
If the CPU does not support a back
door into the bus, perhaps the interface logic

LOGIC / PLD
CE#

CONTROL
will. Figure 7 shows a block diagram of a OE#

CPU
typical system. There are latches and drivers WE#
for the address lines; there is some logic to
generate and drive control signals, and
buffers on the data bus. Some systems

'245 XCEIVERS
DATA BUS
incorporate this into a single PLD, others use
octal devices and no logic.

This technique involves modifying


this interface logic to implement an additional
interface to the flash. This back door allows
address, control and data to be applied to the Figure 7
flash while CPU operation is suspended. The
alternative path can take many forms. The
The easiest system to modify is one
most obvious is to multiplex the
that already has the interface logic in a single
programming inputs with the CPU signals
PLD. All that is necessary is to modify the
and apply the output of the multiplexer to the
logic equations or schematics for the PLD to
flash inputs. However, multiplexing so many
enhance the address latches to allow shifting
signals adds a lot of extra logic and pins to
in addresses. The PLD can then latch address
typical PLD.
from the CPU or shift in an address from an
external pin.
The creation of a serial I/O port,
especially for the wider buses like the address
The control logic could be similarly
bus, saves pins and logic. The data to create
modified, but since there are only three inputs
bus cycles could be shifted in or out serially
(OE#, WE# and CE#), and since they change
as was done with previous examples, but this
more often than the data or address inputs,
time, the designer is creating his own shift
there is a performance benefit to simply
registers that drive the memory. These shift
multiplexing them with the CPUs control
registers can accept parallel data, address and
outputs. Once again, the SHIFT_LATCH#
control from the CPU as before, but in
signal can be used to decide which inputs
addition, this information can be shifted in
drive the flash control inputs.
from a programming connector. The CPU
could be held in reset while the flash is being
The only remaining signal group is
programmed.
the flash/CPU data bus. If it is already latched
and driven in the PLD, then the same shift
register technique can be used as was done
with the address bus.
For the single PLD system, the
impact will be the addition of perhaps 8 I/O
pins to the PLD, some additional product
terms in the logic, and the cost of a
programming connector. It is difficult to www.intel.com/design/flcomp/applnots for
estimate the additional system cost, because it more information on this topic.
depends on how fully the PLD is being
utilized. Perhaps this technique could be used PROGRAMMING THE APPLICATION
only if the PLD has spare resources. Of CODE
course, if the interface logic is incorporated in
an ASIC, the cost impact will probably be Once the boot program is installed,
lower. the applications programs can be loaded in.
Some manufacturing flows involve
ISOLATING THE FLASH programming the flash with test and
calibration routines first, then when they are
If there is no JTAG or debug no longer needed, the application code is
interface on the CPU, and if there is little or loaded in.
no interface logic to modify, then a third
approach is to get the CPU completely off the There are two functions that must be
bus so it will not interfere with the included in a system in order for a CPU to
programming operation. program its own application code. There
must some means of inputting the new
Many CPUs support some program: a serial port or a floppy disk are two
mechanism that relinquishes the bus. This good examples. Almost all systems have
could be a HOLD/HOLD_ACK protocol, or a some way if inputting data.
test mode such as ONCE (ON Circuit
Emulation). Either mode could be invoked Second, there must be some
by signals that are applied by the alternative execution memory that the CPU
programming connector. When the can execute from while the flash is being
programming controller is not connected, programmed. Recall that while the WSM is
these signals could be weakly deasserted. programming the flash, any reads will return
invalid information, and when it is in the
Once the CPU is not driving the Read Status Mode, any reads will return
memory bus, the programming controller can status. Since the flash memory array, and
take over, and do reads and writes to the hence the program, is not available, the CPU
flash. Since it is a parallel interface, it can be must run out of some other memory. One of
the highest performance method for the most common solutions to this is to have
programming the boot code. The bus the CPU copy a small routine into SRAM,
operations should be slowed down to prevent then run from it while the flash is
noise and ringing, but even so a location programming.
could be programmed in 30 microseconds.
All 8K locations could be programmed in .25 USING FLASH MEMORY TO
seconds. This is well within the requirements DIAGNOSE SYSTEM BUGS
for high volume manufacturing.
Regardless how skillfully designed
In this technique, all the pins of the and implemented a product is, when the first
flash must be manipulated by an external units leave the factory, they are destined to do
programmer. The best way to do this is as the things the designers never anticipated.
last step in testing a board on a bed-of-nails Finding and correcting these bugs can take an
tester. See AP-629, “Simplify inordinate amount of time, because
Manufacturing by Using Automatic-Test- information about the problem is usually
Equipment for On-Board Programming” at sketchy and inaccurate.
An inexpensive way to improve the consider upgrading to the next density to
de-bug process is to have a product store make room for the log.
information about what it was doing when a
bug occurred. A system that uses flash If the application is cost-sensitive,
memory for program storage has an excellent incorporate this feature only in the field test
media to permanently store information that or pre-production units. When the product
will be useful to the engineer diagnosing the has matured and all of the bugs are all out,
problem. eliminate the extra memory and use a smaller,
less expensive density. To allow for this,
Much of the information that would pick a flash from a product line that has a
significantly improve the debugging process range of densities in the same footprint.
was processed by the system’s CPU. If the
CPU saved the complete state of the system Choose a flash memory that is
whenever a failure occurred, then anyone blocked allows one area of the flash to be
trying to find a bug would have a head start erased without affecting the rest of the device.
on finding the cause. This is important because the processors code
may be in the same device as the log.
This information will be particularly Blocked memories also have automated write
useful if the failure is intermittent. Failure and erase capabilities.
are intermittent normally because they do not
occur unless a number of factors are present. Most flash memories cannot do two
The factors may not be readily observable, so things at once. The can be read, but not while
two apparently identical sets of inputs or they are being programmed. They can be
circumstances have different outcomes. programmed, but not while they are being
erased. As a result, the CPU cannot execute
If a software update is all that is from the flash while it is being programmed,
needed to fix the problem, the new program so there must be some alternate execution
can be downloaded into the flash memory. memory, like code RAM or ROM, while the
This whole process--reading then updating log is being written into the flash.
the flash--can be done remotely via MODEM.
USE SPARE INPUTS AND OUTPUTS

HARDWARE IMPLEMENTATION Most of the information going into


the log will come from data already available
The first step in implementing this to the CPU, but there are some useful
log is selecting the right type of flash measurements that are not normally required
memory. The right flash has a range of for a system to operate. A few examples are
densities, is segmented and requires minimal battery or line voltages, ambient temperature,
software overhead to write. operation of peripheral devices and the
presence of cables. The key to capturing
One of the more common types of these is to opportunistically use spare inputs
flash used for embedded control is the Boot and outputs--especially spare A/D inputs. For
Block architecture. There are currently three example, a thermistor connected to a spare
densities available--2, 4 and 8 megabit--from A/D input costs a few cents, and measure
at least three different manufacturers. If the internal temperature
existing flash memory has a couple of spare
blocks, then the log will cost nothing to Spare digital inputs are also useful. If
implement. If the application currently uses the product requires peripheral devices that
the entire memory to store the control code,
provide a hardware status output, use these format regardless of the source of the error.
inputs to monitor them. Implementation is simple because there can
be a single routine that writes the data. When
Ideally, when the hardware design is it is time to read the data, a single program
finished, all spare inputs should be connected can be written to convert the information into
to something that will help the engineer a human-readable form.
trying to find a problem.
There is no significant penalty for
INCLUDING A COMMUNICATIONS saving data that may not be needed. In fact, it
CAPABILITY is a preferred approach because it is difficult
to foresee what the bugs will be. Writing
If the product does not have a spare everything about the system improves the
serial port, make one out of an extra digital probability that some key piece of
input, output and software driver. When this information will be in the log when it is
software Universal Asynchronous Receiver- needed. For a small system, this record can
Transmitter (UART) is operating, the rest of be 2K to 4Kbytes. That is a fraction of the
the system can be idle, so the full attention of 32K to 128KByte flash segment, so data on a
the CPU can be given to driving the UART. lot of errors can be saved.
This allows the baud rate to be higher and
makes it easier to write the driver. Connect This size record can be written
an external MODEM to remotely access the quickly. A useful rule of thumb with flash
log. memories is that it takes 10 µsec to write one
location. The CPU can write a 4kbyte record
This is an important capability, in about 40 msec.
therefore it is worthwhile to make sure there
is provision for it. If there are no spare I/Os, WHAT TO SAVE
consider borrowing them from some other
function. The easiest way to do this is with a When an error is detected either by
special MODEM cable. One end mates with the software or the CPU hardware, the
a proprietary connector on the system, and program will invoke an error handler that will
connects to an input and output. These two update the log. It will draw upon two main
signals and the connector would normally be sources of information: exception
doing some other function. Because the measurements and the current memory
system need not operate while the error log is contents.
being sent, the normal function will not be
missed. The other end of the cable mates Exception measure are those made
with a MODEM. Use software to redefine only because an error occurred. They include
the two signals that are being commandeered all A/D channels, digital inputs and outputs,
for communications. the data and status registers of all peripheral
chips or subassemblies--in short, any and all
SOFTWARE IMPLEMENTATION information available about the physical
environment. Make sure that this set does not
They most straightforward way to overwrite any measurement results currently
save the information is using a fixed-length in memory. If the current set were corrupted
record big enough to store the state of the or faulty, a second set will illustrate that.
device. Each time an error occurs, the CPU
will accumulate all the data and write it to the The memory and CPU contents will
currently available segment in the flash. This give a good indication of what the CPU was
approach saves the same data in the same doing when the error occurred. This
information includes the contents of the stack; The program to analyze the
the CPU registers, including all control information need only scale each data item
registers; all process measurements, set- into the correct units, degrees Celsius for
points and variables; the presence of cables; example, and convert it to some human
calibration parameters and so forth. Most readable form. The C programming language
embedded control application operate in a has excellent support for this.
well-defined loop. Every sample-period, the
CPU performs measurements, calculations FIXING THE PROBLEM
and makes decisions. Save one, or maybe
two, sample-period’s worth of this data. Once a problem has been diagnosed,
it is probable that a software revision will be
KEEP AN OPERATIONAL LOG forthcoming to fix, or at least bandage, the
problem. Send the new program to the
An operational log should be kept in product via the same MODEM and
RAM then transferred to flash when an error communications port that was used to retrieve
occurs. This is a RAM-based history of the error log. The system can re-program the
events such as operator keystrokes, time- firmware in the flash.
stamped indications of when motors, etc.
were turned on or off, hourly ambient This does two things: it gets the
temperature readings, and if space is available customer back on line in the quickest possible
a short, hourly snapshot of the process. Other time, but more importantly, it tests the
items to include in the operational log are the solution at installations where the problem
beginning and results of special modes like has actually occurred.
calibrations, receipt of data via a serial port
and charging a battery. Finally it may turn out that some key
data items were left out of the error log
The operational log should answer all routine, or maybe some very specialized tests
questions about how the product is being used need to be performed to further isolate the
and whether the problems are caused by the problem. In that case, the new program may
operator. It should also help diagnosing be a temporary one that only gathers more
interactions between different peripherals. specific information about the failure.
For example, if turning on a motor causes
erroneous measures due to noise or poor SUMMARY
grounding, then the operational log will help
show that. It will have entries showing that Creating an error log in flash memory
the motor was turned on just before the error will substantially improve the debug process,
occurred. and if implemented early in the development
of a product will not materially affect cost or
RETRIEVING THE LOG design time.

The retrieval program is fairly basic. ADDING REMOVABLE MEDIA TO


Once invoked, it sets up a MODEM and EMBEDDED APPLICATIONS
sends the contents of the flash out the serial
port. The ideal device to receive this data is a Another common system requirement
PC. Once copied into a file, it can be is the capability to interchange data or code
forwarded to other engineers and recalled for with other systems. At a high level, there are
analysis. two ways to do this: store the data in internal
memory, and use some means to send it to
another system, or store the data in some
removable media and swap the media cards. It may or may not support hot-
between systems. In either case, flash swapping, and in general, it will not comply
memory's low cost per bit and permanent with all of the PC Card Standard. It need
non-volatile data retention make it a good only comply with those sections—mainly
choice hardware ones—that ensure the socket will
work reliably with a few, predetermined
BENEFITS cards. Prior to designing the socket, the
system architect should select a few specific
The industry standard for removable cards, and use those cards' datasheets to
flash is the PC Card form factor; it is widely specify the host implementation
supported both in terms of flash cards and
systems that accept PC Cards. There are a The balance of this section will
few benefits to using flash memory PC Cards. introduce the main features of PC Cards.
By far, the biggest one is flexibility. The Specific details will be left for the PC Card
amount of memory available for data Standard or product datasheets
interchange can be changed simply by using a
different card. In fact, if the low-end model Linear Flash Card Architecture
of a product does not support data interchange
at all, then there will be almost no added cost A linear flash PC Card looks like a
to that system. memory component. Each location is
accessed uniquely by the address presented to
Another way flash memory PC cards the card. Since it looks like memory to the
add flexibility is that the system can actually host CPU, the CPU can execute directly from
execute code directly from them. Linear flash it.
cards operate exactly like components, so not
only can the amount of memory available Figure 8 shows a block diagram of a
change, but the driver that writes the data can linear flash PC Card. In this card, the
change too. memory is implemented using four flash
memory components. They are accessed in
If only a single type of card is pairs, one component provides the high byte,
supported by a PC Card socket, then the the other the low. This organization is the
hardware and software for that socket will be same as would be used if the components
simple and inexpensive—well within the were being connected directly to a 16 bit
resource budget of a typical embedded microprocessor.
designer
Flash Flash
ADDING A PC CARD SOCKET Component Component

The goal of the PC Card specification


is that a PC Card can be inserted into a Attribute
system, the correct driver invoked, and the PC Card Interface Logic Memory
card will function properly. Designing the and buffers ROM
PC Cards and host systems that accomplish
this is not trivial; they must thoroughly and
completely adhere to the PC Card Standard. PC Card Socket

The designer of an embedded system


Figure 8
has a much easier job. The embedded system
need only work with a predetermined set of
The interface logic implements the probably require buffers on either
somewhat complex byte swapping required in end, solid GND and VCC connections.
the PC Card Standard. If byte swapping were
not implemented, the memory components • The socket may need to permit the
could be connected directly to the interface or user’s inserting or removing cards
through simple, octal buffers. while the system in powered up and
running (hot-swapping).
ATTRIBUTE MEMORY
• The user can insert any PC Card into
The PC Card Standard defines two the socket, so the system should be
kinds of memory, common and attribute. able to supply enough current for a
Common memory is available to the host to PC Card that draws the maximum
read and write programs and data. On a flash load, 1 Ampere.
PC Card, the common memory is made up of
flash components. Resolving these issues adds cost and
complexity to a product, so the decision to
Attribute memory is primarily used to permit user access should be given
store information about the card. In a general appropriate consideration.
purpose socket, any kind of card can be
inserted, and the host must be able to link it to
the correct driver. The first accesses a host
makes to a card are to the card’s attribute
memory. That is how it finds out what kind
of card has been inserted. This information,
called the Card Information Structure (CIS)
must be included in every card and must be in
a predetermined format

MECHANICAL OVERVIEW
Figure 9
A Type I PC Card is 3.3 mm thick, 54
Designing a socket with restricted
mm wide and 85.6 mm long. It uses a
access is easier and less expensive. A socket
polarized, 68 pin connector. The host socket
without an eject mechanism, like the one in
has male contacts; the card has female
Figure 9, can be mounted inside the system,
contacts.
and some or all of the electrical issues are
eliminated.
Selecting a PC Card Socket
• No cabling will be necessary because
If inserting and/or removing the card
the socket can be mounted in a
will be part of the system’s normal operation,
location that is convenient for the
then the user must have ready access to the
designer—on the host PCB.
socket. User accessibility raises several
electrical issues.
• Hot-swapping can be implemented
only if the designer chooses.
• Since the socket and hence the
interface will be located near the
products cabinet, cabling may be • Inserting the wrong kind of card is
required to connect the PC Card less likely if a cover or access plate
socket to the host PCB. It will must be removed to get to the socket.
Voltage Keying
Card Detect
PC Card socket are polarized to
prevent a card from being inserted upside- These two card outputs are connected
down. They are also keyed to prevent to ground on the card. They have shorter pins
mismatch between the card’s VCC requirement in the host connector than the other signals,
and the host’s capability. There are two keys, so they make contact after all the others.
5 volt and low volt; they are illustrated in They are located at opposite ends of the
Figure 10. Besides keying, there are signals connector. When the socket sees both CD1#
from the card to tell the host what the VCC and CD2# asserted, it is safe to assume the
requirements of the PC card are. Today, most other signals are connected, and the card is
flash PC Cards support 5v operation. installed.

Voltage Sense

5v Keyed Card The two voltage sense outputs, VS1#


and VS2#, tell the socket what VCC the card
requires. They are either grounded on the
card or left open. Why have both voltage
Low volt Keyed keys and voltage sense signals? Because the
Card
multi-voltage capability was introduced in
A 5v card will fit in a Low volt socket, but 1995, and there are quite a few older
not vice versa implementations that do not look at the VS#
outputs. A card with a low volt key will not
Figure 10 fit in an older, 5v socket.

ELECTRICAL OVERVIEW Implementing a 5v-only, 5v-keyed


socket is a viable option for an embedded
It is not surprising that the PC Card design. The designer can select and qualify
interface looks like the interface of a memory only 5v cards, and the power supply need
component; it began as a memory card only support 5v.
interface. The memory access signals are
similar to memory components and will not Table 1
be discussed here. Refer to product datasheets VS1# VS2# Card VCC
for signal timings and definitions. OPEN OPEN 5v
GND OPEN 3.3 v
There are signals that are unique to
PCMCIA cards and bear mentioning. While a large majority of flash PC
Cards are 5v , and this will probably be the
CARD SENSING AND CONTROL case for a long time, if a design has an
unusually long expected life, it may be
The card control signals are usually worthwhile to implement a low volt socket
read prior to applying power to an unknown that can power a card at 3.3v or 5v. Besides
card. The amount of effort required to complicating the power supply, this decision
correctly implement card control depends on also mandates special interface logic.
how many types of cards will be supported by
the socket. If the socket supports low voltage
cards then the VS# input should be
interpreted per Table 1.
Finally, there is a third, as yet SUMMARY
undefined, voltage that is lower than 3.3v. A PC Card memory access is similar
The specifications call it “X.Xv”. VS2# is to typical microprocessor memory cycles.
used to signal a card’s compatibility with When designing the interface, there are two
X.Xv. sources for exact timing information: the
latest PC Card Standard and vendor
Write Protect datasheets. The implementation should
conform to both sets of specifications.
Some flash PC Cards have a write-
protect switch that protects the contents from INTERFACING THE SOCKET TO THE
inadvertent modification. The WP signal is HOST BUS
an output of the card and reflects the state of
this switch. Note that the system software The complexity of the electrical
can elect to ignore the state of the WP switch, interface to the socket will be determined by
because a PC Card may still support write the usage model
cycles to the memory.
HOT SWAPPING
Reset
If a card will be removed or inserted
The RESET input provides a means while the system is operating, then the socket
of putting the card into a known state. Some should be designed to accommodate hot
memory cards use RESET to terminate any swapping. There are three main issues with
erase or program operations in progress and this. Supplying the correct VCC to the card,
return the card to the read mode. protecting the host CPU from being disturbed
by the sudden changes to the socket, and
If a system boots directly from the PC making sure the card is properly reset.
Card memory, then the socket RESET should
be asserted along with the CPU’s reset. This If the socket has a 5v key, only 5v
guarantees that the memory array in the card cards will fit in the socket, so there is no
will be available when the CPU is accessing doubt about what will be applied to the card.
its boot code. It is also important that the Consequently, the socket can be left powered
card supports this RESET functionality. all the time, and the different lengths of
power and signal pins can be relied on to
Attribute Memory Read apply VCC before any signals are driven.
However, PC cards can have as much as 150
As was mention previously, all PC µF of capacitance between VCC and Ground,
Cards must include information (the CIS) so some means of limiting the inrush current
about the card. If the card does not use non- may be necessary. Check with the flash PC
volatile memory as part of its intended Card vendor about how much decoupling
function, then enough ROM, EPROM or flash capacitance is used on their cards; there will
must be added to store a CIS. If the card probably be less than 2 µF.
stores the CIS in attribute memory, then
special read cycles are required to access it. Implementing a low volt socket
requires that the VS# inputs must be sensed
Attribute memory read cycles are the and the correct VCC applied after the card has
same as normal reads, except the REG# been inserted.
signal is asserted along with the CE1#.
key and is compatible with cards from a
VS#s, CD#s, WP variety of vendors.

To unused PC CARD SOCKET CONTROLLERS


port pins
PC Card Interface Controllers

2 74HCT245
(PCICs) are single-chip controllers that
D0-D15 handle all of the signals in a PC Card socket.
In addition to buffering the address, data and

PC Card Socket
Host CPU Memory Bus

control signals, they also allow complete


addressing flexibility.

They are the standard interface


component in PCs because they allow the PC
3 74HCT573

A0-A24 Card's addresses, I/O or memory, to be


programmed by the driver or OS. They are a
Buffer Control

good choice for systems that will use standard


operating systems, because off-the-shelf PC
Card software assumes that the card is
connected via one of these controllers.
CE#s, OE#
A25+ WE#, REG# The most popular architecture is
PLD

RD# register-compatible with the Intel 82365SL


WR# OC
PC CARD HARDWARE ARCHITECURE
RESET
Figure 8 showed a card that buffered
Figure 11 the memory components, supported byte-
swapping, and stored the attribute memory in
a separate ROM. It conformed completely to
The RESET signal requires special
the PC Card Standard.
attention--it must be in a high-impedance
state while a card is being inserted. The PC
There are linear flash PC Cards that
Card Standard mandates that RESET be
are designed specially for embedded systems.
pulled up to VCC on the card using a 100KW
They eliminate functionality not normally
resistor. During a hot insertion, as soon as
required and as a result, reduce the cost of the
the card makes contact with VCC, the RESET
card.
input will be asserted via the resistor. Later,
when the RESET pin makes contact with the
socket, the hi-Z state of the host contact will
not interfere with the pull-up. FLASH FLASH
MEMORY MEMORY
INTERFACE EXAMPLE COMPONENT COMPONENT

Figure 11 shows one implementation


of a PC Card interface. Both the Data and
PC CARD CONNECTOR
Address signals are buffered, and the Control
signals are generated using a Programmable
Logic Device (PLD). The socket has a 5v Figure 12
Figure 12 shows the block diagram of PC CARD SOFTWARE ARCHITECTURE
such a card. Notice that both the interface
logic and attribute memory have been The CIS contains information about a
eliminated; this card does not implement PC Card using structures called tuples.
byte-swapping, and it stores the CIS in the Figure 13 shows the general format for a
flash components. All of the functionality of tuple. The size varies with the type of tuple
the card is implemented in the flash and the complexity of the card.
components. These simplifications lower the The type of information stored is the
cost of the card, especially low density ones. card’s VCC requirements, access time,
density, manufacturer name and JEDEC ID.
The CIS is stored in the lowest block If an embedded system will support more
at the bottom of the address space. The than one card, the software has the option to
system designer has the option of preserving read the tuples on a card to find out which
the CIS or erasing it and freeing up additional card has been inserted in the socket.
memory. Since the CIS occupies a small
fraction of a block, considerable memory can Another option is for the system to
be freed up if the CIS is discarded. However, read the JEDEC identifiers of the components
a PC card without a CIS may not be on the card. The biggest benefit of this
recognized in standard systems. Therefore, it approach is that there are fewer flash
is a good idea to preserve the CIS. component manufacturers than there are card
manufacturers. The CIS will be different for
The cost savings of these cards will each vendor’s card, so the system software
become more pronounced as memory will be more likely to change when a new
densities increase. As the memory cost card is qualified.
declines, the cost of interface components and
attribute ROM will be a more significant part Relying on component identifiers
of the cost of the card. means that if two cards use the same flash
components, then the same host software will
work with either card—even if the cards were
made by different vendors.
TUPLE IDENTIFIER The first byte is the
tuple name. It
identifies the type SOFTWARE OVERVIEW
of data stored in
the tuple. There are a number of choices for PC
Card software. They can be divided into two
LINK BYTE The second byte is categories: special and general purpose
the length. It tells
the system how
many byte to skip SPECIAL PURPOSE
to get to the next
tuple. Since the flash memory on a linear
flash PC Card interfaces directly to the
BODY The rest of the embedded system, the system can write
tuple is the data.
anything it wants to the card in any format.
Will this data be useable by a general purpose
system like a personal computer? The answer
Figure 13 depends on what card and what general
purpose system.
Several flash PC Card vendors offer beyond the scope of this document (see
utilities that read and write to their cards Beatty, Kipisz and Moore).
using general purpose systems. One example
is Intel. They offer a utility call FLSH2F However, it is possible to write data to a card
that transfers binary files between a disk and in an embedded system in such a way as to be
an Intel PC Card on any standard x86 PC with readable by any application in a general
a PC Card socket. It bypasses the PC Card purpose PC Card socket. This approach
software stack and operates directly on the writes the data using the standard format for
card. It does not require a CIS but flash PC Card, the Flash Translation Layer
interrogates the memory components on the (FTL) See AP-619 "FTL Logger -
card to determine the cards size and Exchanging Data with FTL Systems" at
architecture. www.intel.com/design/flcard/applnots/, and "
Understanding the Flash Translation Layer
The reverse is performed by F2FLSH. It (FTL) Specification" at
transfers a binary file on a x86 PC to a PC www.intel.com/design/flcard/technote/
Card and is especially useful for
programming executable code on the card. CONCLUSION

An embedded system can write data to the Flash memory, both in card and
card in a way that is convenient for it. The component form, add flexibility to the
flash-to-File utility will transfer the contents manufacturing process and benefits to the end
of the card verbatim to a file on disk. A user. All with adding little or no cost.
special application on the PC that uses the
data can read it off the disk.

This solution is not general purpose for two


reasons: the embedded system will only work
with a few linear flash PC Cards, and once
written, the flash PC Card is only readable by
special applications on certain systems.
These restrictions may not present a problem
for embedded systems, but some systems
require a more general purpose
implementation.

GENERAL PURPOSE

There are a couple of ways an implementation


can be general purpose: it can work with any
PC Card that adheres to the PC Card
Standard, or if it only works with certain flash
PC Card, it can write the data in such a way
as to be useable by any application on a PC.

The PC Card socket on a notebook PC is an


example of the former; it works with any PC
Card that complies with the PC Card
standard. A discussion of this architecture is
REFERENCES AND RESOURCES
The PCMCIA Software Developer's Handbook, Beatty, Dana Steven Kipisz and Brian Moore
available from PCMCIA

The PCMCIA Developer's Guide Second Edition, Mori, Michael and W. Welder
available from PCMCIA

The PC Card Standard, PCMCIA, 2635 N. First St., Suit 209, San Jose, CA 95134 (408) 433 2273

SOFTWARE

F2FLSH AND FLSH2F, File to PC Card transfer utility for PC Cards that use Intel components
http://cove.intel.com/template/design/tpvtool/list.cfm?architecture=7

EMBED, File to PC Card transfer utility for PC Cards that use Advanced Micro Devices* components
http://www.amd.com/products/nvd/tools/embed.html

* Third-party marks and brands are the property of their respective owners

Вам также может понравиться