作为一名小白鼠,经过我长达半个月的艰苦努力下,终于在板子上调通了EC20模块。话不多说,下面记录我碰到的问题和解决方案。
/*******************************************************************/
PC:windows7
Linux:ubuntu12.04
硬件开发板:OK6410
开发板内核版本:linux-3.0.1
硬件开发板:OK6410
/*******************************************************************/
一.开发前的准备工作
1)确保开发板,ubuntu,PC在同一局域网,以便于开发。在ubuntu下配置tftp服务器方便下载文件;在windows下配置CRT,使用串口连接开发板,使用ssh连接ubuntu;
2)了解EC20.
个人认为应该特别注意供电电压,我使用的模块标准供电为5V-2A。
EC20支持三种驱动:USB Serial Driver,GobiNet Driver,QMI WWANDriver。
Gobi 是高通公司开发的移动宽带调制解调器的一组芯片,目前有Sierra Wireless,中兴,华为以及高通公司等众多厂商使用。由此可见GobiNet Driver大多处理的也是相关的工作。
QMI:Qualcom Message Interface,即高通消息接口。QMI-WWAN驱动程序提供了对QMI端口和网络接口的访问,比原来的GobiNet更简单,此驱动程序并入上游内核。
USB Serial Driver:
3)在高通提供的文档中:
(1)如果你需要USB Serial Driver,确保option模块存在。
(2)如果你需要CDC ACM 驱动,确保cdc_acm模块存在。
(3)如果你需要GobiNet驱动,确保GobiNet存在。
(4)如果你需要QMI WWAN驱动,确保qmi_wwan存在。
4)USB驱动结构
USB设备驱动:控制USB设备如何与主机通信
USB核心:负责USB驱动管理,协议处理,设备热插拔控制,总线数据传输控制等
USB主机控制器驱动:控制插入其中的设备
/*******************************************************************/
二 根据文档修改驱动文件。
当设备连接上USB 串口驱动,驱动将会创建设备文件在/dev目录下,eg:ttyUSB0/ttyUSB1/ttyUSB2...
2.1 添加VID和PID
添加的目的是识别EC20,你需要添加信息到File:你的内核目录/drivers/usb/serial/option.c
当添加EC20模块时,你应该删除下面文件的一些信息:
2.2添加零包机制
零包机制的添加是为了完善USB协议。
2.3 添加重启恢复(add reset rusume)
当设备的MCU进入到挂起或者睡眠模式,一些USB主机控制器或者USB hub会掉电,并且当设备退出挂起/睡眠模式时,USB主机控制器/USB Hub 也无法恢复,而是断电重启。因此添加信息到文件:
2.4 使用GobiNet or QMI WWAN
如果你需要GobiNet 或者QMI WWAN驱动,你需要修改文件:你的内核目录/drivers/usb/serial/option.c
2.5 修改内核配置
Step1:
cd /你的内核目录
Step2:
make menuconfig
Step3:
开启你的USB串口选择项
Step4:
别的博主都会配置ppp选项,因为在后面会用到。
Step5:
保存配置退出,make。
会在目录:你的内核/arch/arm/boot下生成zImage,下载文件到arm开发板。
到此需要的操作结束。
/*******************************************************************/
可能碰到的问题:
1.EC20接上板子,板子重启
解决过程:给EC20外接电源,然后再插拔设备板子就不会重启了。
2.刚开始下载文件到板子,插上设备没有任何反应。
解决过程:刚开始想转变思路,以模块的方式加载到板子上,具体过程为:
注意到文档中是加载到linux中,我需要的是加载到板子上,所以在make的时候修改-C(-C作用是make之前先进入-C后面的路径执行make),这个过程感觉蛮复杂,总之碰到的问题也不少,以后再说。反正这种方式没有成功。
后来重新检查自己修改的内核代码,发现了错误,修改完,重新加载,有反应,如图:
这里貌似是驱动分配失败了,不明所以。查看/dev,发现添加了一个USBDEV设备文件,并没有ttyUSB,个人认为需要USB转串口驱动,可以在内核配置中选上即可。
3. 显示正常,但是会弹出错误:option:option_instat_callback:error -71
谷歌发现这个问题可能是供电问题造成的。感觉问题不大,就没有在管。
4. ttyUSB2测试
命令:cat /dev/ttyUSB2 &,echo -e "AT\r\n" > /dev/ttyUSB2
发现无响应。
解决过程:使用5v2A的电源供电,然后转换供电方式为USB供电,在不断电的情况下进行设备重新插拔,设备运转正常。