lujun1013 发表于 2015-1-19 14:01

MYD-AM335X下Linux使用所有6个串口,包括UART4、UART5


AM335X开发板总共有6个串口,其中因为UART4和UART5与其他功能复用,所以我们在使用的时候,并不使用所有串口。但是有的时候,我们恰恰是要用到尽量多的串口,这种情况下,则可以简单的修改一下内核代码。UART4和UART5功能复用情况如下:
UART4 和 can 功能有冲突,默认情况下开启can功能。
http://bbs.myir-tech.com/data/attachment/forum/201404/19/175727xje6fejphkaak4pi.jpg

UART5 和 K2/K3按键有冲突,默认情况下使用按键。
http://bbs.myir-tech.com/data/attachment/forum/201404/19/175735gz4wfn4743zlufn4.jpg
注意:如果使用了uart4,那么与uart4有冲突的can功能就不能使用了。同理,使用了uart5后,K2/K3按键功能也不能使用了。

具体步骤
1、打开内核的文件:
$vi arch/arm/mach-omap2/board-am335xevm.c

2、添加uart4、uart5功能脚定义代码(如果没有)。
/* Module pin mux for uart3 */
static struct pinmux_config uart3_pin_mux[] = {
      {"spi0_cs1.uart3_rxd", OMAP_MUX_MODE1 | AM33XX_PIN_INPUT_PULLUP},
      {"ecap0_in_pwm0_out.uart3_txd", OMAP_MUX_MODE1 | AM33XX_PULL_ENBL},
      {NULL, 0},
};

/* Module pin mux for uart4 */
static struct pinmux_config uart4_pin_mux[] = {
      {"uart0_ctsn.uart4_rxd", OMAP_MUX_MODE1 | AM33XX_PIN_INPUT_PULLUP},
      {"uart0_rtsn.uart4_txd", OMAP_MUX_MODE1 | AM33XX_PULL_ENBL},
      {NULL, 0},
};

/* Module pin mux for uart5 */
static struct pinmux_config uart5_pin_mux[] = {
      {"mii1_col.uart5_rxd", OMAP_MUX_MODE3 | AM33XX_PIN_INPUT_PULLUP},
      {"rmii1_refclk.uart5_txd", OMAP_MUX_MODE3 | AM33XX_PULL_ENBL},
      {NULL, 0},

3、添加初始化串口4、5代码(如果没有),如下蓝色部分。
static void uart3_init(int evm_id, int profile)
{
      printk("--------uart3_init\n");

      /* Configure Uart3*/
      setup_pin_mux(uart3_pin_mux);
      return;
}

static void uart4_init(int evm_id, int profile)
{
      printk("--------uart4_init\n");

      /* Configure Uart4*/
      setup_pin_mux(uart4_pin_mux);
      return;
}

static void uart5_init(int evm_id, int profile)
{
      printk("--------uart5_init\n");

      /* Configure Uart4*/
      setup_pin_mux(uart5_pin_mux);
      return;
}

4、添加串口4、5的注册,如下蓝色代码,并注释掉can功能和keys按键功能,如下红色代码。
      {uart1_init,    DEV_ON_BASEBOARD, PROFILE_ALL},
      {uart2_init,    DEV_ON_BASEBOARD, PROFILE_ALL},
      {uart3_init,    DEV_ON_BASEBOARD, PROFILE_ALL},
      {uart4_init,    DEV_ON_BASEBOARD, PROFILE_ALL},
      {uart5_init,    DEV_ON_BASEBOARD, PROFILE_ALL},
//      {d_can_init,    DEV_ON_BASEBOARD, PROFILE_ALL},
//      {gpio_keys_init,DEV_ON_BASEBOARD, PROFILE_ALL},
      {gpio_led_init,DEV_ON_BASEBOARD, PROFILE_ALL},
      {NULL, 0, 0},

5、重新编译内核,并更新系统就可以了。

wukui1008 发表于 2015-3-23 17:09

这样真的可以吗我试了怎么就不行呢。。。。。

盈鹏飞科技 发表于 2015-3-23 18:55

还要这么麻烦吗?EVB-335X(2)为您解忧愁!将AM335X的最后一个引脚都用光了!资源分配非常合理!



mini1986 发表于 2015-4-3 09:28

搞电力的吧,用这么多串口

mini1986 发表于 2015-4-16 12:37

正在搞新产品,5个串口的......

一般首席 发表于 2017-8-23 09:41

学习了
页: [1]
查看完整版本: MYD-AM335X下Linux使用所有6个串口,包括UART4、UART5