Линии ввода-вывода общего назначения
У EM2001 есть 56 линий ввода-вывода общего назначения (GPIO0 ~ GPIO55). Все линии 3.3V, CMOS, с допустимым входным напряжением 5V. Максимальный ток нагрузки каждой линии ввода-вывода - 10mA. Пятьдесят одна линия доступна всегда. Остальные пять линий расположены на разъёме беспроводного модуля расширения и могут использоваться, если беспроводной модуль не установлен.
Упрощённая структура одной линии ввода-вывода EM2001 показана на схеме ниже. У каждой линии независимое управление выходным буфером. При включении питания EM2001 выходные буферы всех линий ввода-вывода находятся в высокоимпедансном состоянии (иными словами, все линии настроены как входы). Чтобы линия стала выходом, нужно явно включить её выходной буфер.
Многие линии ввода-вывода EM2001 также служат входами или выходами специальных функциональных модулей, например последовательных портов. Большинство таких линий нужно правильно настроить как входы или выходы - автоматически это не произойдёт. Несколько линий, например линии TX и RX последовательного порта в режиме UART, настраиваются как выходы и входы автоматически при включении последовательного порта (или другого аппаратного блока). Подробности см. в описании платформы программирования EM2000.
У каждой линии ввода-вывода есть слабый подтягивающий резистор к питанию, который не даёт линии «висеть в воздухе», когда выходной буфер отключён.

8-разрядные порты
Сорок линий ввода-вывода сгруппированы в пять 8-разрядных портов. Чтобы сохранить совместимость с EM1001, группировка линий по портам сделана точно такой же. К сожалению, из-за этого порты EM2001 стали «псевдопортами»: линии GPIO этих портов на самом деле относятся к нескольким разным физическим портам микроконтроллера на плате. Поэтому операции с портами, такие как io.portset, io.portget или io.portstate, обращаются к выводам порта не строго одновременно: запись или чтение одних линий происходит раньше, чем других. Этот «рассинхрон» очень мал и для большинства приложений не имеет значения, но помните, что он существует.
Схема отображения портов у разных портов различается, поэтому и быстродействие немного отличается. Порты P0 и P1 примерно на 10% медленнее, чем P2, P3 и P4. В большинстве случаев эта разница несущественна, тем более что управление линиями GPIO и портами на EM2001 примерно в семь раз быстрее, чем на EM1001.
Управление линиями ввода-вывода подробно описано в документации по объекту io.