• 正文
  • 相关推荐
申请入驻 产业图谱

【技术分享】M6G2C-128LI适配4G模块EC200G-CN

3小时前
83
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

导读

本文基于M6G2C-128LI核心板内核源码,完成EC200G-CN 4G模块驱动适配,配置ECM拨号网络方案,梳理内核编译、参数调试流程,实现模块稳定联网,为我司M6G2C/M6Y2C等系列核心板产品的4G模块移植 提供实践参考。

M6G2C核心板产品简介

M6G2C是ZLG致远电子精心设计,采用板对板连接器接口的低功耗、高性能的嵌入式核心板。基于NXP的Cortex®-A7内核i.MX6UL处理器,主频高达528MHz,集成了DDR3、NandFlash、硬件看门狗等外设。同时,产品自带8路UART、2路USB OTG、2路CAN-bus、2路以太网等丰富的工业控制通讯接口。

软硬件准备

1. 软件方面

安装好虚拟机的电脑(VMware Workstation 12及以上最佳,电脑配置越高越好);

M6G2C的内核源码linux-src-b85fbbf.tar.gz(详见光盘资料,找FAE索取);

虚拟机镜像(找FAE索取)。

2. 硬件方面

EPC-6G2C-L评估套件1套(可官网旗舰店购买);

网线1根;

USB转232调试串口1个;

工业接头12V@2A输出的适配器1个;

读卡器1个,TF卡1张(使用TF卡烧录);

4G模块 EC200G-CN 1个;

SIM卡 1张;

USB转minipci转接板 1个。

EC200G-CN适配步骤

1. 认识硬件

因为EPC-6G2C-L评估板上本身没有minipcie座子,所以需要插入USB转minipcie转接板,转接板上再插好4G模块 EC200G-CN以及SIM卡。

给评估板上电,插入网线,使用ssh登录调试,ssh登录账号:root,密码:root。登录到板子系统之后,执行以下指令:

[root@EPC-M6G2C ~]# lsusbBus 001 Device 003: ID 2c7c:0904Bus 001 Device 001: ID 1d6b:0002[root@EPC-M6G2C ~]# ls /dev/ttyUSB*ls: /dev/ttyUSB*: No such file or directory

可以看到 lsusb 能够识别到已经接入4G模块,硬件连接正常,vid 2c7c;pid 0904。因为目前还没进行4G模块的适配,所以此时文件系统还没生成/dev/ttyUSB*节点。

2. 配置工具链,编译内核

默认大家已经安装好虚拟机并打开我司制作好的Ubuntu镜像文件,并且已经下载M6G2C-128LI内核源码linux-src-c6a534d.tar.gz,并成功解压。

vmuser@ubuntu:~/M6G2C_A6G2C$ tar -zxvf linux-src-c6a534d.tar.gzvmuser@ubuntu:~/M6G2C_A6G2C$ cd A7-linux-src/vmuser@ubuntu:~/M6G2C_A6G2C/A7-linux-src$ ls built-zImage.shbuilt-zImage.sh

built-zImage.sh即为内核源码的编译脚本,注意在编译源码之前需要声明一下M6G2C-128LI的交叉编译工具链,确保使用了正确的工具链。

#编译内核./built-zImage.sh

3. 修改内核源码适配EC200G-CN

3.1 添加VID和PID

路径:drivers/usb/serial/option.c

