Re: MCP2221A: stuck SDA line
The MCP2221A seem to be a PIC microcontroller preprogrammed with USB, UART, I2C and GPIO.
PIC16(L)F1455 seem to have the same footprint and peripherals.
In addition to I2C there are also 4 GPIO pins that may be controlled from the PC and USB connection.
In the GUI Terminal application, there are settings to write and read these GPIO pins.
This may lead to a quite convoluted workaround:
By connecting 2 of the GPIO pins to I2C SDA and SCL pins, it may be possible to make signals that cannot be made by I2C peripheral hardware.
For the GPIO pin that is connected to SCL signal,
give alternating commands between Write Low, and Read Input.
Reading the GPIO should allow Pull-up resistors on SCL line to make High clock signal.
Repeat 9 times. During this sequence, it may be possible to observe SDA line changing.
SDA line should end at High logic level.
Then make a Stop signal sequence this way:
Write both GPx-SCL and GPy-SDA Low, then Read GPx-SCL only, and then Read Both lines together.
If there is one millisecond between each USB transfer, then additional delay may not be needed,
or 1 millisecond delay may be specified between each transfer.
I assume that any command given thru the MCP2221 I2C/SMBus Terminal application,
also may be programmed using the DLL driver interface.
Another Question: What are the actual I2C Slave device types used?
Many I2C Slave devices are available in both I2C and SMBus variants.
If you may be able to change to SMBus compatible slave devices,
then it may be possible to avoid such stuck bus conditions,
since SMBus slave devices shall have hardware timeout to prevent such state.