Ножек ограниченное количество, и иногда их не хватает. В таком случае ставят микросхему, которая называется экспандер (расширитель портов). Она управляется по трём, скажем, проводам по интерфейсам I2C или SPI, а на выходе у неё целых 16 проводов. Естественно, это медленнее, чем управлять напрямую, но зато ножек мнооого.
Читаю документацию на одну из таких микросхем. Схема ножек понятная. Тут управление, тут биты. Ножки битов обозначены P00, P01 и так далее. Читаю про регистр управления. Регистр управления 16-битный. Можно настроить, будут ножки работать на вход или на выход. Тоже понятно. Смотрю схему всей платы. Мне надо в программе установить направление "на вывод" для ножки номер... P17. Это готовая схема, сделанная другими людьми. Может быть, опечатка?
Смотрю ещё раз на ножки микросхемы. Там есть ножки P16 и P17 (это последняя ножка). Вы уже догадались, чем я был обеспокоен? от P00 до P17 -- всего получается 18 ножек, а не 16. То есть, экспандер не 16-битный, а 18-битный. Но все управляющие регистры показывают на то, что бит только 16. Где же настройки для ещё двух бит? И самое главное, для каких бит? В описании регистров настройки вместо обозначения P00, P01... были обозначения C0.0, C0.1...
Почему вообще такое странное число бит, 18?
Может быть, последние два бита управляются только синхронно с самым старшим настраиваемым?
Может быть, управление ими располагается в каком-нибудь другом регистре?
Может быть, они вообще не настраиваются, а предназначены для постоянного использования с определённой конфигурацией?
Посмотрим-ка, какая конфигурация предусмотрена для каждого бита в таблице назначения ножек. Так-так. Вроде везде написано одно и то же. Постойте, а где биты P08 и P09? После P07 почему-то сразу идёт P10. И на схеме расположения ножек эти ножки тоже отсутствуют. То есть, всё было правильно. Ножек было только 16. Просто они были пронумерованы от 00 до 07, а потом от 10 до 17.
А почему?
Потому что экспандер был разделён на два восьмибитных порта. Первая цифра обозначала номер порта, а вторая -- номер бита в порте. Я к этому, увы, был не готов. Раньше я всегда работал с 16-битными портами со сквозной нумерацией ножек. Но это моя проблема. А проблема составителей документации в том, что две цифры, обозначающие разные по смыслу вещи, стоят в названии ножки подряд. Обычно в таких случаях ножи называют P0_0.