设为首页收藏本站
查看: 34101|回复: 3

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

[复制链接]

231

主题

64

回帖

2145

积分

管理员

积分
2145
玉米糊 发表于 2014-4-19 17:52:07 | 显示全部楼层 |阅读模式
AM335X开发板总共有6个串口,其中因为UART4和UART5与其他功能复用,所以我们在使用的时候,并不使用所有串口。但是有的时候,我们恰恰是要用到尽量多的串口,这种情况下,则可以简单的修改一下内核代码。UART4和UART5功能复用情况如下:
  • UART4 和 can 功能有冲突,默认情况下开启can功能。

can.jpg
  • UART5 和 K2/K3按键有冲突,默认情况下使用按键。
key.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、重新编译内核,并更新系统就可以了。

本文指导jakebo,整理gary。



回复

使用道具 举报

0

主题

2

回帖

20

积分

新手上路

积分
20
鸟叔 发表于 2014-4-22 14:45:00 | 显示全部楼层
好东西,支持一下,多多请教~
回复 支持 反对

使用道具 举报

231

主题

64

回帖

2145

积分

管理员

积分
2145
 楼主| 玉米糊 发表于 2014-4-24 14:10:09 | 显示全部楼层
另外,如果发现UART1和UART4还是不能使用,可能是因为UART1和UART4分别485和can功能有冲突,那么可以按如下方法焊下以下几个电阻:
  • UART1与RS485功能端口复用可卸载 R171、R175 两个电阻,
  • UART4和CAN功能端口复用可卸载 R178、R180 两个电阻。

其中R178和R180在UST_HOST_B口附近。
回复 支持 反对

使用道具 举报

410

主题

18

回帖

9567

积分

论坛元老

积分
9567
wtliu 发表于 2015-6-25 16:52:01 | 显示全部楼层
多谢楼主的分享。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录

本版积分规则

Archiver|手机版|小黑屋|米尔科技论坛   

GMT+8, 2024-3-29 01:50 , Processed in 0.062851 second(s), 22 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表