打印
[i.MX]

添加串口驱动

[复制链接]
4362|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yousuozi|  楼主 | 2014-3-12 15:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
想在原来基础上添加三个串口
手册上只找到uart1-uart4的external signal信息。。。uart5的就照着别的胡乱写的囧。。。
我在arch/arm/mach-mx6/board-mx6q_sabresd.h里添加了
/*UART2*/
MX6Q_PAD_EIM_D26_UART2_TXD,
MX6Q_PAD_EIM_D27_UART2_RXD,
/*UART4*/
MX6Q_PAD_KEY_COL0_UART4_TXD,
MX6Q_PAD_KEY_ROW0_UART4_RXD,

/*UART5 */ (这个没有找到uart5的external signal那个表格 所以瞎写的 报错了 说undeclare(not in a founction))
MX6Q_PAD_KEY_COL0_UART5_TXD,
MX6Q_PAD_KEY_ROW_UART5_RXD,

另一个问题是,以uart4为例 ,既然CSI0_DAT13 和KEY_ROW0 两个pad都可以实现UART4_RXD功能的话 这里应该选哪个呢?怎么选呢?还有pad是个什么概念呢??

请指教 非常感谢~

后来把第五个串口去掉了,把编译出的镜像下道板子里,在minicom下通过以下命令分别对开发板4个串口进行操作
echo 123 > /dev/ttymxc*
cat /dev/ttymxc*

然后用cat /proc/tty/driver/IMX-uart命令查看驱动 显示如下:

0: uart:IMX mmio:0x02020000 irq:58 tx:6849 rx:524 RTS|DTR|DSR|CD               
1: uart:IMX mmio:0x021E8000 irq:59 tx:10 rx:0 DSR|CD                           
2: uart:IMX mmio:0x021EC000 irq:60 tx:10 rx:0 DSR|CD                           
3: uart:IMX mmio:0x021F0000 irq:61 tx:15 rx:15 DSR|CD

是不是说明只有UART1和UART4可以正常收发呢?2和3只有发送 没有接收 是这两个口没有被驱动起来么?

这样可以检测驱动加载成功与否么?

相关帖子

沙发
FSL_TICS_Rita| | 2014-3-13 16:43 | 只看该作者
楼主你好,你需要修改如下5个文件的内容,分别是board-mx6q_sabresd.h、board-mx6q_sabresd.c、platform-imx-uart.c、 clock.c、mx6.h修改如下:
1.board-mx6q_sabresd.h
/*UART2*/
MX6Q_PAD_EIM_D26_UART2_TXD,
MX6Q_PAD_EIM_D27_UART2_RXD,

/*UART4*/
MX6Q_PAD_KEY_COL0_UART4_RXD,
MX6Q_PAD_KEY_ROW0_UART4_TXD,

/*UART5 */
MX6Q_PAD_KEY_COL0_UART5_RXD,
MX6Q_PAD_KEY_ROW_UART5_TXD,


2.board-mx6q_sabresd.c

static inline void mx6q_sabresd_init_uart(void)
{
imx6q_add_imx_uart(0,NULL);
imx6q_add_imx_uart(1,NULL);
imx6q_add_imx_uart(2,NULL);
imx6q_add_imx_uart(3,NULL);
imx6q_add_imx_uart(4,NULL);
}


3.platform-imx-uart.c
#define imx6q_imx_uart_data_entry(_id, _hwid)
imx_imx_uart_lirq_data_entry(MX6Q, _id, _hwid, SZ_4K)
imx6q_imx_uart_data_entry(0,1),
imx6q_imx_uart_data_entry(1,2),
imx6q_imx_uart_data_entry(2,3),
imx6q_imx_uart_data_entry(3,4),
imx6q_imx_uart_data_entry(4,5),
};


4.clock.c
_REGISTER_CLOCK("imx_uart.0", NULL, uart_clk[0]),
_REGISTER_CLOCK("imx_uart.1", NULL, uart_clk[0]),
_REGISTER_CLOCK("imx_uart.2", NULL, uart_clk[0]),
_REGISTER_CLOCK("imx_uart.3", NULL, uart_clk[0]),
_REGISTER_CLOCK("imx_uart.4", NULL, uart_clk[0]),

5.mx6.h

#define MX6Q_UART1_BASE_ADDR UART1_BASE_ADDR
#define MX6Q_UART2_BASE_ADDR UART2_BASE_ADDR
#define MX6Q_UART3_BASE_ADDR UART3_BASE_ADDR
#define MX6Q_UART4_BASE_ADDR UART4_BASE_ADDR
#define MX6Q_UART5_BASE_ADDR UART5_BASE_ADDR


#define MX6Q_INT_UART1 MXC_INT_UART1_ANDED
#define MX6Q_INT_UART2 MXC_INT_UART2_ANDED
#define MX6Q_INT_UART3 MXC_INT_UART3_ANDED
#define MX6Q_INT_UART4 MXC_INT_UART4_ANDED
#define MX6Q_INT_UART5 MXC_INT_UART5_ANDED

使用特权

评论回复
板凳
FSL_TICS_Rita| | 2014-3-13 16:46 | 只看该作者
以上仅做参考,具体的关于uart你可以查看文档i.MX_6Dual6Quad_Linux_Reference_Manual.pdf。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

7

主题

28

帖子

0

粉丝