Servo v4.1

Servo v4.1 is a debug device in the Servo family and is a superset of the v4 device.

Servo v4.1 functions as a configurable USB hub to support developer and lab recovery features. However, it doesn‘t have any hardware debug features on its own. It must be paired with CCD (GSC’s on-board Servo implementation) or Servo Micro. The Servo is controlled by a host and the Servo attaches to a chromebook DUT.

How do the Servo v4.1 and v4 compare?

Featurev4.1v4
Host USB connector typeCMicro
Host max speed to switched USB portsUSB3 5 GbpsUSB2 480 Mbps
Servo Power OptionsHost BC1.2,Host only
''Host USBC @ 5V,
''Alternate Power Port @ 5V
Switchable USB ports2x USB3.01x USB3.0, SD Reader
CC DACs on DUTYesNo
DisplayPort4 lanes HBR2No
DisplayPort power for dongles3.3V @ 500mANo
EC SWD debug portYesNo
EC DFU recovery mechanical switchYesNo
DUT Vbus auto discharge optionYesNo
DUT max Vbus current3A+3A
Alternate UART to RJ11YesNo
Ethernet power on/offYesNo

Servo v4.1 has a number of minor bug fixes to v4 and BOM replacement for EOL parts.

For most users, replace the host cable from USB micro to USB C type and then update the servod software by the normal methods, and the Servo v4.1 will drop in to the old solution.

What is Servo v4.1?

Servo v4.1 combines the functionality of the following devices into one:

Where are the schematics?

For schematics and other hardware design collateral, visit the Chrome OS Partner Site.

Look under the ‘Released Reference Designs’ on the left window pane.

Servo v4p1

Getting Servo v4.1

Sorry, Servo v4.1 is not publicly available for purchase.
IMPORTANT: You should update the firmware before using, as the factory firmware may be out of date.

Partners

Your contact at Google should be able to provide you with Servo v4.1.

Googlers

Stop by your local Chromestop.

How to Use Servo v4.1

Servo v4.1 must be plugged into a host machine using a USBC cable. This will power the Servo while allowing the user to control the Servo using servod.

The Servo can be powered by the host cable (with BC1.2 and up to 5V @ 3A from a USBC cable) or from the Servo Alternate Power port. If the Servo power needs exceed the host port capability, the Servo Alternate Power Port may be used instead. Presently the EC code is RAM limited, so the full input range of the Servo Alternate Power port (5V-15V @3A) is reduced to 5V only, with PD unsupported. When the Alternate power port is present, the Servo will automatically switch to the Alternate port to power the Servo. When the Alternate power port is used, the Servo has the ability (through software control) to remain powered when the host computer/hub has its own power removed.

The DUT cable (which is a captive) can be plugged into a Chromebook (Device under Test), providing the DUT access to the ethernet and stacked USB ports inside the Servo. This port can support other USB devices as well.

The Type-C captive cable enables debugging of devices that have a GSC (recent Chromebooks) through CCD.

The “uServo” USB port can be used to plug a Servo micro to debug devices over the Yoshi debug header.

From here other functionality is available. The following devices can be used to download data to the DUT:

  • Ethernet (only available to DUT)
  • USB flash drives (dynamically configurable, can attach to host or DUT)

Additionally Servo v4.1 can be used to power the DUT which becomes useful for devices that use USB as their only charge port (tablets, phones etc.). The Type-C port can be used to plug in any Type-C charger to provide full charging capabilities as a charge through hub. If no charger is attached, Servo v4.1 will act as a passive hub.

Servo v4.1 has an embedded keyboard so keystrokes can be emulated on the DUT.

The servod server must be running for Servo v4.1 to work. Details can be found on the Servo page.

The Type-C Servo version acts as both a USB hub and PD charger. Servo v4.1 can also control both CC terminations which allows it to act as a debug accessory. It should be used on systems with CCD.

Recommended setup

It is recommended to attach the Servo to the Host through a powered USB hub capable of at least 1.5A per port. Depending what you connect to the Servo, you may need greater power, up the 3A maximum supported by USB-C without PD. (Servo v4.1 does not support USB PD for its own power, it can only use 5V at up to 3A.)

