CY4611B – FX2LP USB to ATA/CF Reference Design Notes
Introduction
Cypress has two USB 2.0 High Speed Mass Storage
solutions. The AT2LP is a low-power fixed-function
Mass Storage solution for ATA devices. The
CY4611B is a flexible bridge solution that enables
additional features to be added to a USB 2.0 bridge
device. The Cypress EZ-USB FX2LP Mass Storage
reference design connects the EZ-USB FX2LP to
the following device types:
• IDE devices 3.5”, 2.5” Hard disk drives
• Compact Flash & micro drives
• ATAPI devices
ZIP drives
CD-ROM/R/RW drives
DVD-ROM/RAM/RW drives
Reference Design Contents
•FX2LP Mass Storage Reference Design
PCBA
•Reference Design Schematic in both PDF
and OrCAD source files
• Reference Design BOM
• Firmware source and object code
• Reference Design Notes (this document)
• UDMA White Paper
• Driver INF and .SYS files
• Operating Instructions
• Manufacturing tools
• Release Notes
• Errata
Background Information
You should be familiar with the USB Mass Storage
Class specification and general operation of
Cypress’ EZ-USB FX2LP to get the most from this
document. For more information please refer to
these specifications or Cypress’s EZ-USB FX2LP
Technical Reference Manual.
Mass Storage Class Specification
The USB Mass Storage Class specification contains
two subclasses, the CBI (Command, Bulk, Interrupt),
and the newer Bulk Only Transport. This reference
design complies with the Bulk Only subclass of the
USB Mass Storage Specification. The Bulk Only
subclass is supported by the Windows XP, 2000 and
ME drivers as well as MacOS 9 and X. Cypress
provides custom drivers for Windows and Macintosh
operating systems to add support for security and
SMART monitoring. The latest driver versions are
available on the Cypress website.
Firmware Overview
Note: CBW, CSW, dataTransferLength, and
“Persistent Stall” are defined in the “USB Mass
Storage Class, Bulk Only Transport” document
referenced below.
The firmware for the device is a straightforward
implementation of a USB Bulk Only Mass Storage
Device. After reset, it waits for a CBW packet,
checks it and then executes the data phase of the
command (if any). Once the data phase is
complete, the firmware sends a CSW packet to the
host. SETUP commands are handled in an ISR. A
timer ISR is used to poll VBUS and GPIOs. The
only commands that the firmware generates on its
own are SCSI Identify Device (to get the device
name) and ATA Identify Device (to get the device
serial number).
The CY4611B firmware supports both high speed
(480Mbps) and full speed (12Mbps) hosts.
Firmware Details
Refer to the flowchart on the following page for more
details.
There are three main sections in the firmware:
• Initialization
• Command (CBW) processing
• ISRs
The initialization code sets up the hardware, reads
the EEPROM configuration and detects the attached
drives. Initialization routines include
resetATAPIDevice, ATAInit, initUSB, TD_Init,
detectSCSIvsATA, and ATAPIIdDevice. When the
initialization code is complete, the hardware is set
up, drives are fully enumerated, GPIF is loaded and
the firmware is ready to accept CBW commands.
The CBW processing takes place in the TD_Poll()
loop. This loop also polls the sleep flag to determine
Cypress Semiconductor Corporation • 3901 North First Street • San Jose • CA 95134 • 408-943-2600
7/11/05
EZ-USB FX2LP USB to ATA Reference Design Notes
if it is time for USB suspend. The final function of
the main loop is to poll for new removable (CF)
devices.
The ISRs have two main functions. They handle
SETUP command processing and background
polling for events like VBUS removal, GPIO changes
and ATA_ENABLE changes.
Main()
This routine calls the TD_Init and ATAInit routines
and then starts the master while(1) loop. The
while(1) loop polls the sleep flag and calls TD_Poll,
the main command processing routine.
ATAInit()
On a hard reset, TD_init() is called, which initializes
the hardware using initUSB(). The
resetATAPIDevice() routine is called to reset the
drive. After the drive has been reset the drive
discovery algorithm, detectSCSIvsATA(), is called
once for the master device and again for the slave
device.
Hardware
Reset of FX2
Initialize Hardware
[TD_Init, initUSB]
Initalize ATA Device
Detect ATAPI vs IDE
[resetATAPIDevice]
Wait for CBW
[TD_Poll()]
(USB Reset) or
(ATA_ENABLE -> disable)
in any state
Send CSW
[sendUSBS()]
detectSCSIvsATA()
The detectSCSIvsATA routine determines whether
the attached device is IDE or ATAPI by reading the
byte count registers. The scsi flag is set to 1 to
indicate an ATAPI device, scsi is set to 0 on an IDE
device. This routine sets the bDevicePresent flag
when a drive is successfully detected.
ATAPIIdDevice()
This routine is called to collect information from the
drive into internal data structures. This information
includes the max PIO or UDMA speed supported
and the serial number of the drive. If the device
supports PIO-3, PIO-4 or UDMA, this routine will
program the drive to run at the new speed.
LUN changed?
No
SCSI device?
[processCBW]
No
Translate ATAPI to IDE
command
generalIDEInCommand
generalIDEOutCommand
Send command to
device
[ideReadCommand
ideWriteCommand]
Yes
Change GPIF
Yes
Send command to
[sendSCSICommand]
TransferLen >
Transfer data via
PIO or UDMA
[Read/WritePIO16
Read/WriteUDMA()]
waveform s
device
data
0
Yes
No
Figure 1: Overall program flow
2
EZ-USB FX2LP USB to ATA Reference Design Notes
TD_Poll()
As in all Cypress Frameworks based code, the main
code loop is called TD_Poll(). This routine is called
repeatedly until it detects a packet in the OUT buffer.
TD_poll() checks the received packet for a valid
CBW signature. If one is found, it calls
processCBW(). If the packet is not a valid CBW, the
device enters a “persistent stall” condition awaiting a
device reset. ProcessCBW() checks to see if the
LUN has changed from the previous command. If
so, it reloads the GPIF with the proper waveforms
for the new LUN. It then calls
generalIDEInCommand() or
generalIDEOutCommand() depending on the
direction flag in the CBW. If the dataTransferLength
is non-zero, the readPIO16() or writePIO16()
routines are called to pass data directly from the
USB buffers to the drive using the GPIF.
SETUP messages are handled in an ISR, so they
may be received and responded to at any time. The
entire SETUP message will be handled within the
ISR, therefore long SETUP traffic will adversely
affect disk performance. This is not expected to be
an issue since Windows does not use SETUP
Filename Purpose
Dscr.a51 Descriptor table containing product/vendor ID, endpoint descriptions and other
information reported to the host on startup.
memcmp.a51 Fast memory compare routine
reset.a51 Assembly routine used to branch to 0 on USB reset.
Startup.a51 Modified Keil startup file that does not initialize any variables.
USBjmptbl.a51 USB interrupt vector table and other fixed-address blocks including space
allocation for EEPROM loader.
Atacb.c Processes ATACB (ATA Command Block) requests. The optional ATACB facility
allows IDE commands to be embedded within CBWs. This enables ANY
command to be sent to the device. This facility is used to allow access to security
features and SMART commands that do not have analogous SCSI commands.
atareset.c Contains hard reset routine, selection of IDE vs ATAPI protocol. Identifies device
characteristics, including serial number, capacity and transfer rate. Selects
transfer rate by loading new GPIF waveforms. Contains timer ISR that checks
VBUS and ATA_ENABLE.
fw.c Frameworks based main routine. This fw.c has major differences from the fw.c
released with the dev kit, since several implementation-specific functions have
been merged with the general startup code in this file.
gpif.c EZ-USB FX2LP low level i/o routines. Waveform descriptors. Routines for
loading the GPIF memory with the waveform descriptors.
Globals.c, Globals2.c Global variable definitions. The globals are split into two files to help the linker.
The linker will place all of the variables in a .c file in a single block. Splitting the
globals into two files allows some variables to be placed below the bit-
addressable memory (at 0x20) and some to be placed above the bit-addressable
memory.
packets after enumeration except to clear STALL
conditions.
These data transfer routines activate the GPIF to
move data to/from the FIFO memory to/from the
ATA bus. The data is read from the drive to the EP6
buffer. Write data moves from the host through the
EP2 buffer.
Resets
The firmware performs a hard reset of the drive on a
hard reset (power on). The firmware performs a soft
reset of the 8051 and drives on a USB Reset or
Mass Storage Class Reset.
File Descriptions
The FX2LP firmware is stored in its own directory.
All of the FX2LP firmware is contained in the FX2LP
source directory on the CD.
The purpose of the files in the source directory is
shown in the following table:
3
EZ-USB FX2LP USB to ATA Reference Design Notes
Filename Purpose
ide.c Translates SCSI (ATAPI) commands sent by the host driver into IDE commands.
Calls low-level transfer routines in gpif.c.
periph.c TD_Init and TD_Poll(), misc init routines, misc util routines including our smaller
version of memmove.
scsi.c High level data transfer routines for ATAPI devices. (Named SCSI.c because
ATAPI devices use the SCSI command set.) Calls low-level transfer routines in
gpif.c.
Globals.h Global variable references
atapi.h Header file containing application specific items.
gpif.h Header file containing hardware specific items.
scsi.h SCSI command set
CY4611B.Opt Options for UV2 project
CY4611B.hex Output file from the linker. Combine.bat is used to merge this file with a
configuration file like AT2_Legacy_pinout.iic to produce a full image like
CY4611B_AT2_pinout.iic.
CY4611B.Uv2 UV2 project file
AT2_Legacy_pinout.iic ~200 byte configuration file produced by blaster.exe
cy4611b_AT2_PINOUT.iic ~16K EEPROM binary image
0000
EEPROM configuration area
Many of the commonly changed items in the
CY4611B configuration have been moved to a
dedicated EEPROM configuration area. Locating
these items in a dedicated area allows customization
of many firmware attributes like Vendor ID and
Product ID without compiling the firmware.
The format of this EEPROM configuration area is
copied from the AT2LP and AT2. If the EEPROM
configuration starts with 0x4d4d, the 56-pin package
pinout will match the AT2 pinout. If the EEPROM
configuration bytes 0 and 1 are 0x534b then the 56pin pinout will match AT2LP. See the end of this
document for a full description of the EEPROM
config space format. A configuration tool is provided
to assist you in creating and downloading your
configuration file. This configuration utility
(blaster.exe) can be found in the “manufacturing
tools” directory on your CD. Blaster.exe can
program or modify the EEPROM configuration on
your CY4611B board.
The area allocated to EEPROM can be changed by
modifying the value of CONFIG_SPACE_START in
atapi.h and changing the –x argument passed to
hex2bix. If your application needs more than 0x100
bytes of EEPROM configuration, several areas of
the code will have to change. One area is
sendDescriptor, which uses a BYTE offset within the
EEPROM config space.
0x3eff
0x3f00
0x3fff
Figure 2: EEPROM memory map
The EEPROM settings can be programmed in two
ways, interactively via blaster.exe or by creating a
file. To program the EEPROM interactively, insert
the “MFG mode” jumper and cycle power on your
board. The board will bind to the manufacturing
driver. You can then use the “write to device” button
in blaster.exe to program your EEPROM.
Available for user code
CY4611.hex
EEPROM configuration
AT2LP_pinout.iic
4
EZ-USB FX2LP USB to ATA Reference Design Notes
Figure 3: MFG Mode jumper location
The default build script will automatically build a
unified image by combining cy4611b.hex with either
AT2_legacy_pinout.iic or AT2LP_pinout.iic to
produce CY4611B_AT2_PINOUT.iic or
CY4611B_AT2LP_PINOUT.iic.
The configuration section of the EEPROM can also
be modified without using the Keil tools. This
enables you to modify some settings (like the
Vendor ID and device name) without buying the Keil
tools. Just use the combine.bat file on the CD to
invoke hex2bix.exe.
cy4611b.hex
Output from Keil linker
hex2bix.exe
@0
CY4611B_AT2LP_PINOUT.iic
Binary file loaded to EEPROM
~16K bytes
AT2LP_PINOUT.iic
Saved from Blaster.exe
~200 bytes
hex2bix.exe
@0x3f00
Figure 4: Output files
Compile Time Configuration Settings
The most common configuration settings are
contained in the EEPROM configuration space
described above. However, command line options
and #defines control some of the compile time
settings used by the code. The major ones are
explained in the section below. To change some of
these settings, right-click on the project name in
uVision2 and select “options for target”, then select
the C51 tab.
Atapi.h contains additional #defines that can be
used to further customize the behavior of the
firmware. These can be found in a section of atapi.h
labeled “Configuration Settings”.
If you have one target platform, you will want to do
your customization in atapi.h. Creating defines in
the “options for target” tab allows you to create
multiple targets with different #defines. This is
useful if you have multiple targets (like debug vs
production).
DEVICE_TYPE_IS_SCSI
Setting this flag to 0 will remove most of the ATAPI
code from the EEPROM image. The resulting image
will only work with hard drive type devices. Set this
option to 0 to reduce code size.
Default Setting: 1
DEVICE_TYPE_IS_IDE
Setting this flag to 0 will remove most of the hard
drive / CF code from the EEPROM image. The
resulting image will only work with ATAPI devices.
Set this option to 0 to reduce code size.
Default Setting: 1
REVC_4611_BOARD
The first 4611 board with compactFlash support
changes several settings to make room for
compactFlash. These changes include moving the
interrupt input pin from PA0 to wakeup, and
multiplexing the VBUS sense with ATA_RESET.
This pinout is not recommended for new designs.
Default Setting: 0
Serial numbers
The USB Mass Storage specification requires that
each device have a unique serial number. Cypress
provides manufacturing tools to program your device
with a VID/PID and unique serial number. See the
5
EZ-USB FX2LP USB to ATA Reference Design Notes
“manufacturing tools” directory on the CD for more
information.
Some customers want to read the serial number
from the ATA or ATAPI device rather than from the
EEPROM. The following flags enable this function
in the firmware:
USE_ATA_DEVICE_SERIAL_NUMBER
For ATA devices, determines if the firmware uses
the serial number reported by the device as the USB
serial number. If TRUE, firmware uses the serial
number reported by the device in response to the
IDENTIFY_DEVICE command. If FALSE, the
firmware sets the USB serial number index to 0 (i.e.
no serial number string is reported in the device
descriptor).
Default Setting: FALSE
USE_ATAPI_DEVICE_SERIAL_NUMBER
For ATAPI devices, determines if the firmware uses
the serial number reported by the device as the USB
serial number. If TRUE, firmware uses the serial
number reported by the device in response to
IDENTIFY_DEVICE command. If FALSE, the
firmware sets the USB serial number index to 0 (i.e.
no serial number string is reported in the device
descriptor). Many ATAPI devices do not report a
unique serial number. It is better to report no serial
number than to report a non-unique serial number.
Default Setting: FALSE
NIBBLE_CONVERT_SERIAL_NUMBER
Determines if the firmware converts each nibble of
the serial number reported by the device into a
single character of the USB serial number. The
Bulk-only mass storage class spec only allows HEX
characters (0-9 and A-F) in the device serial
number. Some devices report other ASCII
characters. Converting each nibble into HEX
assures spec compliance while maintaining the
uniqueness of the serial number.
Default Setting: FALSE
Build Targets
There are two build targets for the CY4611B. They
use exactly the same options for everything except
one item. The CY4611B_AT2LP_PINOUT target
includes the AT2LP_PINOUT.iic when it calls
hex2bix.exe while the
CY4611B_AT2_LEGACY_PINOUT Includes the
AT2_LEGACY_PINOUT.iic configuration file.
6
EZ-USB FX2LP USB to ATA Reference Design Notes
Building the Software
Since the software is distributed on a CD, many
operating systems will set the read-only flag when
copying the data to your local directory. This flag
must be turned off before uVision2 will properly build
the .hex file. To do this, use “attrib –r *.*” at the
DOS command line or select all of the files in
Explorer, select “properties” and turn off the “readonly” checkbox in the “general” tab.
Once the files are no longer read-only, start the full
uVision2 or uVision3 environment (available
separately from www.keil.com
all” button. This will generate an image that can be
loaded with the control panel or the debugger. See
below for more information on debugging.
The firmware in this Reference Design has only
been tested with the release of the 3684 Dev Kit
contained on the release CD. Please install the
current Dev Kit before building.
The hex2bix.exe file in the software directory is
newer than the version in the CY3684 install.
Please use the version in the software directory.
You may have to delete the ezusb.lib file from your
project and add it again to get the correct path in the
Keil tools. The ezusb.lib file is installed at
c:\cypress\usb\target\lib by default.
Note: This Reference Design is too large to
compile with the 4K-demo version of the Keil
tools that is shipped with Cypress’ development
kits.
Warnings
When the firmware is linked, it will generate three
warnings. These warnings are expected. The linker
may have to run several iterations to optimize the
code and may generate this list two or three times
(and report six or nine warnings).
EZUSB_Delay is called from the timer0 ISR and
from the background code. This is not an issue
because any calls to the EZUSB_Delay function in
the ISR are followed by a soft reset.
The EEPROM read and write routines are only used
by the ISR during manufacturing and debugging
) and click the “build
operations. The background code is not active
during these operations.
*** WARNING L15: MULTIPLE CALL TO
FUNCTION
NAME: _EZUSB_DELAY/DELAY
CALLER1: ?C_C51STARTUP
CALLER2: ISRTIMER0/ATARESET
*** WARNING L15: MULTIPLE CALL TO
FUNCTION
NAME: _EEPROMWRITEBLOCK/EEPROM
CALLER1: ?C_C51STARTUP
CALLER2: ISR_SUDAV/PERIPH
*** WARNING L15: MULTIPLE CALL TO
FUNCTION
NAME: _EEPROMREAD/EEPROM
CALLER1: ?C_C51STARTUP
CALLER2: ISR_SUDAV/PERIPH
Using a CY3681 or CY3684 Board
The CY4611B software will run with the Keil
debugger on the FX2LP development board
(CY3684). This is a useful environment for
debugging startup issues by single stepping the
firmware. Note that the following changes to the
3684 board will be necessary:
1. Short solder points SP1, SP2 and SP3 to enable
ATA pullups.
2. Remove JP2 to remove VBUS power to the
board.
3. Connect VBUS (JP2 pin 2) to PA6 (P2 pin 13).
Put a 10K pulldown on this signal. This gives the
CPU the ability to sense VBUS.
4. Provide external 5v/ground to the board (JP2 pin
1 is a good 5v input). It will be very easy to use
the board if you solder a disk drive connector to
these pins.
5. Cut the Key pin (pin 20) on the ATA connector
(P8)
6. Add a 10K pulldown on DD7 (pin 3 on the 40-pin
connector).
7. Use the AT2_LEGACY configuration file.
Debugging without the Mass Storage Driver
Debugging specific commands requires a different
approach because the Mass Storage driver will
timeout while you are single stepping and may lock
up or reboot the host machine. The CY4611B
firmware can be bound to the Cyusb generic driver
by following these steps:
7
EZ-USB FX2LP USB to ATA Reference Design Notes
1) Unplug the EEPROM jumper (J22)
2) Turn on power to your board. The board will
enumerate and bind to the generic driver
(CYUSB.sys).
3) Plug the EEPROM jumper back in so your code
can access the config data in the EEPROM.
4) Open cyconsole and select options/EZ-USB
interface
5) Hit the “Load Mon” button
6) Start the Keil debugger and download your
firmware via the Keil debugger
Once the firmware is bound to the generic driver,
commands can be sent to the device using the
control panel. An easy way to do this is to construct
a file containing the command and use the FileTrans
button to send it.
1) Start the Keil debugger; download your firmware
2) Run the firmware, it will enumerate and bind to
the general purpose driver
3) Start the control panel.
4) Do a “get pipes” on the control panel. This will
fill in the pipe fields.
5) Select the OUT pipe and hit the FileTrans
button.
6) Select your command file.
7) Manually transfer the IN or OUT data required
by the command
8) Do a final IN to collect the CSW.
Difference between ATAPI and IDE
devices
Although both ATAPI and IDE devices attach to the
same 40 pin cable, they operate using different
protocols, much like TCP/IP and NetBEUI share the
same Ethernet wire, but cannot talk to each other.
ATAPI commands are basically SCSI commands
sent over an ATA interface.
This firmware will support both ATAPI and IDE task
file commands. It will detect the type of device after
reset. If the device is an IDE device, the ATAPI
commands received over USB will be translated into
IDE task file commands. One way to gain additional
code space is to eliminate one of the supported
protocols.
ATACB – ATA Command Block
The ATA Command Block (ATACB) feature enables
the host to directly access the ATA register file on
the device. This allows the host to send IDE
commands that don’t have direct SCSI translations.
It also provides a powerful debug capability.
ATACB commands are transferred in the Command
Block Wrapper Command Block (CBWCB) portion of
the Command Block Wrapper (CBW) as shown
below:
bit
Byte
0-3
4-7
8-11
12
13
14
15
16
17
18
19
20-27
28-30
The ATACB is distinguished from other command
blocks by having the first two bytes of the command
block match the bVSCBSignature and
bVSCBSubCommand values that are defined in the
configuration area of the EEPROM. Only command
blocks that have a valid bVSCBSignature and
bVSCBSubCommand are interpreted as ATA
Command Blocks. All other fields of the CBW and
restrictions on the CBWCB remain as defined in the
USB Mass Storage Class Bulk-Only Transport
Specification. The ATACB must be 16 bytes in
length. The following table and text defines the fields
of the ATACB.
7 6 5 4 3 2 1 0
dCBWSignature
dCBWTag
dCBWDataTransferLength
bmCBWFlags
Reserved (0)
Reserved
(0)
bVSCBSignature
bVSCBSubCommand
bmATACBActionSelect
bmATACBRegisterSelect
bATACBTransferBlockCount
bATACBTaskFileWriteData
Reserved
bCBWLUN
bCBWCBLength
8
EZ-USB FX2LP USB to ATA Reference Design Notes
Windows Boot Support
The current level of boot functionality will allow you
to boot to DOS or Win9x Safe Mode from a Hard
Drive or CDROM. You cannot currently boot to
Windows due to issues with the way Windows
attempts to access a boot drive directly. Boot
functionality has been tested with both Phoenix and
AMI BIOS.
48 bit LBA Addressing
The ATA-6 spec contains support for large drives
with 48-bit Logical Block Addresses (LBAs). This
reference design supports the 48-bit addressing
method. However, the SCSI commands passed by
the Mass Storage Class Specification only support
32-bit LBAs, which limits support to 2^41 (2Tera)
bytes on a 512-byte sectored device.
How this design uses GPIF
The FX2LP design takes advantage of its internal
GPIF (General Programmable InterFace) to move
data from the endpoint buffers to the mass storage
device. For more details on the EZ-USB FX2LP and
GPIF, see the EZ-USB FX2LP Technical Reference
Manual and the UDMA white paper on this CD.
This design contains several GPIF waveforms:
• PIO-0
• PIO-3
• PIO-4
• Multi-word DMA
• UDMA/33
• UDMA/66
The firmware selects one of these waveforms based
on the information returned by the device from the
IDENTIFY DEVICE command. If there are two
devices with different capabilities attached to the
FX2LP, the firmware will reload the GPIF waveforms
when the host addresses a different LUN.
References
USB Mass Storage Class – Bulk Only Transport,
USB Mass Storage DWG. (www.usb.org)
USB Mass Storage Class – Overview Specification,
USB Mass Storage DWG. (www.usb.org)
USB Specification – Revision 2.0, USB
Implementers Forum. (www.usb.org)
EZ-USB FX2LP Technical Reference Manual,
Revision 2.1, Cypress (www.cypress.com)
ATA/ATAPI-6 Specification, Proposed ANSI
Standard (www.t13.org).
SCSI-3 Specification (www.t10.org)
ATACB format
Byte Field Name Field Description
0 bVSCBSignature This field indicates to the CY7C68300B/CY7C68301B that the ATACB contains
a vendor-specific command block. This value of this field must match the value
in Config space offset 0x04 for this vendor-specific command to be recognized.
1 bVSCBSubCommand This field must be set to 0x24 for ATACB commands.
2 bmATACBActionSelect This field controls the execution of the ATACB according to the bitfield values:
Bit 7 IdentifyPacketDevice This bit indicates that the data phase of the
command will contain ATAPI (0xA1) or ATA (0xEC) IDENTIFY device data.
Setting IdentifyPacketDevice when the data phase does not contain IDENTIFY
device data will result in unspecified device behavior.
0 = Data phase does not contain IDENTIFY device data
1 = Data phase contains ATAPI or ATA IDENTIFY device data
Bit 6 UDMACommand This bit enables supported UDMA device transfers.
Setting this bit when a non-UDMA capable device is attached will result in
undetermined behavior.
0 = Do not use UDMA device transfers (only use PIO mode)
1 = Use UDMA device transfers
Bit 5 DEVOverride This bit determines whether the DEV bit value is taken from
the value assigned to the LUN during start-up or from the ATACB.
0 = The DEV bit will be taken from the value assigned to the LUN during start-up
1 = The DEV bit will be taken from the ATACB field 0x0B, bit 4
9
EZ-USB FX2LP USB to ATA Reference Design Notes
Bit 4 DErrorOverride This bit controls the device error override feature. This bit
should not be set during a bmATACBActionSelect TaskFileRead.
0 = Data accesses are halted if a device error is detected
1 = Data accesses are not halted if a device error is detected
Bit 3 PErrorOverride This bit controls the phase error override feature. This bit
should not be set during a bmATACBActionSelect TaskFileRead.
0 = Data accesses are halted if a phase error is detected
1 = Data accesses are not halted if a phase error is detected
Bit 2 PollAltStatOverride This bit determines whether or not the Alternate Status
register will be polled and the BSY bit will be used to qualify the ATACB
operation.
0 = The AltStat register will be polled until BSY=0 before proceeding with the
ATACB operation
1 = The ATACB operation will be executed without polling the AltStat register.
Bit 1 DeviceSelectionOverride This bit determines when the device selection will
be performed in relation to the command register write accesses.
0 = Device selection will be performed prior to command register write accesses
1 = Device selection will be performed following command register write
accesses
Bit 0 TaskFileRead This bit determines whether or not the taskfile register data
selected in bmATACBRegisterSelect is returned. If this bit is set, the
dCBWDataTransferLength field must be set to 8.
0 = Execute ATACB command and data transfer (if any)
1 = Only read taskfile registers selected in bmATACBRegisterSelect and return
0x00h for all others. The format of the 12 bytes of returned data is as follows:
• Address offset 0x00 (0x3F6) Alternate Status
• Address offset 0x01 (0x1F1) Features / Error
• Address offset 0x02 (0x1F2) Sector Count
• Address offset 0x03 (0x1F3) Sector Number
• Address offset 0x04 (0x1F4) Cylinder Low
• Address offset 0x05 (0x1F5) Cylinder High
• Address offset 0x06 (0x1F6) Device / Head
• Address offset 0x07 (0x1F7) Command / Status
3 bmATACBRegisterSelect This field controls which of the taskfile register read or write accesses occur.
Taskfile read data will always be 8 bytes in length, and unselected register data
will be returned as 0x00. Register accesses occur in sequential order as outlined
below (0 to 7).
Bit 0 (0x3F6) Device Control / Alternate Status
Bit 1 (0x1F1) Features / Error
Bit 2 (0x1F2) Sector Count
Bit 3 (0x1F3) Sector Number
Bit 4 (0x1F4) Cylinder Low
Bit 5 (0x1F5) Cylinder High
Bit 6 (0x1F6) Device / Head
Bit 7 (0x1F7) Command / Status
4 bATACBTransferBlockCount This value indicates the maximum requested block size in 512-byte incre ments.
This value must be set to the last value used for the “Sectors per block” in the
SET_MULTIPLE_MODE command. Legal values are 0, 1, 2, 4, 8, 16, 32, 64,
and 128 where 0 indicates 256 sectors per block. A command failed status will
be returned if an illegal value is used in the ATACB.
10
EZ-USB FX2LP USB to ATA Reference Design Notes
5-12 bATACBTaskFileWriteData These bytes contain ATA register data used with ATA command or PIO write
operations. Only registers selected in bmATACBRegisterSelect are required to
hold valid data when accessed. The registers are as follows.
13-15 Reserved These bytes must be set to 0x00 for ATACB commands.
ATACB Address Offset 0x05 (0x3F6) Device Control
ATACB Address Offset 0x06 (0x1F1) Features
ATACB Address Offset 0x07 (0x1F2) Sector Count
ATACB Address Offset 0x08 (0x1F3) Sector Number
ATACB Address Offset 0x09 (0x1F4) Cylinder Low
ATACB Address Offset 0x0A (0x1F5) Cylinder High
ATACB Address Offset 0x0B (0x1F6) Device
ATACB Address Offset 0x0C (0x1F7) Command
EEPROM configuration format
EEPROM
Address
AT2LP Configuration
0x00 I2C EEPROM signature byte 0 I2C EEPROM signature byte 0. This byte must be 0x53.
0x01 I2C EEPROM signature byte 1 I2C EEPROM signature byte 1. This byte must be 0x4B 0x4B
0x02 APM Value ATA Device Automatic Power Management Value. If an
0x03 Unused 0x80
0x04 bVSCBSignature Value Value in the first byte of the CBW CB field that
0x05 Reserved Bits (7:6) 0x07
Enable mode page 8 Bit (5)
Disable wait for INTRQ Bit (4)
BUSY Bit Delay Bit (3)
Field Name Field Description Required
Contents
0x53
For CY7C68300A compatibility mode, these bytes
should be set to 0x4D4D.
0x00
attached ATA device supports APM and this field
contains other than 0x00, the AT2LP will issue a
SET_FEATURES command to Enable APM with this
value during the drive initialization process. Setting APM
Value to 0x00 disables this functionality. This value is
ignored with ATAPI devices.
0x24
designates that the CB is to be decoded as vendor
specific ATA commands instead of the ATAPI command
block. See section 7 for more detail on how this byte is
used.
Set to 1 to enable the write caching mode page (page
8). If this page is enabled, Windows will disable write
caching by default which will limit write performance.
Set to 1 to poll status register rather than waiting for
INTRQ. Setting this bit to 1 will improve USB BOT test
results but may introduce compatibility problems with
some devices.
Enables a delay of up to 120 ms at each read of the
DRQ bit where the device data length does not match
the host data length. This allows the
Suggested
Contents
11
CY7C68300B/CY7C68301B to work with most devices
that incorrectly clear the BUSY bit before a valid status
is present.
0x06 ATA UDMA Enable Bit (7)
0x07 Reserved
Short Packet Before Stall Bit (2)
Determines if a short packet is sent prior to the STALL
of an IN endpoint. The USB Mass Storage Class Bulk-Only Speci fication allows a device to send a short or
zero-length IN packet prior to returning a STALL
handshake for certain cases. Certain host controller
drivers may require a short packet prior to STALL.
1 = Force a short packet before STALL.
0 = Don’t force a short packet before STALL.
SRST Enable Bit (1)
Determines if the firmware is to do an SRST reset
during drive initialization. At least one reset must be
enabled. Do not set SRST to 0 and Skip Pin Reset to 1
at the same time.
1 = Perform SRST during initialization.
0 = Don’t perform SRST during initialization.
Skip Pin Reset Bit (0)
Skip ARESET# assertion. When this bit is set, the
firmware will bypass ARESET# during any initialization
other than power up. Do not set SRST to 0 and Skip Pin
Reset to 1 at the same time.
0 = Allow ARESET# assertion for all resets.
1 = Disable ARESET# assertion except for power-on
reset cycles.
Enable Ultra DMA data transfer support for ATAPI
devices. If enabled, and if the ATAPI device reports
UDMA support for the indicated modes, the firmware
will utilize UDMA data transfers at the highest
negotiated rate possible.
0 = Disable ATA device UDMA support.
1 = Enable ATA device UDMA support.
ATAPI UDMA Enable Bit (6)
Enable Ultra DMA data transfer support for ATAPI
devices. If enabled, and if the ATAPI device reports
UDMA support for the indicated modes, the
FIRMWARE will utilize UDMA data transfers at the
highest negotiated rate possible.
0 = Disable ATAPI device UDMA support.
1 = Enable ATAPI device UDMA support.
UDMA Modes Bit (5:0)
These bits select which UDMA modes, if supported, are
enabled. Setting to 1 enables. Multiple bits may be set.
The FIRMWARE will operate in the highest enabled
UDMA mode supported by the device. The FIRMWARE
supports UDMA modes 2, 3, and 4 only.
Bit Descriptions
5 Reserved. Must be set to 0.
4 Enable UDMA mode 4.
3 Reserved. Must be set to 0.
2 Enable UDMA mode 2.
1 Reserved. Must be set to 0.
0 Reserved. Must be set to 0.
Bits(7:3)
Must be set to 0.
EZ-USB FX2LP USB to ATA Reference Design Notes
0xD4
0x07
12
EZ-USB FX2LP USB to ATA Reference Design Notes
Multiword DMA mode
PIO Modes
0x08 Pin Configurations 0x78
0x09 Reserved Bits (7:6) 0x00
BUTTON_MODE Bit (7)
SEARCH_ATA_BUS Bit (6)
BIG_PACKAGE Bit (5)
ATA_EN Bit (4)
DISKRDY Polarity Bit (3)
HS Indicator Enable Bit (2)
Drive Power Valid Polarity Bit (1)
Drive Power Valid Enable Bit (0)
Bit (2)
This bit selects multi-word DMA. If this bit is set and the
drive supports it, multi-word DMA is used.
Bits(1:0)
These bits select which PIO modes, if supported, are
enabled. Setting to 1 enables. Multiple bits may be set.
The FIRMWARE will operate in the highest enabled PIO
mode supported by the device. The FIRMWARE
supports PIO modes 0, 3, and 4 only. PIO mode 0 is
always enabled by internal logic.
Bit Descriptions
1 Enable PIO mode 4.
0 Enable PIO mode 3.
Button mode. Set this bit to 1 to enable ATAPUEN,
PWR500# and DRVPWRVLD to become button inputs
returned on bits 2, 1, and 0 of EP1IN
Enables a search performed at RESET to detect nonremovable ATA and ATAPI devices. Systems with only
a removable device (like CF readers) will set this bit to
0. Systems with one removable device and one nonremovable device will set this bit to 1.
Package Select. Set this bit to 1 when using the 100-pin
device.
ATA sharing enable. Allows ATA bus sharing with other
host devices. If ATA_EN=1 the ATA interface will be
driven when VBUS_ATA_ENABLE is LOW. If
ATA_EN=0 the ATA interface will be placed into Hi-Z
state whenever VBUS_ATA_ENABLE is LOW.
‘0’ =ATA signals Hi-Z when VBUS_ATA_ENABLE is
LOW.
‘1’ = ATA signals driven when VBUS_ATA_ENABLE is
LOW.
DISKRDY active polarity.
‘0’ = Active LOW polarity.
‘1’ =Active HIGH polarity.
Enables GPIO2_nHS pin to indicate the current
operating speed of the device (if output is enabled).
‘0’ = Normal GPIO operation.
‘1’ = High-speed indicator enable.
Controls the polarity of DRVPWRVLD pin
‘0’ =Active LOW (“connector ground” indication)
‘1’ =Active HIGH (power indication from device)
Enable for the DRVPWRVLD pin. When this pin is
enabled, the FIRMWARE will enumerate a removable
IDE device (normally CompactFlash) as the master
device.
‘0’ =pin disabled (most systems)
‘1’= pin enabled (CompactFlash systems)
13
EZ-USB FX2LP USB to ATA Reference Design Notes
General Purpose IO Pin
Output Enable
0x0A Reserved
General Purpose IO Pin Data
0x0B Identify Device String Pointer
LUN0
0x0C Identify Device String Pointer
LUN1
0x0D Delay after reset Number of 20-ms ticks to wait between RESET and
0x0E Reserved Bits (7:4) 0x00
0x0F Reserved Must be set to 0x00. 0x00
Device Descriptor
0x10 bLength Length of device descriptor in bytes. 0x12
0x11 bDescriptor Type Descriptor type. 0x01
0x12 bcdUSB (LSB) USB Specification release number in BCD. 0x00
0x13 bcdUSB (MSB) 0x02
0x14 bDeviceClass Device class. 0x00
0x15 bDeviceSubClass Device subclass. 0x00
0x16 bDeviceProtocol Device protocol. 0x00
0x17 bMaxPacketSize0 USB packet size supported for default pipe. 0x40
0x18 idVendor (LSB) Your Vendor
0x19 idVendor (MSB)
0x1A idProduct (LSB) Product ID. Your
Enable CF UDMA Bit (3)
Fixed number of logical
units = 2
Fixed number of logical
units = 1
Search ATA on VBUS
removed
Must be set to zero.
Bits (5:0)
GPIO[5:0] Hi-Z control.
‘0’ = Output enabled (GPIO pin is an output).
‘1’ = Hi-Z (GPIO pin is an input).
Bits (7:6)
Must be set to zero.
Bits (5:0)
If the output enable bit is set, these bits select the value
driven on the GPIO pins.
If this value is 00, the Identify Device data will be taken
from the device. If this string is non-zero, it is used as a
pointer to a 24 byte ASCII (non-Unicode) string in the
EEPROM. This string will be used as the device
identifier. This string is used by many operating systems
as the user-visible name for the device.
attempting to access the drive.
‘1’ = Allow UDMA to be used with removable-media
devices
‘0’ = UDMA will not be used with removable-media
devices
Some CF devices will interfere with UDMA if the UDMA
lines are connected to them. This bit tells the
FIRMWARE if the UDMA lines are connected to the
removable-media device.
Bit (2)
If bits 1 and 2 are both 0, the number of logical units will
be determined by searching the ATA and CF buses for
devices.
Bit (1)
If bits 1 and 2 are both 0, the number of logical units will
be determined by searching the ATA and CF buses for
devices.
Bit (0)
Search for ATA devices when VBUS returns. If this bit is
set, the ATA bus will be searched for ATA devices every
time FIRMWARE is plugged into a computer.
Vendor ID. Cypress’s Vendor ID may only be used for
evalu ation purposes, and not in released products.
0x00
0x00
0x00
0x00
ID
14
EZ-USB FX2LP USB to ATA Reference Design Notes
Product ID
0x1B idProduct (MSB)
0x1C bcdDevice (LSB) Device release number in BCD LSB (product release
number).
0x1D bcdDevice (MSB) Device release number in BCD MSB (silicon release
number).
0x1E iManufacturer Index to manufacturer string. This entry must equal half
of the address value where the string starts or 0x00 if
the string does not exist.
0x1F iProduct Index to product string. This entry must equal half of the
address value where the string starts or 0x00 if the
string does not exist.
0x20 iSerialNumber Index to serial number string. This entry must equal half
of the address value where the string starts or 0x00 if
the string does not exist. The USB Mass Storage Class Bulk-Only Transport Specification requires a unique
serial number (in upper case, hexadecimal characters)
for each device.
0x21 bNumConfigurations Number of configurations supported. 1 for mass
storage: 2 for HID: 3 for CSM
Device Qualifier
0x22 bLength Length of device descriptor in bytes. 0x0A
0x23 bDescriptor Type Descriptor type. 0x06
0x24 bcdUSB (LSB) USB Specification release number in BCD. 0x00
0x25 bcdUSB (MSB) USB Specification release number in BCD. 0x02
0x26 bDeviceClass Device class. 0x00
0x27 bDeviceSubClass Device subclass. 0x00
0x28 bDeviceProtocol Device protocol. 0x00
0x29 bMaxPacketSize0 USB packet size supported for default pipe. 0x40
0x2A bNumConfigurations Number of configurations supported. 0x01
0x2B bReserved Reserved for future use. Must be set to zero. 0x00
Configuration Descriptor
0x2C bLength Length of configuration descriptor in bytes. 0x09
0x2D bDescriptorType Descriptor type. 0x02
0x2E bTotalLength (LSB) Number of bytes returned in this configuration. This
includes the configuration descriptor plus all the
interface and endpoint descriptors.
0x2F bTotalLength (MSB) 0x00
0x30 bNumInterfaces Number of interfaces supported. 0x01
0x31 bConfiguration Value The value to use as an argument to Set Configuration to
select the configuration. This value must be set to 0x01.
0x32 iConfiguration Index to the configuration string. This entry must equal
half of the address value where the string starts, or 0x00
if the string does not exist.
0x33 bmAttributes Device attributes for this configuration.
Bit (7) Reserved. Must be set to 1.
Bit (6) Self-powered. Must be set to 1.
Bit (5) Remote wake-up. Must be set to 0.
Bits (40) Reserved. Must be set to 0.
0x34 bMaxPower Maximum power consumption for this configuration.
Units used are mA*2 (i.e., 0x31 = 98 mA, 0xF9 = 498
mA). 0x00 reported for self-powered devices.
Your release
number
0x53
0x69
0x75
0x03
0x20
0x01
0x00
0xC0
0x01
15
EZ-USB FX2LP USB to ATA Reference Design Notes
Note: A value of 0x00 or 0x01 results in the 56-pin
package configuring itself for self-powered mode,
whereas a value
greater than 0x01 results in the 56-pin package
reporting itself as bus-powered. This is regardless of
what address 0x33 is set to reflect in the 56-pin
package.
Interface and Endpoint Descriptors
Interface Descriptor
0x35 bLength Length of interface descriptor in bytes. 0x09
0x36 bDescriptorType Descriptor type. 0x04
0x37 bInterfaceNumber Interface number. 0x00
0x38 bAlternateSetting Alternate setting. 0x00
0x39 bNumEndpoints Number of endpoints. 0x02
0x3A bInterfaceClass Interface class. 0x08
0x3B bInterfaceSubClass Interface subclass. 0x06
0x3C bInterfaceProtocol Interface protocol. 0x50
0x3D iInterface Index to first interface string. This entry must equal half
of the address value where the string starts or 0x00 if
the string does not exist.
USB Bulk Out Endpoint
0x3E bLength Length of this descriptor in bytes. 0x07
0x60 bEndpointAddress This is an In endpoint, endpoint number 1. 0x81
0x61 bmAttributes This is an interrupt endpoint. 0x03
0x62 wMaxPacketSize (LSB) 0x02
0x63 wMaxPacketSize (MSB)
0x64 bInterval Interval for polling (max. NAK rate). 0x10
(Optional) HID Descriptor
0x55 bLength Length of HID descriptor 0x09
0x56 bDescriptorType Descriptor Type HID 0x21
0x57 bcdHID (LSB) 0x10
0x58 bcdHID (MSB)
0x59 bCountryCode Country Code 0x00
0x5A bNumDescriptors Number of class descriptors (1 report descriptor) 0x01
0x5B bDescriptorType Descriptor Type 0x22
0x5C wDescriptorLength (LSB) 0x22
0x5D wDescriptorLength (MSB)
Terminator Descriptors
0x65 Terminator 0x00
(Optional) HID Report Descriptor
0x66 Usage_Page Vendor defined - FFA0 0x06
0x67 0xA0
0x68 0xFF
0x69 Usage 0x09
0x6A
0x6B Collection 0xA1
0x6C
0x6D Usage 0x09
0x6E
Input Report
0x6F Usage 0x09
0x70
0x71 Logical_Minimum 0x15
0x72
0x73 Logical_Maximum 0x25
0x74
0x75 Report_Size 0x75
0x76
0x77 Report_Count 0x95
0x78
0x79 Input 0x81
0x7A
Output Report
0x7B Usage 0x09
0x7C
0x7D Logical_Minimum Logical Minimum (-128) 0x15
Max data transfer size.
0x00
HID Class Specification release number (1.10)
0x01
Length of HID report descriptor
0x00
Vendor defined
0xA5
Application
0x01
Vendor defined
0xA6
Vendor defined
0xA7
-128
0x80
127
0x7F
8 bits
0x08
2 fields
0x02
Input (Data, Variable, Absolute)
0x02
Usage - vendor defined
0xA9
17
EZ-USB FX2LP USB to ATA Reference Design Notes
0x7E 0x80
0x7F Logical_Maximum 0x25
0x80
0x81 Report_Size 0x75
0x82
0x83 Report_Count 0x95
0x84
0x85 Output 0x91
0x86
0x87
(optional) Standard Content Security Interface Descriptor
0x88 bLength Byte length of this descriptor 0x09
0x89 bDescriptorType Interface Descriptor type 0x0D
0x8A bInterfaceNumberNumber of interface. 0x02
Logical Maximum (127)
0x7F
Report Size 8 bits
0x08
Report Count 2 fields
0x02
Output (Data, Variable, Absolute
0x02
End Collection 0xC0
0x8B bAlternateSetting Value used to select an alternate setting for the
interface identified in prior field
0x8C bNumEndpoints 0x02
0x8D bInterfaceClass
0x8E bInterfaceSubClass Must be set to zero 0x00
0x8F bInterfaceProtocol Must be set to zero 0x00
0x90 iInterface Index of a string descriptor that describes this Interface
Channel Descriptor
0x91 bLength Byte length of this descriptor 0x09
0x92 bDescriptorType channel descriptor type 0x22
0x93 bChannelID Number of the channel, must be a zero based value
0x94 bmAttributes Bits(7:5)
0x95 Bit (4:0)
0x96 bRecipient Identifier of the target recipient
0x97 bRecipientAlt alternate setting for the interface to which this channel
0x98 bRecipientLogicalUnit Recipient Logical Unit
0x99 bMethod Index of a class-specific CSM descriptor That describes
Number of endpoints used by this interface (excluding
endpoint 0) that are CSM dependent
that is unique across the device
Must be set to 0.
0 = Not used
1 = Interface
2 = Endpoint
3...31 = Reserved values
If Recipient type field of bmAttributes = 1 then
bRecipient field is the bInterfaceNumber
If Recipient type field of bmAttributes = 2 then
bRecipient field is an endpoint address, where:
D7: Direction (0 = Out, 1 = IN)
D6...D4: reserved and set to zero
D3...D0: Endpoint number
applies
0x0D
0x00
18
EZ-USB FX2LP USB to ATA Reference Design Notes
one of the Content Security Methods (CSM) offered by
the device
0x9A bMethodVariant CSM Variant descriptor
CSM Descriptor
0x9B bLength Byte length of this descriptor 0x06
0x9C bDescriptorType CSM Descriptor type 0x23
0x9D bMethodID Index of a class-specific CSM descriptor that describes
on of the Content Security Methods offered by the
device.
0x9E iCSMDescriptor Index of string descriptor that describes the Content
Security Method
0x9F bcdVersion (LSB) CSM Descriptor Version number 0x10
0xA0 bcsVersion (MSB) 0x02
0xA1 Terminator 0x00
USB String DescriptorIndex 0 (LANGID)
0xA2 bLength LANGID string descriptor length in bytes. 0x04
0xA3 bDescriptorType Descriptor type. 0x03
0xA4 LANGID (LSB) Language supported. The CY7C68300B supports one
LANGID value.
0x01
0x09
19
EZ-USB FX2LP USB to ATA Reference Design Notes
0xC1 bString Unicode character MSB. 0x00
0xC2 bString Unicode character LSB. “o” 0x6F
0xC3 bString Unicode character MSB. 0x00
0xC4 bString Unicode character LSB. “n” 0x6E
0xC5 bString Unicode character MSB. 0x00
0xC6 bString Unicode character LSB. “d” 0x64
0xC7 bString Unicode character MSB. 0x00
0xC8 bString Unicode character LSB. “u” 0x75
0xC9 bString Unicode character MSB. 0x00
0xCA bString Unicode character LSB. “c” 0x63
0xCB bString Unicode character MSB. 0x00
0xCC bString Unicode character LSB. “t” 0x74
0xCD bString Unicode character MSB. 0x00
0xCE bString Unicode character LSB. “o” 0x6F
0xCF bString Unicode character MSB. 0x00
0xD0 bString Unicode character LSB. “r” 0x72
0xD1 bString Unicode character MSB. 0x00
USB String DescriptorProduct
0xD2 bLength String descriptor length in bytes (including bLength). 0x2C
0xD3 bDescriptorType Descriptor type. 0x03
0xD4 bString Unicode character LSB. “U” 0x55
0xD5 bString Unicode character MSB. 0x00
0xD6 bString Unicode character LSB. “S” 0x53
0xD7 bString Unicode character MSB. 0x00
0xD8 bString Unicode character LSB. “B” 0x42
0xD9 bString Unicode character MSB. 0x00
0xDA bString Unicode character LSB. “2” 0x32
0xDB bString Unicode character MSB. 0x00
0xDC bString Unicode character LSB. “.” 0x2E
0xDD bString Unicode character MSB. 0x00
0xDE bString Unicode character LSB. “0” 0x30
0xDF bString Unicode character MSB. 0x00
0xE0 bString Unicode character LSB. “ ” 0x20
0xE1 bString Unicode character MSB. 0x00
0xE2 bString Unicode character LSB. “D” 0x53
0xE3 bString Unicode character MSB. 0x00
0xE4 bString Unicode character LSB. “i” 0x74
0xE5 bString Unicode character MSB. 0x00
0xE6 bString Unicode character LSB. “s” 0x6F
0xE7 bString Unicode character MSB. 0x00
0xE8 bString Unicode character LSB. “k” 0x72
0xE9 bString Unicode character MSB. 0x00
USB String DescriptorSerial Number (Note: The USB Mass Storage Class specification requires a unique serial number in
each device. Not providing a unique serial number can cause the operating system to crash. The serial number must be at
least 12 characters, but some USB hosts will only treat the last 12 characters of the serial number as unique.)
0xEA bLength String descriptor length in bytes (including bLength). 0x22
0XEB bDescriptor Type Descriptor type. 0x03
20
EZ-USB FX2LP USB to ATA Reference Design Notes
0XEC bString Unicode character LSB. “1” 0x31
0XED bString Unicode character MSB. 0x00
0XEE bString Unicode character LSB. “2” 0x32
0XEF bString Unicode character MSB. 0x00
0XF0 bString Unicode character LSB. “3” 0x33
0xF1 bString Unicode character MSB. 0x00
0xF2 bString Unicode character LSB. “4” 0x34
0xF3 bString Unicode character MSB. 0x00
0xF4 bString Unicode character LSB. “5” 0x35
0xF5 bString Unicode character MSB. 0x00
0xF6 bString Unicode character LSB. “6” 0x36
0xF7 bString Unicode character MSB. 0x00
0xF8 bString Unicode character LSB. “7” 0x37
0xF9 bString Unicode character MSB. 0x00
0xFA bString Unicode character LSB. “8” 0x38
0xFB bString Unicode character MSB. 0x00
0xFC bString Unicode character LSB. “9” 0x39
0xFD bString Unicode character MSB. 0x00
0xFE bString Unicode character LSB. “0” 0x30
0xFF bString Unicode character MSB. 0x00
0X100 bString Unicode character LSB. “A” 0x41
0X101 bString Unicode character MSB. 0x00
0X102 bString Unicode character LSB. “B” 0x42
0X103 bString Unicode character MSB. 0x00
Identify Device String (Note: This is not a Unicode string. It is the ASCII string returned by the device in the Identify Device
information. It is a fixed length (24 bytes). Changing this string may cause CD authoring software to incorrectly identify the
device.)
0X104 Device name byte 1 ASCII Character “C” 0x43
0X105 Device name byte 2 ASCII Character “y” 0x79
0X106 Device name byte 3 ASCII Character “p” 0x70
0X107 Device name byte 4 ASCII Character “r” 0x72
0X108 Device name byte 5 ASCII Character “e” 0x65
0X109 Device name byte 6 ASCII Character “s” 0x73
0X10A Device name byte 7 ASCII Character “s” 0x73
0X10B Device name byte 8 ASCII Character “ “ 0x20
0X10C Device name byte 9 ASCII Character “C” 0x43
0X10D Device name byte 10 ASCII Character “u” 0x75
0X10E Device name byte 11 ASCII Character “s” 0x73
0X10F Device name byte 12 ASCII Character “t” 0x74
0X110 Device name byte 13 ASCII Character “o” 0x6f
0X111 Device name byte 14 ASCII Character “m” 0x6d
0X112 Device name byte 15 ASCII Character “ ” 0x20
0X113 Device name byte 16 ASCII Character “N“ 0x4e
0X114 Device name byte 17 ASCII Character “a“ 0x61
0X115 Device name byte 18 ASCII Character “m“ 0x6d
0X116 Device name byte 19 ASCII Character “e“ 0x65
0X117 Device name byte 20 ASCII Character “ ” 0x20
21
EZ-USB FX2LP USB to ATA Reference Design Notes
0X118 Device name byte 21 ASCII Character “L” 0x4c
0X119 Device name byte 22 ASCII Character “U” 0x55
0X11A Device name byte 23 ASCII Character “N” 0x4e
0X11B Device name byte 24 ASCII Character “0” 0x30
0x11C to
0x1FF
Note: More than 0X100 bytes of configuration are shown for example only. The firmware only supports 0X100 total bytes. This
is controlled by the CONFIG_SPACE_START value in atapi.h. CONFIG_SPACE_START must match the –x address passed
to hex2bix when the files are combined. If more than 0x100 bytes of config space are used, the routines that access config
space must be changed to use a WORD offset rather than a BYTE offset.
Unused ROM Space Amount of unused ROM space will vary depending on
strings.
0xFF
Document Revision History
Revision # Date Comments
2.50 4/5/05 Updated for release 2.50. Removed multiple targets, moved many options to
EEPROM. Added CY3684 references.