For days now, I’ve been attempting to get the Waveshare RS485/CAN Cape to work on Beaglebone black.
I’ve used kernels 4.4.x and 4.9.x-ti mainline, and encountered the same problem.
The cape can use any UART (have been trying with one), and requires the use of pin P9_42 (0x164) as an RTS pin.
The dtbo (standard from https://github.com/beagleboard/bb.org-overlays which uses pin P9_27) loads fine using
echo BB-UART4-RS485 > /sys/devices/platform/bone_capemgr/slots
A “cat /sys/devices/platform/bone_capemgr” reveals the slot has been loaded correctly.
The HDMI has successfully been disabled.
Three problems arise:
The wavheshare cape requires the pulldown of both UART pins (I used UART4), as it leaves the pins floating through the RS485 transceiver if left standard. Now, the tricky thing is, if I enable BB-UARt4-RS485 in the /boot/uEnv.txt file, it loads the cape fine, but will not do pulldowns. If I allow the beaglebone to boot, then echo the BB-UART… at slots, the pulldown works and the transceiver can send a signal through, which is curious as it is exactly the same dtbo it loads, whether from uEnv.txt or echo.
Once loaded using echo after start, if I “cat /proc/tty/driver/serial” immediately after loading UART RS485 overlay, the flags I’m presented with are as below:
0: uart:8250 mmio:0x44E09000 irq:158 tx:8304 rx:0 RTS|CTS|DTR|DSR
1: uart:unknown port:00000000 irq:0
2: uart:unknown port:00000000 irq:0
3: uart:unknown port:00000000 irq:0
4: uart:8250 mmio:0x481A8000 irq:198 tx:0 rx:0 CTS|DSR
5: uart:unknown port:00000000 irq:0
Showing UART4 (the one I’m using) has not loaded the CTS and RTS flags appropriately. However, if, before performing the cat, I screen into ttyS4 or ttyO4 or echo some characters at the port, and then I perform the “cat” as above, the RTS and DTR flags are both raised on 4. Thereafter, if I screen in on ttyO4, and then quit, the RTS flag disappears after a cat. Weird.
However, regardless of these results, I’m left with the following main problem,
Regardless of the flag position or whether I use the default BB-UART4-RS485-00A0.dtbo from the source, the RTS pin does not switch (both P9_27 and P9_42 are unresponsive to any efforts to communicate on the UART4, where the UART transmits as evidenced by the oscilliscope, but the oscilliscope shows that the RTS pin P9_42/27 does not move at all). I need to get pin 9_42 to switch for RTS during uart, else this cape (and the beaglebone) are useless to me.
After copious amounts of time reading up on this, it seems that its a common problem, and something to do with the OMAP serial driver vs the 8250 driver malfunctioning? If someone could provide some insight to the problem, or a guide on how to get RTS working on this Beaglebone I’d be very appreciative.