# EC200M-CN模块使用

## 编译

### 选择合适的单板

``` shell
make k230_canmv_01studio_defconfig
```

### 将所需配置打开

``` shell
make rtsmart-menuconfig                                         #执行该命令后，将下述的配置打开
```

``` shell
Symbol: CHERRY_USB_HOST_ENABLE_CLASS_CDC_ECM [=n]
Type  : boolean
Prompt: Enable cdc ECM
   Location:
     -> Components Configuration
       -> Enable CherryUSB (ENABLE_CHERRY_USB [=y])
 (1)     -> Enable CherryUSB Host (ENABLE_CHERRY_USB_HOST [=y])
   Defined at components/Kconfig:109
   Depends on: ENABLE_CHERRY_USB [=y] && ENABLE_CHERRY_USB_HOST [=y]
```

``` shell
 Symbol: CHERRY_USB_HOST_ENABLE_CLASS_SERIAL [=n]
 Type  : boolean
 Prompt: Enable SERIAL
   Location:
     -> Components Configuration
       -> Enable CherryUSB (ENABLE_CHERRY_USB [=y])
 (1)     -> Enable CherryUSB Host (ENABLE_CHERRY_USB_HOST [=y])
   Defined at components/Kconfig:93
   Depends on: ENABLE_CHERRY_USB [=y] && ENABLE_CHERRY_USB_HOST [=y]

 Symbol: CHERRY_USB_HOST_ENABLE_CLASS_SERIAL_EC200M [=n]
 Type  : boolean
 Prompt: Enable serial EC200M
   Location:
     -> Components Configuration
       -> Enable CherryUSB (ENABLE_CHERRY_USB [=y])
         -> Enable CherryUSB Host (ENABLE_CHERRY_USB_HOST [=y])
 (2)       -> Enable SERIAL (CHERRY_USB_HOST_ENABLE_CLASS_SERIAL [=n])
   Defined at components/Kconfig:99
   Depends on: ENABLE_CHERRY_USB [=y] && ENABLE_CHERRY_USB_HOST [=y] && CHERRY_USB_HOST_ENABLE_CLASS_SERIAL [=n]
```

### 编译代码后下载固件至单板

``` shell
make
```

## EC200M-CN使用流程

### 准备EC200M-CN模块

#### 给模块安装好天线

![Enable DSI Debuger](https://www.kendryte.com/api/post/attachment?id=481)

#### 将sim卡插入模块

![Enable DSI Debuger](https://www.kendryte.com/api/post/attachment?id=480)

### 将模块插入USB口

### 拨号上网

``` shell
msh />rd /dev/ttyUSB1                                       #会开启一条读线程，读取AT指令返回的结果，默认读满150字节就自动退出
RDY


+CFUN: 1

+CPIN: READY


+QUSIM: 1

+QIND: SMS DONE

+QIND: PB DONE

msh />wr /dev/ttyUSB1 AT+qnetdevctl=1,1,1                   #下发拨号AT指令
msh />AT+qnetdevctl=1,1,1

OK


+QNETDEVSTATUS: 1


msh />ping qq.com                                           #可ping通qq.com或者www.baidu.com
60 bytes from 112.60.14.252 icmp_seq=0 ttl=52 time=77 ms
60 bytes from 112.60.14.252 icmp_seq=1 ttl=52 time=45 ms
60 bytes from 112.60.14.252 icmp_seq=2 ttl=52 time=42 ms
60 bytes from 112.60.14.252 icmp_seq=3 ttl=52 time=41 ms
```

## EC200M-CN调试

### 读写命令

EC200M-CN模块枚举之后，有三个ttyUSB接口，分别为 /dev/ttyUSB0，/dev/ttyUSB1，/dev/ttyUSB2，我们下发AT指令是通过/dev/ttyUSB1

wr /dev/ttyUSB1 [data] 这个命令就是用来下发AT指令，会直接打开设备，下发命令，然后关闭设备

rd /dev/ttyUSB1 这个命令会起一条读取线程阻塞读取AT指令的返回结果，默认它读取完150个字节后就自动退出了，可以通过 list_thread命令查看该线程是否还在，如果已经退出，可以重新启动。

``` shell
msh />list_thread
thread               pri  status      sp     stack size max used left tick  error
-------------------- ---  ------- ---------- ----------  ------  ---------- ---
rd                    15  suspend 0x00000648 0x00000800    78%   0x0000000a OK
```

### ifconfig命令

插入模组之后，我们可以通过ifconfig来查看当前网卡是不是已经有节点出现了

``` shell
msh />ifconfig
network interface device: u0 (Default)
MTU: 1500
MAC: ae 0c 29 a3 9b 6d
FLAGS: UP LINK_UP INTERNET_DOWN DHCP_ENABLE ETHARP BROADCAST IGMP
ip address: 192.168.43.100
gw address: 192.168.43.1
net mask  : 255.255.255.0
dns server #0: 192.168.43.1
dns server #1: 0.0.0.0
```

### AT指令

#### 查询网卡模式

EC200M-CN硬件模块支持两种网卡模式，分别是ECM和RNDIS，默认是ECM模式，固而我们不需要修改，查询是否正确即可

返回"usbnet",1表示当前在ECM网卡模式，返回"usbnet",3表示当前在RNDIS网卡模式

``` shell
msh />wr /dev/ttyUSB1 AT+QCFG="usbnet"
msh />AT+QCFG="usbnet"
+QCFG: "usbnet",1

OK

```

#### 设置网卡模式

因为我们使用ECM网卡模式，默认不需要修改，但如果该模块被其他用户修改过，我们可以修改回ECM模式，但修改之后需要重启模块

``` shell
msh />wr /dev/ttyUSB1 AT+QCFG="usbnet",1                    #设置为ECM网卡模式
msh />AT+QCFG="usbnet",1
OK


msh />wr /dev/ttyUSB1 AT+CFUN=1,1                           #下发指令重启该模块,也可以直接给板子上下电
msh />AT+CFUN=1,1

OK

```

#### 查询SIM卡状态

将插入SIM卡的模块连接到系统之后，我们可以通过以下指令来查看SIM卡状态，如果状态不对的话，尝试拔插SIM卡或者换一个SIM卡

``` shell
msh />wr /dev/ttyUSB1 AT+CPIN?
msh />AT+CPIN?
+CPIN: READY

OK

```
