As you may or may not be aware, the Nitrogen6X and Sabre Lite boards are very similar.
With a handful of caveats, you can boot a Nitrogen6X using an image created for the Sabre Lite.
We’ve also put together a detection mechanism that will allow those differences to be handled
in the start-up of U-Boot and Linux. In this post, we’ll walk through the differences in detail,
with references to the sources.
The source of the differences stems from the addition of the TWL127X WiFi-Bluetooth
module to the Nitrogen6X. That device uses an SDIO channel to communicate with the WiFi part
and a UART to communicate with the Bluetooth component. Because of this, we needed to free up
another SDIO channel, and the most convenient was SD2.
Unfortunately, the SD2 pads are used to communicate with the SGTL5000 audio codec
through AUDMUX channel 4. On Nitrogen6X, we moved these connections to previously unused
Other, more minor changes include:
- We moved the PHY Reset signal from EIM_D23 (GPIO3:23) to ENET_RXD0 (GPIO1:27)
- Both SD cards are microSD, so there’s no write-protect pin on SDHC3
- We’re using different ethernet jacks, so the PHY address has changed
The Linux code to detect a Nitrogen6X is in this patch. It defines a routine is_nitrogen6w() that returns non-zero if running on a Nitrogen6X and zero if running on a Sabre Lite. That patch also adds a printk statement so you can see the result by running dmesg.
The next patch on our boundary-L3.0.15_12.04.01 branch shows how we re-route the SGTL5000‘s pins to AUDMUX3 from AUDMUX4 and also routes the AUDMUX3 channel to pads CSI0:4-7, which are unused on Sabre Lite.
The PHY Reset pin is not currently touched by Linux. U-Boot configures the pad and de-asserts both pins in this patch.
SD Card write protect pins
The full-sized SD card on Sabre Lite is connected to SD channel SDHC3. On the Nitrogen6X, this channel is a microSD card, which doesn’t have a write-protect pin. This patch contains fixup code for SDHC3. It also removes the write-protect pin designation for SDHC4, since neither Sabre Lite nor Nitrogen6X have a connection for it.
The Sabre Lite uses a dual-stack USB+Ethernet connector to save space. Furthermore, the Nitrogen6X supports Power Over Ethernet (PoE) and the RJ-45 connectors which support that are slightly different than those that don’t. Because the PHY samples the LED lines to determine the PHY address, each of these communicates on a different address.
Under Linux, this PHY detection is handled automatically.
To handle this under U-Boot, we’ve added support for a bit mask of PHY addresses.
Addition of wl12xx WiFI module
WiFi support is added to Nitrogen6X in a few patches.
- This patch configures SD1 CLK as an output for the 32KHz oscillator.
- This patch enables the SDIO pads on SDHC2.
- and this patch enables the SDIO channel.
Addition of wl12xx Bluetooth
The Bluetooth channel on the wl12xx module is connected to the Nitrogen6X through UART3.
This patch enables UART3 on Nitrogen6X. It also disables UART3 on Sabre Lite because those signals aren’t routed.
Note that this patch is also needed in order to support changing the UART to 3Mbps.
The Nitrogen6X SOM module has quite a bit more flexibility in its’ pin assignments, but our reference carrier board exposes the same functionality as the Nitrogen6X using the same pads, so it’s 100% compatible with Nitrogen6X.
While reading this, you may have noticed that we’re hacking the Sabre Lite board-support files in both Linux and U-Boot to add Nitrogen6X support. We should really stop doing this, but will make that transition when we upgrade to a kernel which supports device trees.
Because of the chicken-and-egg problem, we’ll cut over to main-line U-Boot first, then we’ll follow up with the Linux kernel.
Stay tuned for details