USB EZ-PD™ Type-C Forum Discussions
Hi all,
This is a followup to a previous thread: CCG3 - Receptacle Pinout for a USB-C (DP Alt Mode E) Monitor?
From the info put together in that thread, we determined we do not actually want a Type-E pinout, but a Type-D, as we are only using 2 DisplayPort lanes. We also determined we must have a USB-C Mux for our monitor design.
Today we received our new prototypes for the redesign to accommodate these changes, and are having issues getting the firmware to behave correctly. I want to make sure everything we are doing makes sense, because we are still having no luck getting our PC to recognize the device as a monitor.
Our source is a Windows PC connected to a CCG4 Eval Kit, which converts to USB-C. The CCG4 Eval Kit is confirmed working with this PC and an off-the-shelf USB-C Monitor.
Anyway, onto the show:
Here is how our USB-C receptacle is connected:
And here is how our USB-C mux (TI TUSB564) is connected:
Note that we have R160 and R161 depopulated, as we are looking to have the CYPD be in control of the SBU/AUX lines. SBU1, SBU2, AUX_P. and AUX_N are routed only to the CYPD3120.
The CYPD3120 is connected as follows:
As far as I can tell, our hardware connections should be OK for DP Mode-D operation.
Also note that DP_AUX+ and DP_AUX- are pulled up/down by 1M resistors external to the CYPD3120 per DisplayPort spec (this is not shown in the schematics above)
Our starting point was the default CYPD3120 Dongle firmware. I have made the following adjustments to the firmware for Recepticle/Monitor operation:
1) mux_ctrl_set_cfg() has been adjusted to account for controlling the mux via the 3 GPIO pins, CTL1,CTL0, and FLIP. It should now match the TUSB564 control table:
bool mux_ctrl_set_cfg( uint8_t port, mux_select_t cfg, uint8_t polarity)
{
/* Configure SBU-AUX switch based on CC polarity. */
switch (cfg)
{
case MUX_CONFIG_ISOLATE:
/* Ensure that SBU-AUX switch is open. */
sbu_switch_configure(SBU_NOT_CONNECTED, SBU_NOT_CONNECTED);
/* Ensure that AUX1/2 don't have any resistor pull up/down. */
aux_resistor_configure (AUX_NO_RESISTOR, AUX_NO_RESISTOR);
break;
case MUX_CONFIG_SS_ONLY:
MUX_CTL1_Write(0);
MUX_CTL0_Write(1);
if (polarity == 0)
{
MUX_FLIP_Write(0);
}
else
{
MUX_FLIP_Write(1);
}
sbu_switch_configure(SBU_NOT_CONNECTED, SBU_NOT_CONNECTED);
/* Ensure that AUX1/2 don't have any resistor pull up/down. */
aux_resistor_configure (AUX_NO_RESISTOR, AUX_NO_RESISTOR);
break;
case MUX_CONFIG_DP_2_LANE:
MUX_CTL1_Write(1);
MUX_CTL0_Write(1);
if (polarity == 0)
{
/* CC1 is active. */
sbu_switch_configure(SBU_CONNECT_AUX1, SBU_CONNECT_AUX2);
MUX_FLIP_Write(0);
}
else
{
/* CC2 is active. */
sbu_switch_configure(SBU_CONNECT_AUX2, SBU_CONNECT_AUX1);
MUX_FLIP_Write(1);
}
/*We are using external PU/PD on AUX1/2, set NO INTERNAL RESISTORS*/
aux_resistor_configure (AUX_NO_RESISTOR, AUX_NO_RESISTOR);
break;
case MUX_CONFIG_DP_4_LANE:
MUX_CTL1_Write(1);
MUX_CTL0_Write(0);
if (polarity == 0)
{
/* CC1 is active. */
sbu_switch_configure(SBU_CONNECT_AUX1, SBU_CONNECT_AUX2);
MUX_FLIP_Write(0);
}
else
{
/* CC2 is active. */
sbu_switch_configure(SBU_CONNECT_AUX2, SBU_CONNECT_AUX1);
MUX_FLIP_Write(1);
}
/*We are using external PU/PD on AUX1/2, set NO INTERNAL RESISTORS*/
aux_resistor_configure (AUX_NO_RESISTOR, AUX_NO_RESISTOR);
break;
default:
break;
}
return true;
}
2) In config.h, DP_UFP_DONGLE has been removed, and DP_UFP_MONITOR has been defined:
//#define DP_UFP_DONGLE (1u)
#define DP_UFP_MONITOR (1u)
3) In config.h, DP_GPIO_CONFIG_SELECT has been set to 0, as we want to determine our supported pinout (Type-D) from our configuration rather than GPIO:
//#define DP_GPIO_CONFIG_SELECT (1u)
#define DP_GPIO_CONFIG_SELECT (0u)
With this modified, and our configuration loaded (config is attached) we get nothing. The PC connected does not see anything on the other end. I have also attached the logs from the EZ-PD Analyzer utility. One transmission in particular stands out, SL#51 from our sink:
Looks like we are maybe still missing a few necessary changes to get this working properly? UFP_D pin assignments are showing not supported, and Receptacle indication appears to still be configured as a plug. It also calls out Pin E supported (which, in the configuration for the CCG3, is explicitly NOT supported) How would these be changed?
Would anyone have any suggestions as to what we could try from here? If I'm recalling correctly, the only difference in the CCG3 products is the firmware/included bootloader. Would we be better off starting with a different firmware as a base?
Any help is much appreciated! Thanks!
Show LessHello there I have a question if I implemente 45W car charger using Southchip SC8815 and it works fine and i'm thinking about using CYPD3171 instead of CYPD3175 to make it a powerbank dual role is there a change that should be done in hardware side ?
Or only in the firmware ?
I appreciate all your answer
Show LessHello
They are currently evaluating 100W power supply and charging. They are using CY4532 as Power source, and using CY4533 as Power sink.
In particular, there is an issue on the power receiving side(BCR side: CY4533) below..
Q)
Although it is a BCR, even if the rotary SW is turned during power supply, the PDO changes and the output also changes, but when it is changed to 20V, it becomes very hot.The actual inflow current will be about 20mA when normally started at 20V, but it will be about 60mA if changed on the way.Is this a BCR specification?
Best Regards
Arai
Show LessHello,
1. In main.c
----
timer_start (0, VBUS_MONITOR_TIMER_ID, VBUS_MONITOR_TIMER_PERIOD, vbus_monitor_timer_cb);
while (1)
{
...
}
----
2. soft timer callback below in main.c as well
----
void vbus_monitor_timer_cb (
uint8_t port,
timer_id_t id)
{
(void)port;
(void)id;
I2CM_I2CMasterWriteBuf(....)
timer_start (0, VBUS_MONITOR_TIMER_ID, VBUS_MONITOR_TIMER_PERIOD, vbus_monitor_timer_cb);
}
--
add I2C write in soft timer callback, but occurring reboot.
My question is can not use the I2C master write in soft timer callback?
Thanks
Show LessHello everybody,
Please answer the following questions:
Is it possible to connect the HC-05 bluetooth module to the CYPD3120?
If so, could you give an example of the code?
With best regards
Nazar Melnichek
Show Lessi started a bproject FW_CAR_SDK3_3 as all projects files was protected and i couldn't edit any line of code i had to "save projects as" in new directory so there was not bootloader in the workspace i had to copy "cc_sink_boot" and "cc_src_boot" from different project. i change device in all project from CYPD3175 to CYPD3171 but i boot the project i have this error that pft.m007 the selected device for the bootloadable projects must match, but don't. Bootloader is targeting CYPD3175 and bootloadable is targeting CYPD3171
i tried to solve since last week but with no succees.
please can sombody give me some hint
Show LessI'm using EZ-PD BCR and would like an interrupt to assert when the USBC charger is plugged in. The problem is that the device interrupt masks clear at power up. I'm using a similar schematic to the EVK, using the VBUS_IN to power the device. The datasheet claims you can power VDDD externally instead of using VBUS_IN, but gives no example. Can you show how one would do this?
Alternatively, I would like to modify the default firmware to enable at least the USB-C connect interrupt by default on power up. Is the firmware available ?
Show LessHello
I want to use
https://www.cypress.com/documentation/code-examples/ce224431-psoc-4-uart-printf
on CYPD3171-24LQXQ_pb. Here my steps
1. Modify the Heap size from 0x80 to 0x380 -> build successful
2. Add some code in main.c
#if defined (__GNUC__)
/* Add an explicit reference to the floating point printf library to allow
use of floating point conversion specifier. */
asm (".global _printf_float");
...
#endif /* (__GNUC__) */
Show LessI downloaded the files in from the link below. I could open the .DSN file and access the schematic in Altium, but I could not open the .pcb file. What was the software used to create this .pcb file and what software can I use to open it?
Show Less