Besides that, experience has shown that connecting the servo in the following order is the most reliable:

  1. Host cable
  2. Servo Power supply (optional)
  3. DUT Power supply (if used)
  4. DUT cable
  5. DisplayPort

The other peripherals (USBA ports, RJ22, RJ45) can be attached at any time because they won't affect operation positively or negatively.

Servo v4.1 LEDs

  • Red power: Lit when unit is powered. Located near host USBC connector.

  • Red s/w configured: Lit per EC code. Located near uServo USBA connector.

  • Blue DFM: Lit when EC boots in DFM mode, based upon slider switch. This LED should be off for standard operation.

  • Green DUT Power: Lit after PD contract with DUT has completed, to indicate DUT Power port is providing power to DUT

  • Orange DUT Power: Lit after PD contract with DUT has completed, to indicate Servo is providing internally generated 5V to DUT

These DUT Power LEDs are near the center of the Servo.

  • Green Hub Port: Host hub controlled; lit when the A0 (top) USB stacked port is present and attached to the host. LED is near RJ45 on the PCB.

RJ45 LEDs, viewed from the front of RJ45 connector

  • Left- Activity / Link
  • Right- Speed: Green = 1000M, Yellow = 100M, off = 10M

Servo v4.1 Revisions

Servo v4.1 had several revisions, indicated by board color. The mass production (MP) version is available from Chromestop.

Blue or Black Soldermask (DVT/MP)

Green Soldermask (EVT)

The EVT version is a mostly functioning version with a few bugs. There are around sixty of these EVT units total.

  • The host port BC1.2 detection sometimes malfunctions and won't permit the EC to be detected by the host.

Software

Servo v4.1 runs more or less equivalently to Servo v2, through servod. It's intended to be mostly transparent, but there are some differences.

Most functionality is exported through dut-control.

(chroot) $ sudo servod -b <board> -s <serial>

To use with a specific board, you can connect a servo_micro to the “uServo” labeled port (or use the Type-C cable to connect to CCD) and run servod, which will load the board config and control both Servo v4.1 and Servo Micro (or GSC).

(chroot) $ sudo servod -b [board] -s [serialno printed on Servo sticker]

Recipes

Connect to Servo console without servod

Connect to Servo v4.1 Console:

(chroot) $ usb_console -d 18d1:520d

Connect to Servo Micro Console:

(chroot) $ usb_console -d 18d1:501a -i 3

Connect to GSC Console:

(chroot) $ usb_console -d 18d1:5014

Switch USB3 to Host or DUT

Both USB3 type A ports can be individually powered or routed to either host or DUT.

To enable the mux:

(chroot) $ dut-control usb3_mux_en:on

To toggle the top and bottom ports:

(chroot) $ dut-control top_usbkey_power:on # top port -> on
(chroot) $ dut-control bottom_usbkey_pwr:off # bottom port -> off

To route them to host or DUT:

(chroot) $ dut-control top_usbkey_mux:servo_sees_usbkey # top port -> host
(chroot) $ dut-control bottom_usbkey_mux:dut_sees_usbkey # bottom port -> DUT

Disable/Enable SuzyQ wiring (debug accessory mode)

Type-C Servo v4.1 only
(chroot) $ dut-control servo_dts_mode:off [on]

Disable/Enable Chargethrough

Type-C Servo v4.1 only
(chroot) $ dut-control servo_pd_role:snk [src]

Disable/Enable Ethernet

Type-C Servo v4.1 only

If you have tests you need to run that require Ethernet to be disconnected and the DUT be connected to Wi-Fi instead you can connect to Wi-Fi and turn off Ethernet remotely. The Wi-Fi connection should persist through reboots.

(DUT) $ /usr/local/autotest/cros/scripts/wifi connect <ssid> <password>
(chroot) $ dut-control dut_eth_pwr_en:off [on]

Firmware flashing and reading

When flashing the BIOS or EC with CCD, you need to make sure the FlashAP capability is enabled in GSC.

