Implement PD 3.0 collision avoidance
It's pretty easy to implement, it turns out! A new event gets sent to the protocol TX thread when the PE is starting an AMS. Just before the message is transmitted, the TX thread checks if that event was received, and if it was, it waits for the Type-C Current to look like 3.0 A (SinkTxOk) before proceeding. Now, to the best of my knowledge, we're actually doing Power Delivery 3.0 as correctly as we ever did Power Delivery 2.0, which is to say, everything is right except we don't do BIST.
|5 years ago|
|ChibiOS @ ad728cc9bc||5 years ago|
|boards/PD_BUDDY_SINK||5 years ago|
|docs||5 years ago|
|ld||5 years ago|
|lib||5 years ago|
|src||5 years ago|
|.gitignore||5 years ago|
|.gitmodules||5 years ago|
|LICENSE||5 years ago|
|Makefile||5 years ago|
|README.md||5 years ago|
|chconf.h||5 years ago|
|halconf.h||5 years ago|
|mcuconf.h||5 years ago|
|pdb_conf.h||5 years ago|
This is the firmware for the PD Buddy project. Currently, this specifically means the PD Buddy Sink. The firmware is considered stable, and supports the most common use cases for the device.
To compile the firmware, you must first install the GNU ARM Embedded Toolchain. Details of its installation is beyond the scope of this README. Once the toolchain is installed, clone this repository with:
$ git clone --recursive http://git.clayhobbs.com/pd-buddy/pd-buddy-firmware.git
This will give you a complete copy of the repository, including the ChibiOS submodule.
You will also need to install some program to flash the firmware. The simplest option is dfu-util, as it requires no extra hardware (though either the Boot switch must be installed or two pads must be bridged). If you prefer to use SWD, you could also use stlink or OpenOCD.
With all the dependencies installed, the firmware can be compiled as follows:
$ cd pd-buddy-firmware $ make
This compiles the firmware to
The firmware can be flashed in any number of ways, including but not limited to the following:
Set the Boot switch (SW1) on the PD Buddy Sink to the position not marked on the silkscreen to set the device to DFU mode. If your Sink doesn’t have a Boot switch installed, you can simply bridge the two pads of SW1 circled in this image with a blob of solder to achieve the same effect. Once the Sink is set to DFU mode, plug it into your computer. Flash the firmware with:
$ dfu-util -a 0 -s 0x08000000:leave -D build/pd-buddy-firmware.bin
Don’t forget to set the switch back to normal mode (or remove the solder blob) after unplugging the device.
If you have an ST-LINK/V2, you can use it to flash the firmware via SWD as follows:
$ st-flash write build/pd-buddy-firmware.bin 0x8000000
OpenOCD can also be used to flash the firmware. If your debug probe is an ST-LINK/V2, you can easily do this as follows:
$ make flash-openocd-stlink
After first flashing the PD Buddy Sink, the device has no configuration. To configure it, plug it into your computer while holding the “Setup” button. The LED should blink once per second to indicate that the device is in configuration mode. There are then two ways to configure the Sink: a serial terminal, or the configuration GUI.
Connect to the PD Buddy Sink with your favorite serial console program, such as
GNU Screen, Minicom, or PuTTY. Press Enter, and you should be
greeted with a
PDBS) prompt. The
help command gives brief summaries of
each of the available commands.
For example, to configure the PD Buddy Sink to request 2.25 A at 20 V, run the following commands:
PDBS) set_v 20000 PDBS) set_i 2250 PDBS) write
write is run, the chosen settings are written to flash. You can then
simply disconnect the Sink from your computer.
For more information about the serial console configuration interface, refer to the full documentation.
The Sink can also be configured by the PD Buddy Configuration GUI. For more information, see that repository’s README.
Once the Sink has been configured, just plug it into your USB PD power supply. If the supply is capable of putting out the configured current at the configured voltage, the Sink will negotiate it, then turn on its output and blink the LED three times to indicate success. If the supply cannot output enough power, the Sink will turn its LED on solid to indicate failure, and leave its output turned off.