AgentSkillsCN

ftdi

适用于处理 FTDI(未来科技设备国际公司)的 MPN 编码规则、USB 接口芯片解码及处理器引导。当您需要对接 FTDI USB 桥接 IC,或 FTDI 处理器时,可选用此技能。

SKILL.md
--- frontmatter
name: ftdi
description: FTDI (Future Technology Devices International) MPN encoding patterns, USB interface chip decoding, and handler guidance. Use when working with FTDI USB bridge ICs or FTDIHandler.

FTDI Manufacturer Skill

Company Overview

FTDI (Future Technology Devices International) specializes in USB interface ICs and bridge chips. Their products convert USB to various protocols including serial UART, I2C, SPI, and parallel FIFO interfaces. FTDI chips are widely used for USB-to-serial converters, development boards, and embedded systems.


MPN Structure

FTDI MPNs follow this general structure:

code
FT[SERIES][VARIANT][PACKAGE][-QUALIFIER]
│    │       │        │         │
│    │       │        │         └── Optional: REEL=Tape/Reel, TUBE=Tube, TRAY=Tray
│    │       │        └── Package code (see table below)
│    │       └── Variant letter(s) (H=High-speed, D=Device, X=X-series)
│    └── Series number (232, 2232, 4232, 230, etc.)
└── FT prefix (always present)

Example Decoding

code
FT232RL
│  │ ││
│  │ │└── L = SSOP variant (RL = SSOP-28)
│  │ └── R = First generation revision
│  └── 232 = USB to UART bridge series
└── FT = FTDI prefix

FT2232H-REEL
│  │   │  │
│  │   │  └── REEL = Tape and reel packaging
│  │   └── H = High-speed USB 2.0
│  └── 2232 = Dual channel series
└── FT = FTDI prefix

FT230XS-R
│  │  ││ │
│  │  ││ └── R = Tape and reel (shortened)
│  │  │└── S = SSOP package
│  │  └── X = X-series (low-cost, simplified)
│  └── 230 = Basic UART series
└── FT = FTDI prefix

Supported Component Types

The FTDIHandler supports a single component type:

ComponentTypeDescription
ICAll FTDI USB interface ICs

Note: FTDI products are all ICs - there are no manufacturer-specific component types defined (e.g., no USB_BRIDGE_FTDI).


Package Codes

Single Letter Codes

CodePackagePin CountNotes
RSSOP28FT232R standard package
SSSOP16-28Standard SSOP
QQFN20-32QFN variant
HLQFP48-64High-speed devices
DLQFP48FT2232D
XTSSOP20Thin profile
TTQFP32-48Standard TQFP

Two Letter Codes

CodePackagePin CountNotes
RLSSOP28FT232RL (most common)
RQQFN32FT232RQ
BLLQFP76FT600/FT601 LQFP
BQQFN56FT600/FT601 QFN
XSTSSOP16-20X-series TSSOP
XQQFN16-20X-series QFN

Packaging Suffixes (After Hyphen)

SuffixMeaning
-REELTape and reel
-TUBETube packaging
-TRAYTray packaging
-RTape and reel (shortened)

Product Families

USB to Serial UART

SeriesChannelsUSB SpeedControl LinesNotes
FT2321Full-SpeedFull modemOriginal, most common
FT230X1Full-SpeedNoneBasic, low-cost
FT231X1Full-SpeedRTS/CTSX-series with handshaking
FT234X1Full-SpeedRTS/CTS/DTR/DSRX-series full control
FT22322High-SpeedFull modemDual channel
FT42324High-SpeedPartialQuad channel

USB to I2C

SeriesChannelsUSB SpeedNotes
FT200XD1Full-SpeedUSB to I2C bridge
FT201X1Full-SpeedUSB to I2C with GPIO
FT2601Full-SpeedHID-class I2C/UART

USB to SPI

SeriesChannelsUSB SpeedNotes
FT220X1Full-SpeedUSB to SPI/FT1248
FT221X1Full-SpeedUSB to SPI with GPIO

USB to FIFO

SeriesBus WidthUSB SpeedNotes
FT240X8-bitFull-SpeedUSB 2.0 FIFO
FT60016-bitSuper-SpeedUSB 3.0 FIFO
FT60132-bitSuper-SpeedUSB 3.0 FIFO

Specialized Products

SeriesTypeNotes
FT51AUSB MCU8051-based USB programmable MCU
FT311DAndroid AOAUSB Android Open Accessory host
FT312DAndroid AOAUSB Android Open Accessory device
FT800/FT81xEVEEmbedded Video Engine (display controller)

USB Speed Reference

CategoryUSB SpeedBandwidthDevices
Full-SpeedUSB 2.0 FS12 MbpsFT232, FT23xX, FT2xxX, FT260
High-SpeedUSB 2.0 HS480 MbpsFT2232H, FT4232H
Super-SpeedUSB 3.0 SS5 GbpsFT600, FT601

Series Extraction Rules

The handler extracts series using these patterns:

java
// FT232 family - returns "FT232"
if (mpn.matches("^FT232[A-Z]{0,2}.*")) return "FT232";

// FT2232/FT4232 - returns "FT2232" or "FT4232"
if (mpn.matches("^FT2232[A-Z]?.*")) return "FT2232";
if (mpn.matches("^FT4232[A-Z]?.*")) return "FT4232";

// X-series - returns "FT230X", "FT231X", etc.
if (mpn.matches("^FT230X.*")) return "FT230X";
if (mpn.matches("^FT231X.*")) return "FT231X";
if (mpn.matches("^FT234X.*")) return "FT234X";

// USB 3.0 - returns "FT600" or "FT601"
if (mpn.matches("^FT600.*")) return "FT600";
if (mpn.matches("^FT601.*")) return "FT601";

// EVE series - returns "FT800" or "FT810", "FT811", etc.
if (mpn.matches("^FT800.*")) return "FT800";
if (mpn.matches("^FT81[0-9].*")) return mpn.substring(0, 5);  // FT810, FT811, etc.

Package Code Extraction Rules

The handler uses a priority system for package extraction:

  1. Remove packaging suffixes first: Strip -REEL, -TUBE, -TRAY
  2. Match specific patterns:
    • FT232[A-Z]{1,2}$ - Extract suffix after "FT232" (e.g., RL, RQ)
    • FT[24]232[A-Z]$ - Extract last character (e.g., H, D)
    • FT2[0-4][0-9]X[A-Z]? - Extract character after X (e.g., S, Q)
    • FT260[A-Z] - Extract character after "FT260"
    • FT60[0-1][A-Z]{1,2} - Extract suffix after "FT60x" (e.g., BL, BQ)
  3. Resolve to package name: Use PACKAGE_CODES map
java
// Example: FT232RL-REEL
// Step 1: Remove -REEL -> FT232RL
// Step 2: Match FT232[A-Z]{1,2}$ -> suffix = "RL"
// Step 3: PACKAGE_CODES.get("RL") -> "SSOP"

Replacement Compatibility

The handler implements isOfficialReplacement() with these rules:

Same Series (Always Compatible)

Parts in the same series with different packages are always replacement-compatible:

  • FT232RL <==> FT232RQ (same chip, different package)
  • FT2232H <==> FT2232D (same functionality)

X-Series UART Upgrade Path

X-series variants can replace each other in one direction (more pins = superset):

code
FT230X (0 control lines) <-- FT231X (2: RTS/CTS) <-- FT234X (4: +DTR/DSR)
  • FT234X can replace FT231X or FT230X (superset)
  • FT231X can replace FT230X
  • Downgrade is NOT valid (FT230X cannot replace FT231X)

NOT Compatible

  • FT2232 vs FT4232 - Different channel count
  • FT600 vs FT601 - Different bus width (16-bit vs 32-bit)
  • FT232 vs FT2232 - Different channel count

Helper Methods (FTDI-Specific)

The FTDIHandler provides additional helper methods:

getInterfaceType(mpn)

Returns the USB interface type:

Return ValueSeries
"UART"FT232, FT2232, FT4232, FT23xX
"I2C"FT200X, FT201X
"SPI"FT220X, FT221X
"FIFO"FT240X, FT600, FT601
"I2C/UART"FT260
"USB MCU"FT51A
"Android AOA"FT311D, FT312D
"EVE"FT8xx

getChannelCount(mpn)

Returns number of channels (1, 2, or 4):

  • FT232, FT23xX, FT2xxX, FT260 -> 1
  • FT2232, FT600 -> 2
  • FT4232 -> 4

getUsbVersion(mpn)

Returns USB version string:

  • "USB 2.0 Full-Speed" - Most single-channel devices
  • "USB 2.0 High-Speed" - FT2232H, FT4232H
  • "USB 3.0 Super-Speed" - FT600, FT601

Example MPNs

MPNSeriesPackageInterfaceChannelsUSB Speed
FT232RLFT232SSOPUART1Full-Speed
FT232RQ-REELFT232QFNUART1Full-Speed
FT2232HFT2232LQFPUART2High-Speed
FT4232H-REELFT4232LQFPUART4High-Speed
FT230XSFT230XSSOPUART1Full-Speed
FT231XQ-RFT231XQFNUART1Full-Speed
FT234XDFT234XLQFPUART1Full-Speed
FT201XSFT201XSSOPI2C1Full-Speed
FT220XQFT220XQFNSPI1Full-Speed
FT240XSFT240XSSOPFIFO1Full-Speed
FT260SFT260SSOPI2C/UART1Full-Speed
FT600BQFT600QFNFIFO2Super-Speed
FT601BL-REELFT601LQFPFIFO1Super-Speed
FT51AQFT51AQFNUSB MCU1Full-Speed
FT812QFT812QFNEVE--

Handler Implementation Notes

Pattern Matching Order

The handler defines explicit pattern checks in matches() for each family:

java
// Pattern order in matches():
1. FT232 series:   "^FT232[A-Z]{0,2}.*"
2. FT2232 series:  "^FT2232[A-Z]?.*"
3. FT4232 series:  "^FT4232[A-Z]?.*"
4. X-series UART:  "^FT23[0-9]X[A-Z]?.*"
5. USB to I2C:     "^FT20[0-1]X[A-Z]?.*"
6. USB to SPI:     "^FT22[0-1]X[A-Z]?.*"
7. FT240X FIFO:    "^FT240X[A-Z]?.*"
8. FT260:          "^FT260[A-Z]?.*"
9. USB 3.0:        "^FT60[0-1][A-Z]?.*"
10. FT51A MCU:     "^FT51[A-Z].*"
11. Android AOA:   "^FT31[1-2]D.*"
12. FT120:         "^FT12[0-2].*"
13. EVE:           "^FT8[0-1][0-9].*"

Handler Characteristics

  • Uses Set.of() for getSupportedTypes() (correct, immutable)
  • Overrides matches() with explicit pattern checks (avoids cross-handler issues)
  • Returns empty set for getManufacturerTypes() (no manufacturer-specific types defined)
  • Uses Map.ofEntries() for PACKAGE_CODES (correct, immutable)

Related Files

  • Handler: manufacturers/FTDIHandler.java
  • Component types: Only ComponentType.IC (no FTDI-specific types)
  • Tests: Should be in handlers/FTDIHandlerTest.java (not manufacturers package)

Learnings & Edge Cases

  • Single ComponentType: FTDI only supports IC - there are no manufacturer-specific types like USB_BRIDGE_FTDI. All FTDI products are ICs.
  • X in series name: The "X" in FT230X/FT231X/etc. is part of the series name, not a package suffix. Package code comes AFTER the X.
  • Package suffix after X: For X-series devices, the package code is the letter immediately following "X" (e.g., FT230XS = SSOP).
  • Two-letter package codes: Some package codes are two letters (RL, RQ, BL, BQ). Check longer codes before shorter ones.
  • -R suffix ambiguity: "-R" at the end typically means tape and reel (shortened from -REEL), but should be stripped before package extraction.
  • FT600 vs FT601: Different bus widths (16-bit vs 32-bit), NOT interchangeable despite similar names.
  • FT8xx series: These are EVE (Embedded Video Engine) display controllers, NOT USB bridge chips. Different product category entirely.
  • HID-class FT260: The FT260 is unique - it's a HID-class device (no driver needed on most OS), supporting both I2C and UART.
  • H suffix meaning: "H" after series number typically means High-Speed USB 2.0 (480 Mbps), e.g., FT2232H, FT4232H.
  • USB 3.0 devices (FT600/FT601): Use BL/BQ package suffixes, not the standard single-letter codes.
<!-- Add new learnings above this line -->