staticconststructusb_device_idoption_ids[] = {#if 1 //Added by Quectel{ USB_DEVICE(0x2C7C, 0x0904) },#endif

3.2 使用 USBNet 驱动

路径:drivers/usb/serial/option.c

static int option_probe(struct usb_serial *serial, const struct usb_device_id *id) {  struct usb_wwan_intf_private *data;  ……#if 1   if (serial->dev->descriptor.idVendor == cpu_to_le16(0x2C7C)) {    __u16 idProduct = le16_to_cpu(serial->dev->descriptor.idProduct);    struct usb_interface_descriptor *intf = &serial->interface->cur_altsetting->desc;    if (intf->bInterfaceClass != 0xFF || intf->bInterfaceSubClass == 0x42) {      //ECM, RNDIS, NCM, MBIM, ACM, UAC, ADB      return -ENODEV;    }    if ((idProduct&0xF000) == 0x0000) {      //MDM interface 4 is QMI      if (intf->bInterfaceNumber == 4 && intf->bNumEndpoints == 3      && intf->bInterfaceSubClass == 0xFF &&      intf->bInterfaceProtocol == 0xFF)      return -ENODEV;    }  }#endif    /* Store device id so we can use it during attach. */    usb_set_serial_data(serial, (void *)id);    return 0;}

3.3 添加 Reset-resume 机制

路径:drivers/usb/serial/option.c

staticstructusb_serial_driveroption_1port_device = {  ……  #ifdef CONFIG_PM  .suspend = usb_wwan_suspend,  .resume = usb_wwan_resume,  #if 1 //Added by Quectel  .reset_resume = usb_wwan_resume,  #endif  #endif}

3.4 添加零包机制

路径:drivers/usb/serial/usb_wwan.c

static struct urb *usb_wwan_setup_urb(struct usb_serial *serial, int endpoint,int dir, void *ctx, char *buf, int len,void (*callback) (struct urb *)){……  usb_fill_bulk_urb(urb, serial->dev,  usb_sndbulkpipe(serial->dev, endpoint) | dir,  buf, len, callback, ctx);  #if 1 //Added by Quectel for zero packet  if (dir == USB_DIR_OUT) {    structusb_device_descriptor *desc = &serial->dev->descriptor;    if (desc->idVendor == cpu_to_le16(0x2C7C))      urb->transfer_flags |= URB_ZERO_PACKET;  }  #endif  return urb;}

3.5 修改内核配置并编译

./built-zImage.sh #脚本中会执行make menuconfig

进入make menuconfig界面,启用以下选项(设置为*),将USB 转串口 option 驱动、ECM驱动编译到内核镜像:

#USB 转串口 optionCONFIG_USB_SERIALCONFIG_USB_SERIAL_QUALCOMMCONFIG_USB_SERIAL_IPWCONFIG_USB_SERIAL_OPTION#ECM驱动ONFIG_USB_NET_DRIVERSUSB_NET_RNDIS_WLAN

4. ECM拨号测试

烧录上面编译出来的新内核,烧录成功之后,板子启动,可以看到驱动正常加载,并且/dev/ttyUSB设备节点正常生成。

通过查看4G模块的手册,可以知道EC200G-CN的 /dev/ttyUSB0 是AT命令交互接口。

执行以下命令,设置拨号模式为 ECM拨号,分配ip地址,尝试ping通外网。

#执行下述命令拨号上网busybox microcom /dev/ttyUSB0AT+CPIN?          #检查SIM卡,+CPIN: READY表示SIM卡状态正常AT+CSQ            #查看信号质量,第一个参数代表RSSI值,范围0~31,越大代表信号越好AT+QCFG="usbnet",1      #设置模组为ECM拨号模式#选择运营商,根据插入的sim卡类型来选择对应的命令AT+CGDCONT=1,"IP","CMNET"  #设置运营商为移动AT+CGDCONT=1,"IP","3GNET"  #设置运营商为联通AT+CGDCONT=1,"IP","CTNET"  #设置运营商为电信AT+QNETDEVCTL=1,1,1      #手动拨号Ctrl+X退出microcom#分配ip,ping外网udhcpc -i usb0ifconfig usb0ping -c 5 baidu.com

拨号成功,分配IP地址成功,ping通baidu.com。

4G模组只有第一次使用的时候需要配置参数,后续使用无需重复配置,一上电就可以开始拨号。

如果想停止拨号,执行以下命令:

busybox microcom /dev/ttyUSB0AT+QNETDEVCTL=0Ctrl+X退出microcom

5. 注意事项

本文使用的是外接的USB转Minipcie转接板,插到USB A口之后,默认就正常供电,模块进入工作状态。但是一般情况下,在底板上设计4G模块Minipcie座子的时候,往往会有供电控制脚、飞行模式控制脚、复位引脚等等。记得要配置这些控制脚到正确的电平状态,才能让4G模块正常上电,正常工作。

M6G2C Cortex®-A7工控核心板
低功耗、高主频

小体积、应用更灵活

内置AWorksOS工业智能物联开发平台

 

致远电子

致远电子

广州致远电子股份有限公司成立于2001年,注册资金5000万元,国家级高新技术认证企业,广州市高端工控测量仪器工程技术研究开发中心,Intel ECA全球合作伙伴和微软嵌入式系统金牌合作伙伴。

广州致远电子股份有限公司成立于2001年,注册资金5000万元,国家级高新技术认证企业,广州市高端工控测量仪器工程技术研究开发中心,Intel ECA全球合作伙伴和微软嵌入式系统金牌合作伙伴。收起

查看更多

相关推荐

登录即可解锁
  • 海量技术文章
  • 设计资源下载
  • 产业链客户资源
  • 写文章/发需求
立即登录