Skip to content

tomverbeure/cisco-hwic-3g-cdma

Repository files navigation

Cisco HWIC-3G-CDMA

There is a pretty detailed reverse-engineering write-up here.

Components

Main Components:

  • Altera Cyclone II EP2C35F484C8 FPGA

  • Micron MT46V16M16-6T 4 Meg x 4 banks x 16 (32MB total) Automotive DDR SDRAM (2.5V, 133MHz/167MHz)

  • NXP ISP1564HL HS USB PCI Host Controller

    • Datasheet
    • 3.3V power supply.
    • Built-in 1.8V regulator.
  • Sierra Wireless MC5727 Wireless Module

    • Development Manuals
    • Controlled by host over USB
    • Can be replaced by "Mini PCI-E to USB3.0 PCI Express Adapter Card PCI-E to USB 3.0 Expansion Card", a break-out board connects the mini card USB to a regular USB connector.
  • JTAG connector follows ALTERA USB Blaster pinout`

Various Other Components:

  • 25MHz oscillator

    • 4 pin
    • 3.3V
    • Standard 7.5x5 package
  • ADM3222 - Analog Devices Low Power 3.3V RS-232 Line Drivers/Receivers

  • AT90SC12836RCT/C9059 Crypto Chip

  • Maxim MXQ3311

    • 5V/3.3V level shifters?
  • Ti CU257C - SN74CBT3257C - 4-bit multiplexer/demultiplexer 5V bus switch

    • ?

Power Regulators:

  • Micrel MIC49150-1.2 LDO Regulator with dual input voltages

    • Datasheet Located between FPGA and ISP1564HL
    • 3.3V input
    • Fixed 1.2V output
  • MIC39102 Adjustable Low Voltage Regulator

    • Datasheet
    • Configured for 3.3V input, 2.5V output
  • MIC37302 Adjustable Low Voltage uCap LDO Regulator (3A)

    • Datasheet
    • EN (pin 1) is controlled by FPGA (AB17)
    • Configured for 5V input, 3.3V output that goes to PCI Express Mini card.

Unpopulated:

Power

All essential components for LED blinky are connected to 3.3V. No need for 5V power rail to make that work.

Power architecture:

  • HWIC 3.3V -> FPGA
  • HWIC 3.3V -> MIC39102 -> 2.5V -> FPGA, DDR SDRAM
  • HWIC 3.3V -> MIC49150-1.2 -> 1.2V -> FPGA
  • HWIC 3.3V -> ISP1564HL (-> built-in 1.8V regulator)
  • HWIC 5V -> MIC37302 -> 3.3V -> PCIe Mini Card
  • HWIC 12V not used

PC Express Mini Card Info

FPGA Bitstream Configuration

There are 3 ways to program a new bitstream into the FPGA:

  • JTAG

    The most obvious way is to populate connector J10 with a 10-pin 5x2 connector, use a USB Blaster compatible JTAG dongle, and download new bitstreams with Quartus Programmer. This will be the default mode during RTL development.

    The holes of connector J10 are usually soldered shut on this board. The best way to add a JTAG connector is to solder it solidly in the place where it was intended to be. To do that, you'll first have to open up these 10 soldering holes. Desoldering needles are perfect for that. They only cost a few dollars on AliExpress, and it requires very little practice to learn how to use them.

    There are dirt cheap USB (~$2) Blaster clones out there, but these are based on a PIC or STM microcontroller. These very often don't work! You can read about this here.

    What you need is a USB Blaster that contains an FTDI chip and a CPLD, just like the real one from Intel. One way to make sure you get that is to simply buy an official Intel one ($200!!!), or an 'official' clone from Terasic (~$50). Or you buy a clone on AliExpress that explicty mentions "FT245+CPLD", like this:

    USB Blaster - FT245 + CPLD

    Including shipping, you can find these for less than $15, and they behave exactly like the official ones.

    When not in development mode, you could also download a new bitstream through JTAG by using a so-called .jam file (which contains all the JTAG transactions) and a Jam file player that runs on a small microcontroller. This solution has not been tried on this board, but there's no reason why it wouldn't work. Check out Intel's documentation on this.

  • Passive Serial

    This is the way this Cisco has been configured: an external CPU (in this case, the Cisco router that hosts this board), sends the bitstream to the PCB.

    Alternatively, just like with the JTAG .jam player, one could make this work with a small external microcontroller.

  • Active Serial

    Most FPGA board use this mode. It requires an on-board serial PROM that contains the bitstream. At powerup, the FPGA autonomously loads the bitstream from the PROM. No other active component are required. The Cisco board doesn't use this because it will always be used inside a router that has the capability to upload the bitstream in passive serial mode. And thus, there's no serial PROM on the board either.

    However, it is possible to retrofit the board with a serial PROM.

    Serial PROM Retrofit

    It's obvious that this requires some soldering skills, and even then it's a pretty fragile solution. But it does work!

Active Serial Retrofit

Steps:

  • Change MSEL[1:0] setting on FPGA from 2'b01 (passive serial mode) to 2'b10 (active serial)

    Remove resistor R60. This is a pullup resistor that pulls MSEL[0] to VCCIO. The FPGA has built-in pulldown resistors, so there is no need to add that. (It's interesting that resistor R59 is a pulldown resistor for MSEL[1], which is redudant...)

  • Remove SOT3-5 device that drives DCLK.

    In passive mode, DCLK is an FPGA input, now it becomes an FPGA output.

  • Glue serial PROM onto the board in dead-bug position

    The best location is empty space for the unpopulated NOR flash.

    Make sure you install a 64Mbit PROM: an 8Mbit PROM is sufficient for this FPGA, but Quartus only supports EPCS4 or EPC64 devices. If you mistakenly installed an 8Mbit PROM, chances are that you can still make it work by preparing a .jic file for a 4Mbit EPCS4 and enabling bitstream compression, which should reduce the bitstream size from the required 6Mbit to below 4Mbit.

  • Wire up all the serial PROM pins

    Need to

    <FIXME: comprehensive list and pictures of convenient place to tap the required signals.>

Examples

  • Blinky

    The Hello World of FPGAs!

  • RS-232

    RS232 loopback: what gets send to UART_RXD is sent back to UART_TXD.

FPGA Pin Connections

The pin location declaration for Quartus can be found in ./pinout.tcl. Example projects won't necessarily use this file, e.g. if some IP uses a different name.

FPGA Pins:

CLK25                   : L2
LED_GREEN_CR1           : AA19
LED_GREEN_CR3           : AB19
LED_GREEN_CR5           : AA15
LED_ORANGE_CR5          : AB15

UART_DRV_ENA_           : N6 (ADM3222/EN_) - Receiver Enable. Must be 0 to enable RX.
UART_DRV_SD_            : P6 (ADM3222/SD_) - Shutdown Control. Must be 1 to enable TX.
UART_TXD                : D6 (ADM3222/T1IN)
UART_RXD                : F4 (ADM3222/R1IN)
UART_RTS                : G6 (ADM3222/T2IN)
UART_CTS                : H6 (ADM3222/R2IN)

MSEL0                   : M17   - Pulled high with R60
MSEL1                   : N17   - Pulled low with R63

HWIC Pins:

23 GPIOs from FPGA on HWIC connector:

        1	-	    -	        35
		2	GND	    GND	        36
	70	3	G21	    GND	        37          3 == toggling output on Cisco router
		4	GND	    *  	        38
	71	5	-       GND	        39
		6	GND	    -	        40
	72	7	-	    -	        41
		8	-	    -	        42
	73	9	-	    -	        43
		10	GND	    GND	        44
	74	11	G22	    F21	        45          11 = DATA0
		12	E21	    E22	        46
	75	13	D21     D22	        47
		14	C21     C22	        48
	76	15	J22     *  	        49          49 == MXQ12 and nCONFIG_OE_
		16	*  	    N22	        50          16 == nCONFIG and MXQ12_OE_
	77	17	-	    GND	        51
		18	T22	    U21	        52
	78	19	V21	    V22	        53
		20	W21	    W22	        54
GND	79	21	Y21	    Y22	        55
		22	3.3V    N21	        56
5.0	80	23	MXQ1    -	        57
		24	GND	    MXQ2        58
GND	81	25	T21	    -	        59          25 == DCLK_OE_ / 59 == DCLK, pulled high to 3.3V
		26	*  	    *  	        60
3.3	82	27	*  	    *  	        61
		28	*  	    -           62
GND	83	29	GND	    *  	        63
		30	*  	    GND	        64
12.	84	31	GND	    *  	        65
		32	A12	    GND	        66          32: FPGA input only. Goes to clock input.
	    33	GND	    L18/MXQ7    67
		34	-   	-	        68

SOT23-5 ICs:

  • U3: 'VE': AND gate
  • U7: 'AN': 74AHC1G126: Tri-state buffer with active high OE
  • U9: 'CGK' or 'VG': SN74LVC1G32: OR gate

AT90SC12836RCT/C9059 connections:

1:      GND                         8:      5V
2:      -                           7:      Pin 13 of MXQ3311
3:      Pin 6 and 9 of MXQ3311      6:      -
4:      Pin 11 of MXQ3311           5:      Pin 8  of MXQ3311

AT90SC12836RCT/C9059 connections on VWIC-2MFT-T1/E1 board:

1:      GND                     8:      5V
2:      -                       7:      Pin 13 of MXQ3311
3:      Pin 9  of MXQ3311       6:      -
4:      Pin 11 of MXQ3311       5:      Pin 8  of MXQ3311

MXQ3311 connections:

1:      Pin 23 of HWIC         14:
2:      Pin 58 of HWIC         13: Pin 7 of C9059
3:                             12:
4:      GND                    11: Pin 4 of C9059
5:                             10: 3.3V
6:      Pin 3 of C9059          9: Pin 3 of C9059
7:      Pin 67 of HWIC/L18      8: Pin 5 of C9059

SDRAM to FPGA connections:

DQ0         : B20

DQ1         : A20
DQ2         : B19

DQ3         : A19
DQ4         : D16

DQ5         : E15
DQ6         : D15

DQ7         : C14

LDQS        : A17

LDM         : E14
WE_         : B14
CAS_        : B17
RAS_        : B18
CS_         : A5

BA0         : C17
BA1         : C18
A10/AP      : A3
A0          : A10
A1          : A9
A2          : A7
A3          : B11

DQ15        : F12

DQ14        : A15
DQ13        : B15

DQ12        : A16
DQ11        : B16

DQ10        : F13
DQ9         : F14

DQ8         : D14

UDQS        : A13

UDM         : A14

CK#         : B4
CK          : A4
CKE         : C9

A12         : D9
A11         : D11
A9          : B5
A8          : B6
A7          : B7
A6          : B8
A5          : B9
A4          : B10

Empty TSOP-48 (NOR flash?) footprint to FPGA:

pin  1 : AA17           Pin 48:  Y17
pin  2 :  W16           Pin 47: Pin 14      pulled high.
pin  3 :  V15           Pin 46: GND
pin  4 :  W15           Pin 45:  AB10
pin  5 :  V14           Pin 44:  AB8
pin  6 :  W14           Pin 43:   V9
pin  7 :  Y14           Pin 42:   W7
pin  8 : AA14           Pin 41:   W9
pin  9 :  U10           Pin 40:  AA7
pin 10 :  U13           Pin 39:  AA9
pin 11 :  Y20           Pin 38:  AB7
pin 12 :  Y13           Pin 37: VCCIO
pin 13 : NC             Pin 36:  AB9
pin 14 : Pin 47         Pin 35:   Y5
pin 15 : ???            Pin 34:   V8
pin 16 :  U9            Pin 33:   Y6
pin 17 :  U8            Pin 32:   W8
pin 18 : AB14           Pin 31:  AA6
pin 19 : AA13           Pin 30:  AA8
pin 20 : AB13           Pin 29:  AB6
pin 21 : AA12           Pin 28:  Y19
pin 22 :  V11           Pin 27: GND
pin 23 :  W11           Pin 26:  Y18
pin 24 : AA11           Pin 25: AA10

Important: there's at least one connection wrong in the table above. Need to revisit...

PCI USB Host to FPGA:

Pin  4: INTA_           :   AA5
Pin  5: RST_            :   AB18
Pin  6: SYS_TUNE        :               "Always connect to ground."
Pin  7: CLK             :   E19
Pin  8: GNT_            :   J1
Pin  9: REQ_            :   AB4
Pin 10: AD[31]          :   C1
Pin 11:
Pin 12: AD[30]          :   D2
Pin 13: AD[29]          :   D1
Pin 14: AD[28]          :   E1
Pin 15: AD[27]          :   D4
Pin 16:
Pin 17:
Pin 18:
Pin 19:
Pin 20: AD[26]          :   E4
Pin 21: AD[25]          :   E3
Pin 22: AD[24]          :   E2
Pin 23: CBE_[3]         :   Y4
Pin 24: IDSEL           :   E2          Same as AD[24]
Pin 25:

Pin 26: AD[23]          :   F3
Pin 27: AD[22]          :   F2
Pin 28: AD[21]          :   F1
Pin 29: AD[20]          :   G5
Pin 30: AD[19]          :   G3
Pin 31: AD[18]          :   H4
Pin 32:
Pin 33: AD[17]          :   H2
Pin 34: AD[16]          :   H1
Pin 35: CBE_[2]         :   Y3
Pin 36: FRAME_          :   W1
Pin 37: IRDY_           :   W2
Pin 38: TRDY_           :   W3
Pin 39: DEVSEL_         :   W4
Pin 40:
Pin 41: STOP_           :   V1
Pin 42: CLKRUN_         :               10K resistor to GNDA (pin 61)
Pin 43:
Pin 44: PERR_           :   V2
Pin 45: SERR_           :   V4
Pin 46:
Pin 47: PAR             :   U2
Pin 48: CBE_[1]         :   Y2
Pin 49:
Pin 50: AD[15]          :   J4

Pin 51: AD[14]          :   J2
Pin 52: AD[13]          :   N4
Pin 53: AD[12]          :   N3
Pin 54: AD[11]          :   N2
Pin 55:
Pin 56: AD[10]          :   N1
Pin 57: AD[9]           :   P5
Pin 58:
Pin 59: AD[8]           :   P2
Pin 60: CBE_[0]         :   Y1
Pin 61:
Pin 62: AD[7]           :   P1
Pin 63: AD[6]           :   R5
Pin 64:
Pin 65: AD[5]           :   R2
Pin 66: AD[4]           :   R1
Pin 67: AD[3]           :   T5
Pin 68: AD[2]           :   U3          Uncertain. Might be swapped with AD[3] or AD[1].
Pin 69: AD[1]           :   T3
Pin 70: AD[0]           :   T2
Pin 71:
Pin 72:
Pin 73:
Pin 74: XTAL2           :               Pulled down to GND
Pin 75: XTAL1           :               Going to FPGA with resistive divider?

Pin 76:
Pin 77:
Pin 78: OC1_N           :               Connected to OC2_N. Pulled up to VCCIO.
Pin 79: PWE1_N          :
Pin 80:
Pin 81: RREF            :
Pin 82:
Pin 83: DM1             :
Pin 84:
Pin 85: DP1             :
Pin 86:
Pin 87: OC2_N           :
Pin 88: PWE2_N          :
Pin 89:
Pin 90: DM2             :
Pin 91:
Pin 92: DP2             :
Pin 93:
Pin 94:
Pin 95:
Pin 96: SCL             :               Used for config EEPROM. Not used on this board.
Pin 97: SDA             :
Pin 98:
Pin 99: PME_            :               ?
Pin 100:

Miscellanous Pins:

AB17                    : pin 1 (EN) of MIC37302

NOR Flash

The PCB has an unpopulated TSOP-48 footprint. The pads of this footprint match the requirements for NOR flash.

Some NAND flash also has a TSOP-48 footprint, but the pinout is not compatible. So NOR flash only.

Pin 15 on this package is not routed to the FPGA, but its function is RY/BY#, the status of program or erase operation. There are other ways for the FPGA to figure out this status, so it's not strictly needed.

Pin 47 (BYTE#$) is often used in these flash devices to select between 8-bit or 16-bit mode. On the PCB, it is connected to pin 14 wp#). On a live board, these pins have a level of 3.3V, which is good, because otherwise the flash would be write protected. There is an unpopulated resistor on these pins that is connected to ground. There is no reason to populated this pin.

NOR flash:

  • 256K x16 (e.g. Microchip SST39VF401C)

    • Matches. Pins 9, 10, 16 are NC on this chip.
    • Pin 47 is NC. (So no selection between 8bit or 16bit mode.
  • 1M x 8bit or 256K x16 (e.g. Cypress S29AL008J)

    • Matches. Pins 9, 10, 16 are NC on this chip.
    • Pin 47 (BYTE#) selects between 8bit or 16bit mode. 3.3V -> 16bit mode only.
  • 4M x8 or 2M x16 (e.g. Cypress S29J032J)

    • Matches.
    • Pin 47 (BYTE#) selects between 8bit or 16bit mode. 3.3V -> 16bit mode only.
  • 8M x8 or 4M x16 (e.g. Cypress S29GL064S)

    • No Match!
    • Some models require pin 13 for bit A21, others requires pin 15 for A19. Both pin 13 and pin 15 aren't connected to the FPGA.

Conclusion: it's possible to solder a NOR flash onto this PCB with a maximum size of 32Mbit. When both 8bit and 16bit more are supported, the flash should be used in 16-bit mode. The pulldown resistor should not be populated.

Other Cisco boards with an FPGA:

About

Reverse Engineering of the Cisco HWIC-3G-CDMA PCB

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published