|
|
||
|---|---|---|
| .. | ||
| README.md | ||
| argument_parser.py | ||
| power_supply_configs.py | ||
| rdo_test_cli.py | ||
README.md
RDO Test CLI
This example is designed to test Fixed PDOs of known USB PD power supplies.
The test validates:
- PDO values reported by the connected power supply match expected values
- RDO requests are accepted and result in the expected voltage levels
Load testing of the PDOs is left as an exercise to the reader.
Supported Power Supplies
| Power Supply | Voltage Levels |
|---|---|
| Nekteck | 5V, 9V, 15V, 20V |
| HKY100W | 5V, 9V, 12V, 15V, 20V |
| Apple61W | 5V, 9V, 15V, 20V |
| Apple96W | 5V, 9V, 15V, 20V |
| Apple140W | 5V, 9V, 15V, 20V |
| Samsung45W | 5V, 9V, 15V, 20V |
| Samsung25W | 5V, 9V |
| PD45W | 5V, 9V, 15V, 20V |
Note: Additional power supplies can be added by modifying the
POWER_SUPPLY_CONFIGSdictionary inpower_supply_configs.py.
Hardware Setup
Note: Configuration assumes a device with its default settings. If your device has been significantly changed from the default it might be worthwhile doing a factory reset.
- Upstream connection: "Port 0" connected to host
- Power supply: 100W USB-C power supply connected to "Power C" port or an Unregulated connection.
- Device under test: PD power supply connected to the test port.
Note: If the DUT power supply is >= the "Power Supply" then an unregulated connection will be required for best results.
Software Setup
-
Create a virtual environment:
python -m venv venv -
Activate the virtual environment:
# macOS/Linux source venv/bin/activate # Windows venv\Scripts\activate -
Install BrainStem:
pip install brainstem
Example Usage
Detailed Help:
python rdo_test_cli.py --help
Extended Help (from README):
python rdo_test_cli.py --help_extended
Test HKY power supply on port 5:
python rdo_test_cli.py --test_port 5 --dut HKY100W
Test Nekteck power supply on port 4:
python rdo_test_cli.py --test_port 4 --dut Nekteck
Test PD45W power supply on port 3:
python rdo_test_cli.py --test_port 3 --dut PD45W
Connect to a specific device by serial number:
python rdo_test_cli.py --test_port 5 --dut HKY100W --sn 0x12345678
Exit Codes
| Code | Name | Description |
|---|---|---|
| 0 | SUCCESS | All tests passed |
| 1 | CONNECTION_ERROR | Failed to connect to device |
| 2 | CAPABILITY_CHECK_FAILED | Device does not support required capabilities |
| 3 | PDO_TEST_FAILED | One or more PDO tests failed |
| 4 | RDO_TEST_FAILED | One or more RDO tests failed |
| 5 | PORT_DISABLE_FAILED | Failed to disable port |
| 6 | PORT_ENABLE_FAILED | Failed to enable port |
Adding New Power Supplies
To add support for a new power supply:
- Connect the power supply and run the script with an existing DUT configuration
- Note the actual PDO values reported in the output
- Use HubTool to find:
KEY_EXPECTED_HOST_PDOS_VOLTAGE: Look at "Power Data Object: Remote Source" and convert voltage to microvolts (µV)KEY_EXPECTED_RDOS: Select the "Object Position" for each index and copy the "Raw" value
- Add a new entry to
POWER_SUPPLY_CONFIGSinpower_supply_configs.py
Note: RDOs can be created programmatically, but this requires a deep understanding of the PD protocol and is beyond the scope of this example.