Problem z mcp23017 po aktualizacji systemu 32b na 64bitowy

hej
Mam sprawę z która walczę i walczę tak w sumie od maja jak tylko zmienilem system z HAOS 32b na HAOS 64b.
Mam plytę na której mam 4 ekspandery mcp23017
2 szt służą jako wejscia 0x20 i 0x21 (30 przycisków dzwonkowych)
2 szt działaja jako wyjścia 0x22 i 0x23 (30 przekaźników sterujacych lampami)
Działają tak ze pin1 0x20 wejścia to pin1 0x23 wyjścia - steruje mi to oświetleniem w domu. Wejścia mają stan wysoki i zwieram je do masy to powoduje włączanie światła itd.

Wszystko działało jak należy na systemie 32 bitowym ale po aktualizacji do 64 bitowego systemu nie działa pin4 na 0x20 - czyli wejście.
Po hard resecie czyli odpięciu zasilania, po ponownym włączeniu przez 3-5sekund przycisk fizyczny działa tak jak powinien. Pin4 0x20 ma stan wysoki, ale po tych 5 sekundach od włączenia prądu, zamieniają się jak by miejscami piny. Bo wejście otrzymuje stan niski a wyjście stan wysoki - zapala się lampa. Lampę mogę zgasić tylko z poziomu HA bo wejście nie reaguje (masa + masa- więc nie może to zadziałać).
Żeby wykluczyć problem ze sprzętem zainstalowałem do testów stary system no i tam wszystko działa jak trzeba. Zrobiłem ponownie przejście na nowy system - czyli kopia zapasowa w 32b + nowy czysty HAOS zainstalowany przez raspberry pi imager + przywrócenie kopii i powrót problemu.

Macie pomysł co to się dzieje ? Ewidentnie przy bootowaniu RPI cos się krzaczy. Zmieniłem prędkość szyny i2c z 400 na 100 ale nie pomogło.
Jak z systemu klikne wyłącz system - to po zamknięciu HA przycisk zaczyna działać prawidłowo.
Wpisy w integracji mcp23017 sa prawidłowe - usuwałem integracje i robilem od 0 wszystko. Też bez zmian.

Moja konfiguracja config.txt
disable_splash=1
kernel=u-boot.bin
arm_64bit=1
dtparam=audio=on
[pi3]
initial_turbo=0
[pi4]
dtoverlay=vc4-fkms-v3d
max_framebuffers=2
arm_boost=1
[all]
dtparam=i2c_arm=on
dtparam=i2c_arm_baudrate=100000
dtparam=i2s=on
dtparam=spi=on
max_usb_current=1
dtoverlay=w1-gpio
#dtparam=i2c_vc=on

To jest ultra-nietypowa konfiguracja, a tymczasem nie za wiele napisałeś. (nawet jaka to malina, ale domyślam, się że 3B lub 3B+, a może jednak 4B??, a to w końcu totalnie różne sprzętowo konstrukcje…)

Oficjalnie wsparcie HA dla GPIO w malinach się skończyło jakieś 3 lata temu, więc zgaduję, że korzystasz z tego komponentu niestandardowego

Zgłoś tam issue.

Możesz też zgłosić issue do HAOS (chociaż w tym wypadku nie liczyłbym na większy odzew).

Być może wręcz chodzi o wykryty błąd konstrukcyjny w samych MCP23017
https://support.microchip.com/s/article/GPA7---GPB7-Cannot-Be-Used-as-Inputs-In-MCP23017
jeśli to ma jakiś związek, to pozostaje nie używać PA7 ani PB7 jako wejść…

najświeższa nota katalogowa już zawiera te informacje


Z mojego punktu widzenia najsensowniejsze co możesz zrobić, to przerzucić obsługę tych ekspanderów na jakiś MCU (zastosowałbym “stary i dobry” ESP32 lub nowocześniejszy ESP32-S3) tu masz przykład komponentu dla ESPHome

tak, RPI4 i dokładnie tamten dodatek z HACS.

Wgrałem dziś czysty pusty system - automatycznie nic się nie włączyło wiec problem sprzętowy mogę wykluczyć.

Jedynie wrzucilem config.txt swoj stary - tam problemu też nie ma bo działa

Nie moge przenieść sterowania expanderami na ESP, nie mam technicznej mozliwosci.
Cos musze miec skopane w calej integracji lub samym HA bo z kopii go przywrócilem i problem znów wrócil…

