Difference between revisions of "How to set up UART2 in J990"

From IGEP - ISEE Wiki

Jump to: navigation, search
Line 119: Line 119:
 
= Third way  =
 
= Third way  =
  
Third way: configure kernel sources. Configuration will be permanent. There are many ways to edit source code, but this tutorial is focused for igep0020 RC without IGEPv2 Expansion support.<br>
+
Third way: configure kernel sources. Configuration will be permanent. There are many ways to edit source code, this method is focused for igep0020 RC without IGEPv2 Expansion support.<br>  
  
 
=== Configure Kernel source code  ===
 
=== Configure Kernel source code  ===
Line 135: Line 135:
 
IGEP2_RC_GPIO_WIFI_NRESET, IGEP2_RC_GPIO_BT_NRESET,
 
IGEP2_RC_GPIO_WIFI_NRESET, IGEP2_RC_GPIO_BT_NRESET,
 
!opt); </pre>  
 
!opt); </pre>  
"igep00x0_wifi_bt_init" function initializes WIFI and Bluetooth peripherals. "opt" variable is used for disable Bluetooth in some cases: enabled (opt!=0) or disabled (opt==0). For example you can disable permanently it, replacing "opt" by 1:  
+
"igep00x0_wifi_bt_init" function initializes WIFI and Bluetooth peripherals. "opt" variable is used for disable Bluetooth in some cases: enabled (opt!=0) or disabled (opt==0). For example you can disable it permanently replacing "opt" by 1:  
 
<pre> else if (hwrev == IGEP2_BOARD_HWREV_C)
 
<pre> else if (hwrev == IGEP2_BOARD_HWREV_C)
 
