Как я уже
писал на днях, пины SPI в разных реализациях ядер Arduino, и в частности при использовании микроконтроллера Raspberry Pi Pico могут сильно различаться.
Поэтому, правильным подходом будет не полагаться на дефолтные значения (которые где-то неочевидно заданы, и чтобы выяснить где конкретно, требуется хорошо так полазить по исходникам ядра), а при инициализации периферии указать их явно.
Но и тут есть свои подводные камни.
Поначалу я использовал пин 0 в качестве линии Chip Select (CS) для модуля W5500, и пин 5 в этом же качестве, но для аналогово-цифрового преобразователя MCP3008.
После миграции на экспериментальное ядро с нормально налаженной многопоточностью данная схема работать перестала (точнее, под windows работала, а под linux - извините).
Дальнейшее исследование привело к картинке, с которой следовало бы начинать знакомство с микроконтроллером:
Как видите, сигнал CS0 может быть назначен пинам GP1, GP5, GP17 или GP21.
Переместил физически сигнал с GP0 на GP1 - работа восстановилась.
И еще любопытный момент: на этой картинке есть примечание "Do not use" напротив GP15.
В десятках других распиновок этого примечания нет. Изучение форумов дало информацию о некой ошибке в чипе RP2040, из-за которой использование этой линии может вызвать проблемы. В общем, может да, а может и нет. Если есть способ не использовать эту линию в разработках - не используйте...
Спасибо за предупреждение!