On Thu, 31 Aug 2023, Brook Milligan wrote:
I have attached the test program below, and would appreciate more eyes on it [...]
That looks OK apart from a few minor issues: - If you want to turn off non-blocking, use the standard idiom instead of fcntl(fd,F_SETFL,0): int flg = fcntl(fd, F_GETFL, 0); fcntl(fd, F_SETFL, flg & ~O_NONBLOCK); - Call cfmakeraw() _before_ changing settings (not after) because it modifies some bits (eg. CS8, ~PARENB) itself (see: src/lib/libc/termios/cfmakeraw.c)
However, a write fails and hangs the board hard: no keyboard response, no response to pings.
As the others have said, this looks like a kernel issue. Apropos which: from your `am335x-boneblack-comm_cape.dts' file: ``` &am33xx_pinmux { bborg_comms_rs485_pins: pinmux_comms_rs485_pins { pinctrl-single,pins = < 0x074 (PIN_OUTPUT | MUX_MODE6) /* P9_13: gpmc_wpn.uart4_txd_mux2 */ 0x070 (PIN_INPUT | MUX_MODE6) /* P9_11: gpmc_wait0.uart4_rxd_mux2 */ >; }; }; ``` Is that `RS-485' there correct? Shouldn't it be UART or RS-232 or something? Following the links for the Comms cape from beagleboard.org, I landed here: https://elinux.org/Beagleboard:BeagleBone_cape_interface_spec#UART where the `BONE-UART4.dts' has this: ``` &ocp { P9_13_pinmux { pinctrl-0 = <&P9_13_uart_pin>; }; /* UART TX*/ P9_11_pinmux { pinctrl-0 = <&P9_11_uart_pin>; }; /* UART RX*/ }; &bone_uart_4 { status = "okay"; }; ``` There is also the `BB-UART4-00A0.dts' file here (where you got your .dts from): https://github.com/beagleboard/bb.org-overlays/blob/master/src/arm/BB-UART4-00A0.dts with different contents: ``` /* * Free up the pins used by the cape from the pinmux helpers. */ &ocp { P9_13_pinmux { status = "disabled"; }; /* P9_13: uart4_txd */ P9_11_pinmux { status = "disabled"; }; /* P9_11: uart4_rxd */ }; &am33xx_pinmux { bb_uart4_pins: pinmux_bb_uart4_pins { pinctrl-single,pins = < AM33XX_PADCONF(AM335X_PIN_GPMC_WPN, PIN_OUTPUT, MUX_MODE6) /* P9_13 gpmc_wpn.uart4_txd_mux2 */ AM33XX_PADCONF(AM335X_PIN_GPMC_WAIT0, PIN_INPUT, MUX_MODE6) /* P9_13 gpmc_wait0.uart4_rxd_mux2 */ >; }; }; &uart4 { /* sudo agetty 115200 ttyS4 */ status = "okay"; pinctrl-names = "default"; pinctrl-0 = <&bb_uart4_pins>; }; ``` No idea which is right (not an ARM-guy!). The folks on port-arm@ would know. HTH, -RVP