年前调试了一下用mtk的uart1口来外接外部模块,拓展为2个com口。写此文的目前主要是整理一下思路。
拓展ic的型号是WK2114:
WK2114 原理框图
由上图可以看到首先得把主接口测试ok。
mtk6572的uart1默认是用来打log用的,所以要修改权限
chmod 0660 /dev/ttyMT0
chown system system /dev/ttyMT0
修改过后可以用在手机上装一个com口apk连接电脑测试,看看是否正常。一般这步是没问题的。
另外有可能会碰到不稳定的情况,这是要把默认的uart1的log功能关掉。
这两步完成保证主接口的功能正常,然后添加wk2114的驱动代码进行调试,原厂给过来的是在三星上面适配的驱动,在mtk上还要做简单的修改。
修改前首先看一下WK2114 引脚描述:
看到上面的图给人的感觉就是太简单了,只需要修改reset和eint就行了,其他的几个量一下就ok,确实是这样。但目前被几个问题挡住了:
1、电压方面由于mtk6572满足不了要求的vcc,所以有外接升IC,飞线那叫一个乱。量出来也能满足要求,但是有没有隐患我不好说。
2、工具方面,没示波器。
3、测试方法 。
现在需要重点解决的问题就是这个问题:
我在wk2114.c的源码中看到以下内容:
static struct uart_driver wk2xxx_uart_driver = {
owner: THIS_MODULE,
major: SERIAL_WK2XXX_MAJOR,
#ifdef CONFIG_DEVFS_FS
driver_name: "ttySWK",
dev_name: "ttysWK",
#else
driver_name: "ttySWK",
dev_name: "ttysWK",
#endif
minor: MINOR_START,
nr: NR_PORTS,
cons: NULL//WK2Xxx_CONSOLE,
};
后来查找资料,cons:NULL代表不能像前面那样用控制台来测试了。不知这里是否理解有误?肯请大师们指点。
另外还有一个问题:如果拓展模块上没有接终端设备,是否看不到完整的log。也就是说uart_ops->startup没有跑起来。
总之,目前找不到好的调试方法。
参考外部资料:
http://wenku.baidu.com/link?url=ZU2HGsUO6OokIvgeJ_AIICHCIOGz0vvt3swB4fxQoMmHhSq_qtw1pHe7tXHr2XpoxwSkagei4T7QdiBALfKjQzhL0YPhf3vnz3Q9wMXDaMG
linux设备驱动程序第三版 最后一章 tty驱动
端口启动函数startup()的原型为:
int (*startup)(struct uart_port *); 该函数申请所有中断资源,初始化底层驱动状态,并开启端口为可接收数据的状态。
UART,串口信息的查看(linux):
每个UART控制器包含一个波特率发生器,发送器,接收器和控制单元,发送和接收器包括FIFO和数据移位器,首先数据被写到FIFO中,然后复制到发送移位器中准备发送,最后数据被发送数据管脚移位发出。数据接收过程是:首先从接收管脚上面的到数据,然后将数据从移位器中复制到FIFO 中。
rs232串口通信接口:当通信距离较近时(<12m),可以使用电缆线直接连接,若距离较远,需附加调制解调器。
9个脚针的定义:
CDC数据载波检测,RXD接收数据,TXD发送数据,DTR数据中断准备,GND信号地,DSR数据设备准备好,RTS请求发送,CTS清楚发送,DELL振铃指示。
linux下查看串口信息
查看串口是否可用,可以对串口发送数据比如对com1口,echo lyjie126 > /dev/ttyS0
查看串口名称使用 ls -l /dev/ttyS* 一般情况下串口的名称全部在dev下面,如果你没有外插串口卡的话默认是dev下的ttyS* ,一般ttyS0对应com1,ttyS1对应com2,当然也不一定是必然的;
查看串口驱动:cat /proc/tty/drivers/serial
查看串口设备:dmesg | grep ttyS*
例如,在终端输入:dmesg | grep ttyS*显示从系统启动到现在串口插入拔出的信息,让后我在电脑上插入一个usb转rs232线,再在终端输入:dmesg | grep ttyS* ,会显示:usb 2-2.1:pl2303 converter now attached to ttyUSB0;可以通过此法确定我新插入的串口线对应的串口号。
结论:最终这个问题由于时间上的原因没有继续这样做,客户通过pl2303的方案来实现。由于pl2303 在linux上有现成的驱动,这就简单了。