Install / troubleshooting

Regular installation via PIP

Pip command for Linux:

$ pip install EasyMCP2221

On Linux, additional steps may be required. See Troubleshooting section below.

Pip command for Windows:

> py -m pip install EasyMCP2221

Troubleshooting

Device not found

First step, try to use any of the Microchip’s official tools to verify that everything is working fine.

_images/mcp_utility_win.png

On Linux, use lsusb to find any device with ID 04D8:xxxx:

$ lsusb
Bus 001 Device 004: ID 04d8:00dd Microchip Technology, Inc.
...

Hidapi backend error

EasyMCP2221 depends on hidapi, which in fact needs some backend depending on OS. Sometimes this is troublesome.

If you get an error like this:

ImportError: Unable to load any of the following libraries:libhidapi-hidraw.so libhidapi-hidraw.so.0 libhidapi-libusb.so libhidapi-libusb.so.0 libhidapi-iohidmanager.so libhidapi-iohidmanager.so.0 libhidapi.dylib hidapi.dll libhidapi-0.dll

Try to install the following packages using pip:

  • libusb

  • libusb1

If that doesn’t work, try manually installing libhidapi from https://github.com/libusb/hidapi/releases.

Sometimes, yo need to manually copy libusb-1.0.dll to C:\Windows\System32. It used to be in C:\Users\[username]\AppData\Local\Programs\Python\Python39\Lib\site-packages\libusb\_platform\_windows\x64\libusb-1.0.dll or similar path.

Open failed for non-root users (Linux)

On Linux, only root can open these devices. Trying to run the software without privileges will raise the following error:

$ python3 pruebas.py
Traceback (most recent call last):
  File "pruebas.py", line 7, in <module>
    mcp = EasyMCP2221.Device(trace_packets = False)
  File "/home/pi/EasyMCP2221/EasyMCP2221/MCP2221.py", line 82, in __init__
    self.hidhandler.open_path(hid.enumerate(VID, PID)[devnum]["path"])
  File "hid.pyx", line 142, in hid.device.open_path
OSError: open failed

To change that, you need to add a udev rule. Create a new file under /etc/udev/rules.d/99-mcp.rules with this content:

SUBSYSTEM=="usb", ATTRS{idVendor}=="04d8", MODE="0666", GROUP="plugdev"

Delay at the end of script (Linux)

If you experience delays on script startup or exit, use lsmod to check for conflicting drivers.

# lsmod | grep hid
hid_mcp2221            20480  1
hid_generic            16384  0
usbhid                 57344  0
hid                   139264  3 usbhid,hid_generic,hid_mcp2221

This library may conflict with hid_mcp2221 kernel module.

To blacklist this module, create a file named /etc/modprobe.d/blacklist-mcp2221.conf with this content:

blacklist hid_mcp2221

Run rmmod hid_mcp2221 to unload the module.

Local installation and testing

You may want to install this library from a cloned GitHub repository, usually for testing or development purposes.

First create and activate a new virtual environment. Update pip if needed.

> python -m venv init easymcp_dev
> cd easymcp_dev
> Scripts\activate
> python -m pip install --upgrade pip

Then, clone the home repository inside that virtual environment and perform the installation in editable (-e) mode.

$ git clone https://github.com/electronicayciencia/EasyMCP2221

$ pip install -e EasyMCP2221

If you get this error: “File “setup.py” not found. Directory cannot be installed in editable mode”, update PIP.

> python -m pip install --upgrade pip

If you get this one: “EasyMCP2221 does not appear to be a Python project: neither ‘setup.py’ nor ‘pyproject.toml’ found.”, please check working directory. You must be in the root of the cloned GitHub repository.

Local documentation

This is an optional step. To compile documentation locally you will need sphinx and RTD theme.

pip install -U sphinx
pip install -U sphinx_rtd_theme

Compilation:

cd docs
make html

Main HTML file is EasyMCP2221/docs/build/html/index.html.

Testing

There is a test suite to check ADC, DAC, I2C, and some other features like start-up and persistence after a reset.

In order to pass the tests, you need a working MCP2221 or MCP2221A and a serial EEPROM 24LC128 or bigger. Use the following schematic:

_images/sch_testing.svg

GP0 and GP1 are used to test I2C in several scenarios. GP3 is used as a DAC. GP2, connected to a simple RC low pass filter, is used as an ADC to test different voltaje references.

Run all tests:

$ python -m unittest

Run specific test suite, verbose and fail-fast:

$ python -m unittest test.test_gpio -fv