Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

QSFP/I2C: Ability to request protocol resets #116

Open
Aaron-Hartwig opened this issue Nov 17, 2023 · 0 comments
Open

QSFP/I2C: Ability to request protocol resets #116

Aaron-Hartwig opened this issue Nov 17, 2023 · 0 comments
Assignees

Comments

@Aaron-Hartwig
Copy link
Collaborator

Per SFF-8636 section 5.2.2:

Synchronization issues may cause the master and slave state machines to disagree on the specific bit location currently being transferred, the type of operation or even if an operation is in progress. The 2-wire interface protocol has no explicitly defined reset mechanism. The following procedure may force completion of the current operation and cause the slave to release SDA.
a) The master shall provide up to nine SCL clock cycles (drive low, then high) to the slave.
b) The master shall monitor SDA while SCL is high on each cycle.
c) If the slave releases SDA, it will be high and the master shall initiate a START condition.
d) If SDA remains low after a full nine clock cycles the protocol reset has failed.

The I2CCore::Operation enum should be expanded to accommodate a ProtocolReset variant. Per the above, the I2CCore state machine would need to clock out 9 cycles while reading SDA. If SDA is or transitions high during that period, the peripheral has released the bus. If not, the protocol reset has failed.

From the QsfpModuleController perspective, we will need to decide when this should be done. All our module I2C busses are point to point, so we should never get an unexpected NACK. In the case we do receive one, perhaps we should execute a protocol reset?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant