Предыстория : Недавно я получил Raspberry Pi 4 Model B и Protoneer RPI CN C Hat , которым он управляет через последовательный порт ( /dev/ttyAMA0
). После того, как я собрал все это вместе, и он вообще не работал (либо в Minicom , либо в bCN C), я постепенно пытался сосредоточиться на источнике эта проблема. Мой осциллограф показывает, что я могу управлять соответствующими выводами при использовании их как GP IOs, поэтому я не подозреваю о фундаментальной проблеме с оборудованием. Однако я совершенно не могу вызвать отклик контактов при использовании их в качестве последовательного порта. Я написал приведенную ниже программу C, чтобы максимально точно охарактеризовать проблему.
Проблема : У меня есть последовательный порт /dev/ttyAMA0
, и он не работает.
$ sudo cat /proc/tty/driver/ttyAMA
serinfo:1.0 driver revision:
0: uart:PL011 rev2 mmio:0xFE201000 irq:34 tx:59596 rx:3105 RTS|CTS|DTR
$ ls -l /dev/ttyAMA0
crw-rw---- 1 root dialout 204, 64 Jul 11 08:24 /dev/ttyAMA0
$ groups
pi adm dialout cdrom sudo audio video plugdev games users input netdev gpio i2c spi
$ dmesg | grep tty
[ 0.000258] console [tty0] enabled
[ 0.420424] fe201000.serial: ttyAMA0 at MMIO 0xfe201000 (irq = 34, base_baud = 0) is a PL011 rev2
[ 0.425685] fe215040.serial: ttyS0 at MMIO 0x0 (irq = 36, base_baud = 62500000) is a 16550
[ 1.857049] systemd[1]: Created slice system-getty.slice.
$ echo hello | cat - > /dev/ttyAMA0
cat: write error: No space left on device
Я могу успешно open()
это, но когда я использую select()
, чтобы дождаться, пока он станет доступным для записи, время истечет. Когда я все равно пытаюсь писать на него, write()
успешно записывает 0 байт.
Вывод:
$ gcc -Wall -Werror -std=gnu17 -o serial-test serial-test.c
$ ./serial-test
select: fd did not become writeable within 5 seconds
write: wrote 0 bytes
Я не мастер последовательного порта. Я буду счастлив провести любой предложенный вами эксперимент. Пожалуйста, помогите мне.