CYPD5225 SuperSpeed only device flipped polarity not detected

Announcements

Live Webinar: USB-C adoption. Simple & Cost-efficient solutions | April 18th @9am or 5pm CEST. Register now !

Tip / Sign in to post questions, reply, level up, and achieve exciting badges. Know more

cross mob
TeIk_3653391
Level 4
Level 4
25 sign-ins First like received 10 questions asked

Hi,
We're using CYPD5225 notebook template project and have configured our solution as a source only.
Display port alt modes and USB 2.0 work fine.

For some reason SuperSpeed USB 3.X only devices are recognized correctly only in one orientation. When cable is flipped they are enumerated as USB 2.0 devices.
When we plug any Alt Mode enabled device firmware framework calls function mux_ctrl_set_cfg with correct polarity and mux_select_t is correctly given. Code configures then our board Muxes accordingly. However it looks that when a SuperSpeed device is plugged this function is not called at all or it's called with the polarity argument always set 0. I can't be sure because I've not ever been able to run debugger succesfully.

If mux_ctrl_set_cfg is not called for SuperSpeed only device then where and when I should configure the mux? How do I know polarity in this case?

Firmware base version is 3.4.0.2559.

0 Likes
1 Solution
TeIk_3653391
Level 4
Level 4
25 sign-ins First like received 10 questions asked

Problem has been solved. Root cause ended up being simple. Event handling of APP_EVT_TYPEC_ATTACH calls set_mux(port,MUX_CONFIG_SS_ONLY, 0) that calls  mux_ctrl_set_cfg(). After this framework calls sln_psrc_enable(). Our mux configuration implementation had incorrectly assumed that the sln_psrc_enable() is called before any mux_ctrl_set_cfg().

After realizing this it was easy to to fix mux configuration. Superspeed only polarity works now correctly.

View solution in original post

0 Likes
4 Replies
Sananya_14
Moderator
Moderator
Moderator
750 replies posted 500 replies posted 250 solutions authored

Hi,

It seems that the Mux polarity is not being set correctly since the mux_ctrl_set_cfg() is called with the appropriate polarity and configuration in the alternate mode handler. By default, the mux_ctrl_init() initializes the Mux with polarity of 0 and since the USB 3.0 devices are not alternate mode capable, the mux may not be getting configured after that.

Please add the following call in the app_event_handler() under APP_EVT_TYPEC_ATTACH and let us know if it helps-

mux_ctrl_set_cfg (port, MUX_CONFIG_SS_ONLY, dpm_get_polarity (port))

Please also let us know if you have made any changes to the project.

Best Regards,
Sananya

0 Likes

Thank you, I'll try this out as soon as possible.  We have not modified the templates code logic, just replaced the i2c configuration calls in function mux_ctrl_set_cfg() with configuration specific for our boards muxes.


@Sananya_14 wrote:

Hi,

It seems that the Mux polarity is not being set correctly since the mux_ctrl_set_cfg() is called with the appropriate polarity and configuration in the alternate mode handler. By default, the mux_ctrl_init() initializes the Mux with polarity of 0 and since the USB 3.0 devices are not alternate mode capable, the mux may not be getting configured after that.

Please add the following call in the app_event_handler() under APP_EVT_TYPEC_ATTACH and let us know if it helps-

mux_ctrl_set_cfg (port, MUX_CONFIG_SS_ONLY, dpm_get_polarity (port))

Please also let us know if you have made any changes to the project.

Best Regards,
Sananya




0 Likes

I've verified that the firmware framework calls the mux_set() on APP_EVT_TYPEC_ATTACH and this function passes the MUX_CONFIG_SS_ONLY and correct polarity to mux_ctrl_set_cfg().
Our problem lies elsewhere than I originally assumed, will have to investigate more.

0 Likes
TeIk_3653391
Level 4
Level 4
25 sign-ins First like received 10 questions asked

Problem has been solved. Root cause ended up being simple. Event handling of APP_EVT_TYPEC_ATTACH calls set_mux(port,MUX_CONFIG_SS_ONLY, 0) that calls  mux_ctrl_set_cfg(). After this framework calls sln_psrc_enable(). Our mux configuration implementation had incorrectly assumed that the sln_psrc_enable() is called before any mux_ctrl_set_cfg().

After realizing this it was easy to to fix mux configuration. Superspeed only polarity works now correctly.

0 Likes