Hello,
I have an application that uses UART2. It runs fine under Debian 7 (“Wheezy”) however it doesn’t under Debian 8 (“Jessie”, kernel: 4.1.15-ti-rt-r43); nothing arrives at the corresponding tty file (/dev/ttyO2).
For enabling UARTs I declared
cape_enable=capemgr.enable_partno=BB-UART2 (Debian 7)
cape_enable=bone_capemgr.enable_partno=BB-UART2 (Debian 8)
in /boot/uEnv.txt.
(Note that when I use UART4 instead of UART2 my application runs fine under both operating systems.)
So I tried to figure out the changes from Debian 7 to Debian 8 by looking at the dts files. Looking at cape-universal-00A0.dts revealed:
Debian 7:
//
/ UARTs /
//
fragment@10 {
target = <&uart2>; /* really uart1 */
overlay {
status = “okay”;
pinctrl-names = “default”;
pinctrl-0 = <>;
};
};
fragment@11 {
target = <&uart3>; /* really uart2 */
overlay {
status = “okay”;
pinctrl-names = “default”;
pinctrl-0 = <>;
};
};
Debian 8 (/opt/source/bb.org-overlays/src/arm/cape-universal-00A0.dts):
//
/ UARTs /
//
fragment@10 {
target = <&uart2>; /* really uart1 */
overlay {
status = “okay”;
pinctrl-names = “default”;
pinctrl-0 = <>;
};
};
fragment@11 {
target = <&uart3>; /* really uart2 */
overlay {
status = “okay”;
pinctrl-names = “default”;
pinctrl-0 = <>;
};
};
Debian 8 (/opt/source/bb.org-overlays/src/arm/cape-universal-00A0.dts):
//
/ UARTs /
//
fragment@10 {
target = <&uart1>;
overlay {
status = “okay”;
pinctrl-names = “default”;
pinctrl-0 = <>;
};
};
fragment@11 {
target = <&uart2>;
overlay {
status = “okay”;
pinctrl-names = “default”;
pinctrl-0 = <>;
};
};
I don’t know what this exactly means, especially the “really uart”. Can anyone clarify here? Also there are two different cape-universal-00A0.dts files under Debian 8, which one is relevant? I see that in /boot/uEnv.txt the following line is enabled by default: cmdline=coherent_pool=1M quiet cape_universal=enable. Which dts (dtb) file does it refer to?
Comparing /opt/source/bb.org-overlays/src/arm/BB-UART4-00A0.dts and /opt/source/bb.org-overlays/src/arm/BB-UART2-00A0.dts under Debian 8 revealed that apparently both pins have a different multiplexer mode (uart2 → MUX_MODE1, uart4 → MUX_MODE6). Does this have any effect? I couldn’t find an equivalent dts file for Debian 7.
Probably related: from cape-universal-00A0.dts I see
UART2 (P9_21, P9_22):
[…]
P9_21_uart_pin: pinmux_P9_21_uart_pin {
pinctrl-single,pins = <0x154 0x31>; }; /* Mode 1, Pull-Up, RxActive */
[…]
P9_22_uart_pin: pinmux_P9_22_uart_pin {
pinctrl-single,pins = <0x150 0x31>; }; /* Mode 1, Pull-Up, RxActive */
UART4 (P9_11, P9_13):
[…]
P9_11_uart_pin: pinmux_P9_11_uart_pin {
pinctrl-single,pins = <0x070 0x36>; }; /* Mode 6, Pull-Up, RxActive */
[…]
P9_13_uart_pin: pinmux_P9_13_uart_pin {
pinctrl-single,pins = <0x074 0x36>; }; /* Mode 6, Pull-Up, RxActive */
Is this relevant / exhibiting different behavior?
I also realized that for UART2 there is an additional dts file under Debian 8: /opt/source/bb.org-overlays/src/arm/BB-UART2-RTSCTS-00A0.dts
For UART4 there is no equivalent. How is this related?
The pin multiplexing declarations in cape-universal-00A0.dts (P9_21_pinmux, P9_22_pinmux) seem to remain the same when going from Debian 7 to Debian 8.
So does anyone know the reason why UART2 behaves differently on Debian 8 (compared to Debian 7)?
Many thanks in advance! Cheers,
Dominik