Read and flash AP firmware (BIOS) with CCD or any other servo debug connection:

(chroot) $ sudo futility read --servo -v "$OUTFILE"
(chroot) $ sudo futility update --servo -v -i "$INFILE"

Updating Firmware

The latest firmware is available in the chroot at /usr/share/servo_updater/firmware/.

If the green LED on the Servo does not light up when DUT POWER is connected to a USB charger, you probably don’t have the latest firmware and should update.

NOTE: servod must not be running.

Sync the latest source:

(chroot) repo sync

Update sys-firmware/servo-firmware to the latest version:

(chroot) update_chroot

Update to latest stable firmware:

(chroot) $ sudo servo_updater -b servo_v4p1

Update to specific version:

(chroot) $ sudo servo_updater -b servo_v4p1 -f <filename>

Enabling Case Closed Debug (CCD)

See CCD for complete details.

Connect to GSC console:

(chroot) $ usb_console -d 18d1:5014

Check the GSC FW version in the GSC console:

> version
Build:   0.4.10/cr50_v1.9308_B.269-754117a

CCD requires Cr50 version 0.3.9+ / 0.4.9+

  • 0.4.x is the “pre-pvt” version, for pre-production devices.
  • 0.3.x is the “mp” version, for production devices. This requires the device to be in developer mode before “ccd open”.
  • 0.0.22 is the factory preflash from GUC. It needs an update.

Open CCD in the GSC console:

> ccd open

Press power button when prompted. It should take around 5 minutes.

If you get an access denied error when attempting ccd open, you likely do not have developer mode enabled.
gsc loses the developer mode state after “opening CCD”. If your device boots into recovery mode, try re-entering developer mode.

Enable testlab mode in the gsc console:

> ccd testlab enable

Press power button some more. CTRL+C to exit.

Run servod as normal, CCD should be enabled now.

Known issues

  • Servo Alternate Power Port: Due to EC RAM limitations the maximum voltage used is 5V, although hardware will support a nominal 15V input.
  • Servo + Octopus devices - problems with CCD. We‘ve identified that CCD was not working reliably between most Octopus device models and servo_v4p1. This is due to extra capacitors on SBU lines affecting CCD signal integrity. Details are in this issue (google only). Unfortunately, there’s no quick software fix for this one. Affected boards will need a bit of rework. Here (google only) you can find a spreadsheet listing all affected models and rework instructions.

Bugs

File bug or feature requests here.

Programming

You don‘t need to do this unless you’re developing Servo v4.1 firmware.

Servo v4.1 code lives in the EC and hdctools codebase. It can be built as follows:

(chroot) $ cd ~/chromiumos/src/platform/ec
(chroot) $ make BOARD=servo_v4p1 -j8

To raw flash a Servo v4.1, slide the DFU switch by the RJ45 so the blue LED is lit. For ordinary Servo use, the blue LED should be off.

(chroot) $ ./util/flash_ec --board=servo_v4p1

To set the Servo v4.1 serial number on the Servo console:

> serialno set 0123456

Troubleshooting

Servo appears/disappears on host USB, blinks and doesn't do anything useful

Servo v4.1 consumes a fair amount of power, even with no USB devices plugged in. If the host system can‘t provide enough, it’s possible that servo powers on, browns out, repeating until it's disconnected from the host system.

Symptons:

  • Lots of USB connect / disconnect activity (see dmesg on the host)
  • The red LED at the host connection is permanently on
  • The red LED near the DUT pigtail is almost permanently on, with a short flash to off every few seconds
  • There's a green LED in the middle of the servo PCB that flashes to on in sync with the second red LED

Tests:

  • Attach the host USB-C connector to a USB charger. The LED near the host connector should be permanently on, while the other red LED should blink in a calm 1 second on / 1 second off rhythm.
  • Attach the host USB-C connector to other USB ports on the host system. It's possible that some of them provide more power than others.

Remedy:

  • Use a powered USB hub between host and servo to ensure that there‘s enough power available. Ideally, the servo power USB connection should help but apparently it’s not activated quickly enough.