Możliwe, że system zmieniono na tyle, że coś wysyła na magistralę I2C czego nie powinien.

Jeśli nie masz żadnych możliwości konwersji rozwiązania na oparte na zewnętrznym MCU to pozostań na starym systemie (tak, wiem to totalnie ogranicza dalszy rozwój, bo wsparcie dla 32-bitowych systemów się skończyło), zgłoś issue w obu miejscach.

Rozumiem, że 64-bitowy…
No to szukaj w konfiguracji z wersji 32-bitowej tego co może bruździć…

Twoje rozwiązanie jest zbyt niszowe, aby był cień szansy na spotkanie kogoś kto korzysta z tego samego rozwiązania (tu jedyny ratunek to repo komponentu niestandardowego - wszyscy użytkownicy tożsamych z twoim rozwiązań korzystają właśnie z niego).

no wlasnie… choc znajomy ma taka sama płyte , takie same komponenty i u niego problemu nie ma… a system tez zmienil.

Czekam na jego backupa - zeby wgrac u siebie i sprawdzic czy po włączeniu bedzie to samo czy nie…
Ostatecznosć to pozbyc sie tego wejscia i wyjscia i podpiać pod inne piny sie włącznikiem a o PIN4 zapomnieć.
Tylko ze nie lubie jak coś mi nie działa i wiem o tym że nie działa.

Nie potrafię sobie tego wyobrazić.

Może nie znalazłem rozwiązania, ale przy okazji zaktualizowałam linki do datasheetów w dokumentacji ESPHome, bo były tam wstawione jakieś antyki nie zawierające wielu poprawek.

Microchip nie zmienił konstrukcji tych układów scalonych i jej nie zmieni już nigdy, nadal mają ten sam błąd dotyczący PA7 i PB7 - ta wada wyszła na jaw po 11 latach produkcji MCP2017, za to dostosował dokumentację tak, by można było uniknąć ich wadliwego działania nie używając ich jako wejścia.


PS

W ogóle OP nie potwierdził, ani nie zaprzeczył, że jego konstrukcja jest narażona na skutki tego błędu konstrukcyjnego (bo podał jakąś numerację ze swoich płytek i wcale nie wiemy czy akurat chodzi o PA7 lub PB7).
Być może płytki zawierające te układy zostały zaprojektowane na bazie dokumentacji z lat 2005-2016 i są podatne na błąd sprzętowy (który ujawnia się tylko w specyficznych warunkach).

Ogarnelem temat. Opis moze bedzie chaotyczny, ale opisze co zrobilem po kolei bo co pomoglo nie mam pojecia.

Zahaszowalem wszystko co moglem od sterowania mcp23017, usunelem integracje, zahaszowalemvwszystko w binarysensor.yaml oraz w switch.Yaml odnosnie mcp.
Potem restart systemu → wstal znow z problemem jak zawsze. Ale wstal bez dzialajacego sterowania mcp. Wygenerowalem kopie i zapisalem na dysk.
A potem to od nowa czysty system haos 64b z oficjalnego zrodla itd.
Nowa instalacja byla czysta bez encji, integracji, bez wlaczonej szynie i2c itd. Po prostu goly Home Asistant.
Restart i nagle 4 przekaznik sie nie wlaczyl sam. Zmierzylem napiecie i wejscie ma stan wysoki, wyjscie niski. Tak jak powinno byc.

Ponownie zrobilem czysta instalke od poczatku i przywrocilem kopie swojego ha z dysku.
Potem odhaszowalem wszystko w plikach yaml. Restart systemu i znow wstalo bez problemow.
Kolwejno dodalem w HACS integracje mcp23017 , restart i nadal ok.
Ale wiadomo nic nie dziala bo trzeba wlaczyc szyne i2c zeby fizyczne guziki dzialaly itd.
Zainstalowalem dodatek ktory to robi z poziomu HA, kilka resetow i wszystko wstalo i dziala.

Co pomoglo nie wiem… Co bylo nie tak tez nie wiem.
Ale dziala ok. Wylaczalem prad, wywalalem specjalnie RPI4 i za kazdym razem wstaje i dziala ok.
Nawet maly wyswietlacz ktory jest na tej samej szynie i2c dziala ok.

Nie dziala tylko czujnik po onewire bo nie wlaczylem go w config.txt

Dzieki za pomoc.

1 polubienie