igep00x0_wifi_bt_init(IGEP2_RC_GPIO_WIFI_NPD,
 
igep00x0_wifi_bt_init(IGEP2_RC_GPIO_WIFI_NPD,
Line 142: Line 142:
 
'''Disable UART2 default configuration:'''  
 
'''Disable UART2 default configuration:'''  
  
Go to [http://git.igep.es/?p=pub/scm/linux-omap-2.6.git;a=blob_plain;f=arch/arm/mach-omap2/board-igep0020.c;hb=refs/heads/linux-2.6.35.y $(kernel path)/arch/arm/mach-omap2/board-igep0020.c] and search "static struct omap_board_mux board_mux[] __initdata". Remove the following fields:  
+
Search again "static struct omap_board_mux board_mux[] __initdata". Remove the following fields:  
 
<pre> OMAP3_MUX(UART2_TX, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
 
<pre> OMAP3_MUX(UART2_TX, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
 
OMAP3_MUX(UART2_RX, OMAP_MUX_MODE0 | OMAP_PIN_INPUT), </pre>  
 
OMAP3_MUX(UART2_RX, OMAP_MUX_MODE0 | OMAP_PIN_INPUT), </pre>  

Revision as of 16:07, 26 January 2012

Overview

This How-To is meant to be a starting point for people to learn to set up UART2 for IGEPv2 J990 connector as quickly and easily as possible. In this how-to, we use Linaro Headless with Kernel 2.6.35.y. This How-To is focused for WIFI/BT versions.

More information about UART: here and here.

There are three modes to configure UART2 in J990: via user space (first way), editing only igep.ini (second way) or editing kernel source and compile it (third way).

NOTE: UART2 in j990 connector has CMOS voltages (0V-1V8).

Feedback and Contributing

At any point, if you see a mistake you can contribute to this How-To.

First way

First way: this mode has a issue, when your system reboot or shutdown you will need to configure again. Using user space to configure mux and disable bluetooth.

Configure IGEP

If you use a IGEPv2 Expansion Board, don't use modem for this tutorial

Disable Bluetooth:

Logging with root user via SSH or Serial cable.

Go to /sys/kernel/debug/omap_mux/

Set sdmmc2_dat5 to gpio137 (mode 4):

echo 0x004 > sdmmc2_dat5 

Revise that:

root@localhost:/sys/kernel/debug/omap_mux# cat sdmmc2_dat5
name: sdmmc2_dat5.gpio_137 (0x48002166/0x136 = 0x0004), b ah3, t NA
mode: OMAP_PIN_OUTPUT | OMAP_MUX_MODE4
signals: sdmmc2_dat5 | sdmmc2_dir_dat1 | cam_global_reset | sdmmc3_dat1 | gpio_137 | hsusb3_tll_stp | mm3_rxdp | safe_mode

Go to: /sys/class/gpio/

Check that gpio137 is in user space:

root@localhost:/sys/class/gpio# ls
export  gpio137  gpio138  gpio139  gpio170  gpio64  gpiochip0  gpiochip128  gpiochip160  gpiochip192  gpiochip32  gpiochip64  gpiochip96  unexport
root@localhost:/sys/class/gpio# 

If you don't have it, you should export gpio137:

echo 137 > /sys/class/gpio/export 

Set gpio137 to low value to disable bluetooth:

echo 0 > /sys/class/gpio/gpio137/value

Revise that:

root@localhost:/sys/class/gpio# cat /sys/class/gpio/gpio137/value 
0
root@localhost:/sys/class/gpio# 

Disable Bluetooth UART2 wires:

Go to /sys/kernel/debug/omap_mux/

Type:

echo 0x007 > uart2_cts
echo 0x007 > uart2_rts
echo 0x007 > uart2_rx
echo 0x007 > uart2_tx 

Revise that:

root@localhost:/sys/kernel/debug/omap_mux# cat uart2_cts 
name: uart2_cts.safe_mode (0x48002174/0x144 = 0x0007), b ab26, t NA
mode: OMAP_PIN_OUTPUT | OMAP_MUX_MODE7
signals: uart2_cts | mcbsp3_dx | gpt9_pwm_evt | NA | gpio_144 | NA | NA | safe_mode
root@localhost:/sys/kernel/debug/omap_mux# cat uart2_rts 
name: uart2_rts.safe_mode (0x48002176/0x146 = 0x0007), b ab25, t NA
mode: OMAP_PIN_OUTPUT | OMAP_MUX_MODE7
signals: uart2_rts | mcbsp3_dr | gpt10_pwm_evt | NA | gpio_145 | NA | NA | safe_mode
root@localhost:/sys/kernel/debug/omap_mux# cat uart2_rx 
name: uart2_rx.safe_mode (0x4800217a/0x14a = 0x0007), b ad25, t NA
mode: OMAP_PIN_OUTPUT | OMAP_MUX_MODE7
signals: uart2_rx | mcbsp3_fsx | gpt8_pwm_evt | NA | gpio_147 | NA | NA | safe_mode
root@localhost:/sys/kernel/debug/omap_mux# cat uart2_tx
name: uart2_tx.safe_mode (0x48002178/0x148 = 0x0007), b aa25, t NA
mode: OMAP_PIN_OUTPUT | OMAP_MUX_MODE7
signals: uart2_tx | mcbsp3_clkx | gpt11_pwm_evt | NA | gpio_146 | NA | NA | safe_mode
root@localhost:/sys/kernel/debug/omap_mux# 
 

Mode will be 7 (safe_mode)

Enable UART2 in J990:

Type:

echo 0x101 > mcbsp3_dx
echo 0x101 > mcbsp3_clkx
echo 0x101 > mcbsp3_fsx
echo 0x101 > mcbsp3_dr 

Revise that:

root@localhost:/sys/kernel/debug/omap_mux# cat mcbsp3_dx 
name: mcbsp3_dx.uart2_cts (0x4800216c/0x13c = 0x0101), b af6, t NA
mode: OMAP_PIN_INPUT | OMAP_MUX_MODE1
signals: mcbsp3_dx | uart2_cts | NA | NA | gpio_140 | hsusb3_tll_data4 | NA | safe_mode
root@localhost:/sys/kernel/debug/omap_mux# cat mcbsp3_clkx 
name: mcbsp3_clkx.uart2_tx (0x48002170/0x140 = 0x0101), b af5, t NA
mode: OMAP_PIN_INPUT | OMAP_MUX_MODE1
signals: mcbsp3_clkx | uart2_tx | NA | NA | gpio_142 | hsusb3_tll_data6 | NA | safe_mode
root@localhost:/sys/kernel/debug/omap_mux# cat mcbsp3_fsx  
name: mcbsp3_fsx.uart2_rx (0x48002172/0x142 = 0x0101), b ae5, t NA
mode: OMAP_PIN_INPUT | OMAP_MUX_MODE1
signals: mcbsp3_fsx | uart2_rx | NA | NA | gpio_143 | hsusb3_tll_data7 | NA | safe_mode
root@localhost:/sys/kernel/debug/omap_mux# cat mcbsp3_dr 
name: mcbsp3_dr.uart2_rts (0x4800216e/0x13e = 0x0101), b ae6, t NA
mode: OMAP_PIN_INPUT | OMAP_MUX_MODE1
signals: mcbsp3_dr | uart2_rts | NA | NA | gpio_141 | hsusb3_tll_data5 | NA | safe_mode
root@localhost:/sys/kernel/debug/omap_mux# 
 

Mode will be 1 (uart mode)

Second way

Second way: configure kernel via IGEP Xloader. Configuration will be permanent.

NOTE: Only configures UART2_TX(6) and UART2_RX(8). You can not use UART2_CTS(4) AND UART2_RTS(10) which are usually referred to as hardware flow control. For example you can use RS232 but not RS485 peripheral. Don't use minicom with hardware flow control enable.
Go to igep.ini file, replaced by or type this:

buddy=igep0022 
buddy.modem=yes 

Third way

Third way: configure kernel sources. Configuration will be permanent. There are many ways to edit source code, this method is focused for igep0020 RC without IGEPv2 Expansion support.

Configure Kernel source code

Disable TWL4030 PCM voice interface:

Default kernel  has disabled TWL4030 PCM voice interface output pins to high impedance, otherwise this module forces the level of mcbsp3_fsx (uart2_rx) and mcbsp3_clkx (uart2_tx) pins. To make sure, go to $(kernel path)/sound/soc/codecs/twl4030.c file already read:

	0x04, /* REG_VOICE_IF		(0xF)	*/

Disable bluetooth:

Go to $(kernel path)/arch/arm/mach-omap2/board-igep0020.c and search next line:

	else if (hwrev == IGEP2_BOARD_HWREV_C)
		igep00x0_wifi_bt_init(IGEP2_RC_GPIO_WIFI_NPD,
			IGEP2_RC_GPIO_WIFI_NRESET, IGEP2_RC_GPIO_BT_NRESET,
			!opt); 

"igep00x0_wifi_bt_init" function initializes WIFI and Bluetooth peripherals. "opt" variable is used for disable Bluetooth in some cases: enabled (opt!=0) or disabled (opt==0). For example you can disable it permanently replacing "opt" by 1:

	else if (hwrev == IGEP2_BOARD_HWREV_C)
		igep00x0_wifi_bt_init(IGEP2_RC_GPIO_WIFI_NPD,
			IGEP2_RC_GPIO_WIFI_NRESET, IGEP2_RC_GPIO_BT_NRESET,
			!1); 

Disable UART2 default configuration:

Search again "static struct omap_board_mux board_mux[] __initdata". Remove the following fields:

	OMAP3_MUX(UART2_TX, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
	OMAP3_MUX(UART2_RX, OMAP_MUX_MODE0 | OMAP_PIN_INPUT), 

Add the following fields at the same position:

	OMAP3_MUX(UART2_TX, OMAP_MUX_MODE7 | OMAP_PIN_INPUT),
	OMAP3_MUX(UART2_RX, OMAP_MUX_MODE7 | OMAP_PIN_INPUT),
	OMAP3_MUX(UART2_RTS, OMAP_MUX_MODE7 | OMAP_PIN_INPUT),
	OMAP3_MUX(UART2_CTS, OMAP_MUX_MODE7 | OMAP_PIN_INPUT), 

Enable UART2 in J990:

Add the following fields below "OMAP3_MUX(UART2_CTS, OMAP_MUX_MODE7 | OMAP_PIN_INPUT), " : 

	OMAP3_MUX(MCBSP3_DR, OMAP_MUX_MODE1 | OMAP_PIN_INPUT),
	OMAP3_MUX(MCBSP3_DX, OMAP_MUX_MODE1 | OMAP_PIN_INPUT),
	OMAP3_MUX(MCBSP3_FSX, OMAP_MUX_MODE1 | OMAP_PIN_INPUT),
	OMAP3_MUX(MCBSP3_CLKX, OMAP_MUX_MODE1 | OMAP_PIN_INPUT),

Compile kernel source code

Use this tutorial (Kernel) and this other (IGEPxloader) to install Linaro Headless with your custom kernel in SD card.  You can compile the IGEPxloader, but is not necessary.

Test UART2 in J990

UART2 J990 pins:


Pin UART Wire
4 UART2_CTS MCBSP3_DX
6 UART2_TX MCBSP3_CLKX
8 UART2_RX MCBSP3_FSX
10 UART2_RTS MCBSP3_DR


Test

Connect UART2_TX with UART2_RX. Use minicom to prove UART2 (/dev/ttyS1) :

minicom -D /dev/ttyS1

If you write characters and see the echo on the screen, you configure correctly UART.

Uart2 igepv2 j990 connector.png