usb-adc-mcp2221

Backend EasyMCP2221

Od wersji 0.2.0 domyślnym backendem jest bezpośrednie API EasyMCP2221.Device. Blinka pozostaje backendem zgodności wybieranym przez MCP2221_BACKEND=blinka albo parametr CLI --backend blinka.

Dlaczego backend bezpośredni

MCP2221A ma trzy wejścia ADC o natywnej rozdzielczości 10 bitów. EasyMCP2221 zwraca je jednym wywołaniem ADC_read() jako wartości 0..1023. Warstwa publiczna projektu zachowuje także pole raw_16bit kompatybilne z CircuitPython; jest ono wyliczane dokładnie jako raw_10bit * 64.

Backend otwiera jedno urządzenie HID na proces, synchronizuje operacje blokadą i ustawia skończony timeout odczytu. Po błędzie odczytu zamyka uchwyt, ponownie otwiera urządzenie i wykonuje najwyżej jedną próbę ponowną. Mutacje GPIO i DAC nie są automatycznie powtarzane, ponieważ ich efekt mógł już wystąpić.

Nie jest wykonywane save_config(). Funkcje pinów i źródło odniesienia są ustawiane wyłącznie w SRAM, więc uruchomienie adaptera nie zapisuje pamięci Flash układu.

Konfiguracja

Zmienna Domyślna wartość Znaczenie
MCP2221_BACKEND easy easy albo zgodnościowy blinka
MCP2221_REFERENCE_VOLTAGE 3.3 zmierzone VDD używane do przeliczenia ADC
MCP2221_DEVICE_INDEX 0 indeks urządzenia dla danego VID/PID
MCP2221_USB_SERIAL puste opcjonalny numer seryjny USB
MCP2221_SCAN_SERIAL false skanowanie Flash, tylko gdy serial nie jest enumerowany
MCP2221_OPEN_TIMEOUT 1.0 czas otwierania urządzenia w sekundach
MCP2221_READ_TIMEOUT_MS 250 maksymalny czas pojedynczego odczytu HID
MCP2221_COMMAND_RETRIES 0 powtórzenia wewnętrzne komendy USB

scan_serial może zakłócać inne aktywne urządzenia. Dla jednego MCP2221A należy pozostawić je wyłączone i używać indeksu 0.

Linux i udev

Urządzenie powinno być widoczne jako 04d8:00dd. Konto uruchamiające usługę musi należeć do plugdev, a reguła udev powinna przyznać dostęp zarówno do urządzenia USB, jak i hidraw.

SUBSYSTEM=="usb", ATTR{idVendor}=="04d8", ATTR{idProduct}=="00dd", MODE="0660", GROUP="plugdev", TAG+="uaccess"
SUBSYSTEM=="hidraw", ATTRS{idVendor}=="04d8", ATTRS{idProduct}=="00dd", MODE="0660", GROUP="plugdev", TAG+="uaccess"

Po zmianie reguły:

sudo udevadm control --reload-rules
sudo udevadm trigger

Moduł jądra hid_mcp2221 może przejąć urządzenie i kolidować z dostępem userspace. Jeżeli jest załadowany i występują opóźnienia lub błąd otwierania, należy wybrać jeden model sterowania; ten projekt wymaga dostępu przez hidapi.

Diagnostyka

lsusb -d 04d8:00dd
usb-adc-mcp2221 health
usb-adc-mcp2221 adc 1 --samples 3
curl http://127.0.0.1:8214/health
curl http://127.0.0.1:8214/api/v1/adc
curl http://127.0.0.1:8202/api/v1/hardware/sensors/batch

health wykonuje rzeczywistą komendę HID. Sama obecność wpisu USB nie jest już traktowana jako działający pomiar.

Ograniczenia

MCP2221A wykonuje komendy przez raporty USB HID. Dokumentacja EasyMCP2221 podaje praktyczny limit zależny od kontrolera hosta, kabla i koncentratora: około 500 komend/s na xHCI i około 333 komend/s na eHCI. Odczyt HUI co 500 ms jest więc bezpieczny, ale nie należy tworzyć osobnego połączenia ani procesu dla każdego żądania.

Na wejściach GP1–GP3 zalecany jest szeregowy rezystor 330 Ω chroniący przed przypadkowym przełączeniem pinu w wyjście. Wejście nie jest izolowane i nie może bezpośrednio przyjmować sygnału 0–10 V ani 4–20 mA.

Źródła