Перед использованием цифрового ввода/вывода (I/O) необходимо настроить каждый порт. Для настройки используется команда pid_ioctl.
pid_ioctl($pid, "set N1[-N2] mode TYPE");
N1 и N2 указывают диапазон нескольких портов. В случае настройки только одного порта, возможно использовать только N1.
Доступны следующие типы i/o:
Тип | Описание | |
---|---|---|
in | Цифровой ввод | |
in_pu | Цифровой ввод: Pull-Up | |
in_pd | Цифровой ввод: Pull-Down | |
out | - | Цифровой вывод |
low | Цифровой вывод: по умолчанию LOW | |
high | Цифровой вывод: по умолчанию HIGH | |
out_pp | - | Цифровой вывод: Push-Pull |
low | Цифровой вывод: Push-Pull + по умолчанию LOW | |
high | Цифровой вывод: Push-Pull + по умолчанию HIGH | |
out_od | - | Цифровой вывод: Open-Drain |
low | Цифровой вывод: Open-Drain + по умолчанию LOW | |
high | Цифровой вывод: Open-Drain + по умолчанию HIGH |
Pull-Up по умолчанию выдает состояние входного порта как HIGH. Для этого установите TYPЕ входного порта на in_pu.
Pull-Down по умолчанию имеет состояние порта в LOW. Для этого установите TYPE входного порта на in_pd.
Push-Pull - это базовый режим вывода, который делает состояние включёного выходного порта HIGH, а выключенного - LOW. Для этого установите TYPE выходного порта на out_pp.
Можно использовать, если вы хотите подключить внешний источник питания к выходному порту.
Если при настройке порта для Open-Drain вы не подключаете какой-либо внешний источник питания, то состояние выходного порта будет LOW, когда порт выключен. При включенном порте состояние будет UNKNOWN.
Таким образом, вам нужно вытащить пин с внешним резистором.
Для этого установите TYPE вызодного порта на out_od.
Цифровые I/O порты могут быть настроены на один из типов светоидов (LED). Доступны следующие типы LED:
Тип | Описание |
---|---|
led_sts | LED-индикатор состояния системы |
led_net0_act / led_net1_act |
Активация индикатора NET(net0 - проводной, net1 - беспроводной) link LED: - успешно установлена сетевая ссылка: LOW - в настоящий момент передача или получение данных сети: HIGH |
led_net0_link / led_net1_link |
LED-индикатор сетевой ссылки: подключен к сети - LOW |
led_net0_rx / led_net1_rx |
LED-индикатор сети приема: на момент получения данных - LOW |
led_net0_tx / led_net1_tx |
LED-индикатор сети отправки: на момент отправки - LOW |
※ Каждый тип LED не может быть установлен на 2 или более выходных контакта.
$pid = pid_open("/mmap/uio0"); // open UIO 0
pid_ioctl($pid, "set 0 mode in"); // set port 0 to input
pid_ioctl($pid, "set 1 mode in_pu"); // set port 1 to input: pull-up
pid_ioctl($pid, "set 2 mode in_pd"); // set port 2 to input: pull-down
pid_ioctl($pid, "set 3-6 mode out"); // set port 3 ~ 6 to output
// set port 7 ~ 9 to output with default high
pid_ioctl($pid, "set 7-9 mode out high");
// set port 10 to output with default low
pid_ioctl($pid, "set 10 mode out low");
// set port 11 to output: push-pull with default high
pid_ioctl($pid, "set 11 mode out_pp high");
// set port 12 to output: open-drain with default low
pid_ioctl($pid, "set 12 mode out_od low");
// set port 13 to network link LED
pid_ioctl($pid, "set 13 mode led_net0_link");
// set port 14 to network receive LED
pid_ioctl($pid, "set 14 mode led_net0_rx");
// set port 15 to network send LED
pid_ioctl($pid, "set 15 mode led_net0_tx");
Вы можете заблокировать или разблокировать управление выходными портами при помощи команды pid_ioctl. Когда выходная блокировка включена, выходные порты не могут быть управляемы до тех пор, пока они не будут разблокировать.
pid_ioctl($pid, "set N1[-N2] lock"); // lock
pid_ioctl($pid, "set N1[-N2] unlock"); // unlock
※ Внимание: Цифровые I/O порты могут могут быть контролируемы по умолчанию. Однако, блокировка вывода автоматически включается портами, которые используются совместно с ST, UART, SPI и I2C (если они используются).