Почему последовательный порт моего Raspberry Pi не может быть записан? write () записывает нулевые байты. select () истекает - PullRequest
1 голос
/ 11 июля 2020

Предыстория : Недавно я получил 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

Я не мастер последовательного порта. Я буду счастлив провести любой предложенный вами эксперимент. Пожалуйста, помогите мне.

1 Ответ

3 голосов
/ 11 июля 2020

относится к Как мне заставить последовательную работу на Raspberry Pi3 (или более поздней модели) :

miniUART теперь доступен на / dev / ttyS0

, поэтому вам нужно писать /dev/ttyS0, а не /dev/ttyAMA0

...