Changelog

V1.6

1.6.3

I2C:
  • New SMBus compatible class. Useful to use other Python I2C modules with MCP2221 interface.

  • Fixed. I2C slave class exception when device is not present.

Documentation:
  • Conflict with kernel module hid_mcp2221. See Delay at the end of script (Linux) in Install / troubleshooting.

  • Explain I2C speed limit for very short transfers.

  • Document SMBus compatible class. Include example code for BME280 (Temperature, Pressure, Humidity sensor).

V1.6.2

ADC/DAC:
  • Fixed bug: when ADC reference is VDD and DAC reference is VRM and a new GPIO configuration is applied, DAC stops working. It seems to be related with a known MCP limitation.

  • Fixed bug: Restore DAC reference value after reset.

  • In some cases MCP2221A’s firmware does not restore DAC or ADC pin assignment when it boots. Software workaround.

I2C:
  • Deprecated I2C_cancel() and I2C_is_idle(). Bus is now managed automatically. You can use _i2c_release and _i2c_status as replacement if needed.

  • Fixed. Low SCL and low SDA exceptions were swapped.

  • When the I2C bus detects SDA activity, the next transfer does not work fine. Prevented via software. See _i2c_status.

Documentation:
  • Instructions and schematic for testing in the Install / troubleshooting section.

  • Replaced PNG schematics by SVG versions in Examples.

  • Troubleshooting section to run as an unprivileged user in Linux (udev rule).

  • Added developers section with details about I2C transfers. See Internal details.

Misc:
  • Added test suite.

  • Added IOC edge detection setting in device representation.

  • Fixed. Bug when reset a device with customized VID/PID.

  • Multiple tries to find the device after a reset() (until timeout).

V1.6.1

Improved USB stability:
  • Added timeout in HID read.

  • Added retries in send_cmd.

  • Better USB trace_commands output format.

  • Removed sleep parameter in send_cmd().

GPIO / ADC and DAC:
More reliable I2C functions:
  • Rewritten I2C_read() to take into account internal I2C engine status.

  • Rewritten I2C_write() to prevent infinite loop, quicker write and ACK checking.

  • Timeout and early failure check in read and write to prevent infinite loop.

  • Custom exceptions for better error handling (see Exceptions in Full API reference)

  • Automatically try to recover from an I2C error in past operation.

New features:
  • Function to save current state: save_config().

  • Added speed parameter in I2C Slave class.

Documentation:
  • Removed self argument from autodoc methods.

  • Added pictures and schematics.

  • Added MCP2221 pinout guide.

  • Added advanced ADC/DAC examples section.

  • Added license.

  • Corrected typos.

  • Formatting.

V1.6.0

Released 1.5.1 again by mistake.

V1.5

V1.5.1

Add I2C Slave helper class.

V1.5.0

First EasyMCP2221 version.

Older releases

This project was initially a fork of PyMCP2221A library by Yuta KItagami (https://github.com/nonNoise/PyMCP2221A).

I made a few changes, then a few more, until I ended up rewriting almost all the code. Since the API is no longer compatible with PyMCP2221A, I decided to create a new package.

Tags v1.4 and earlier are from PyMCP2221A.