Meaning of "bidirectional level shifter on the module" on Colibri i.MX8X SOM pins 144 and 146

The Colibri i.MX8X data sheet says of pins 144 and 146 “tightly coupled with M4 core, bidirectional level shifter on the module”

What exactly does this mean please? I ask because on pausing in U-Boot, when looking at the pins with a 'scope, sometimes one is at 3.3V and the other appears to be floating, whereas on another boot they will be the other way round. This is suggesting to me that perhaps the “bidirectional level shifter” isn’t sure which way round it should be.

Is there something more going on as well, in that Colibri iMX8X Cortex M4 FreeRTOS refers in several places to UART B being used for M4 output as well/instead of pins 144 and 146, yet according to the carrier schematic UART B is supposed to be connected to different SOM pins (36 and 38 I believe) which can’t be driven by the M4?

As illustrated in the datasheet, pins 144 and 146 on connector X1 are connected to the SCU_GPIO0_00/SCU_GPIO0_01 on the iMX8X’s OSC balls.
These balls operate at 1.8V signal levels. To avoid damage from applying a 3.3V voltage, these pins are linked to X1 connector through a bidirectional 1.8V ↔ 3.3V level shifter

The UART_B is not tightly coupled with the M4 core and you can use it as a general purpose UART

Thanks Alex. So, just to make sure I am clear, UART_B is not connected to pins 144 and 146 in any way?

How does the bidirectional level shifter “know” which way to operate (i.e. whether for example pin 144 is an input or an output)? For me, something seems to be happening on power up (perhaps due to the high impedance of the 'scope probe?) where this decision varies. I am concerned because I don’t want the level shifter and USB<->TTL serial device both driving the X8 (on Colibri carrier) pin at the same time.

Each iMX8X ball can be configured for several alternative function.

The pins 144 and 146 can be configured to function as UART_A (ADMA.UART3), but this would necessitate altering the pin multiplexing. By default, the UART_A RX/TX signals are accessible on pins 33 and 35, and UART_B is on pins 36 and 38.

Regarding your concern:
“I don’t want the level shifter and the USB ↔ TTL serial device to both drive the X8 pin (on the Colibri carrier) at the same time.”

I’m not entirely clear on what you are referring to here. Could you specify what X8 is and which Colibri carrier you are discussing? There are no level shifters neither on X1 pins 33/35 nor on X1 pins 36/38 because the related iMX8 balls are part of the 3.3V power domain, eliminating the need for level shifting. For information on the functionality of the level shifter, please consult its datasheet.

Thanks Alex. My confusion re 144 and 146 and the M4 was with the thread I linked to mentioning UART_B with respect to these lines. I am now clear that there is no connection between 144 and 146 and UART_B.

Thank you for the link to the datasheet for the level shifter. I now understand how it can be bidirectional without needing to “know” which way the pins are being driven, and that there will be no issue with connecting the USB<->TTL serial adapter to pins 144 and 146.

It is still a bit odd that the state of the pins after power on with the 'scope connected is inconsistent but I guess that we end up with two weak drives (the level shifter and the micro) until the pin is configured in the device tree. In any case, the fundamental point which you have made is that it doesn’t really matter - the bidirectional level shifter will reflect the correct state once the pin is being driven properly in either direction.