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.
Feature | v4.1 | v4 |
---|---|---|
Host USB connector type | C | Micro |
Host max speed to switched USB ports | USB3 5 Gbps | USB2 480 Mbps |
Servo Power Options | Host BC1.2, | Host only |
'' | Host USBC @ 5V, | |
'' | Alternate Power Port @ 5V | |
Switchable USB ports | 2x USB3.0 | 1x USB3.0, SD Reader |
CC DACs on DUT | Yes | No |
DisplayPort | 4 lanes HBR2 | No |
DisplayPort power for dongles | 3.3V @ 500mA | No |
EC SWD debug port | Yes | No |
EC DFU recovery mechanical switch | Yes | No |
DUT Vbus auto discharge option | Yes | No |
DUT max Vbus current | 3A+ | 3A |
Alternate UART to RJ11 | Yes | No |
Ethernet power on/off | Yes | No |
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.
Servo v4.1 combines the functionality of the following devices into one:
For schematics and other hardware design collateral, visit the Chrome OS Partner Site.
Look under the ‘Released Reference Designs’ on the left window pane.
Your contact at Google should be able to provide you with Servo v4.1.
Stop by your local Chromestop, or use http://go/hwrequest and enter Servo V4.1
for the Google Code Name
.
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:
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.
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:
The other peripherals (USBA ports, RJ22, RJ45) can be attached at any time because they won't affect operation positively or negatively.
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.
RJ45 LEDs, viewed from the front of RJ45 connector
Servo v4.1 had several revisions, indicated by board color. The mass production (MP) version is available from Chromestop.
The EVT version is a mostly functioning version with a few bugs. There are around sixty of these EVT units total.
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
.
$ start-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).
$ start-servod -b [board] -s [serialno printed on Servo sticker]
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
Both USB3 type A ports can be individually powered or routed to either host or DUT.
To enable the mux:
$ dut-control -- usb3_mux_en:on
To toggle the top and bottom ports:
$ dut-control -- top_usbkey_power:on # top port -> on $ dut-control -- bottom_usbkey_pwr:off # bottom port -> off
To route them to host or DUT:
$ dut-control -- top_usbkey_mux:servo_sees_usbkey # top port -> host $ dut-control -- bottom_usbkey_mux:dut_sees_usbkey # bottom port -> DUT
$ dut-control -- servo_dts_mode:off [on]
$ dut-control -- servo_pd_role:snk [src]
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> (HOST) $ dut-control -- dut_eth_pwr_en:off [on]
FlashAP
capability is enabled in GSC.Read and flash AP firmware (BIOS) with CCD or any other servo debug connection:
$ sudo futility read --servo -v "$OUTFILE" $ sudo futility update --servo -v -i "$INFILE"
The latest firmware is available via the servod docker image. You need to have go/servod configured. That would also add servo_updater CLI to your host shell.
servod
must not be running. You should have recent versions of start-servod and servo_updater scripts that are in hdctools repo (repo sync)Update to latest stable firmware:
$ servo_updater -- -b servo_v4p1
Rollback to previous stable version if needed:
$ servo_updater -- -b servo_v4p1 -c prev --allow-rollback
Advanced usage below:
$ servo_updater -f <file_path> -- -b servo_v4p1
$ servo_updater -- -b servo_v4p1 -c [alpha|dev|prev|stable]
$ servo_updater --updater_channel [local|latest|beta|release] -- -b servo_v4p1 [...]
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+
Open CCD in the GSC console:
> ccd open
Press power button when prompted. It should take around 5 minutes.
ccd open
, you likely do not have developer mode enabled.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.
File bug or feature requests here.
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
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:
dmesg
on the host)Tests:
Remedy: