4G通訊模塊在ARM平臺下的應用

4G模塊是鏈接物與物的重要載體,是終端設備接入物聯網的核心部件之一。隨着4G的普及,許多新興市場對4G通訊模塊的需求都在日益擴大,那麼在ARM平臺的嵌入式設備上如何快速的應用4G模塊呢?linux

4G通訊模塊把頻率接收器和信號增幅器等部件全都整合在一塊兒,實現了一體化。隨着工業發展,嵌入式設備接入網絡的需求日益增多,在沒有有線或WiFi等無線的環境下,直接經過4G通信模塊鏈接運營商網絡來接入互聯網不失爲一個好方法。所以,本文就爲讀者介紹一下基於ARM平臺的嵌入式設備在Linux下使用4G模塊的方法。ios

1、開發環境ubuntu

一、開發主機環境:vim

Ubuntu12.04(64位)、arm-fls-linux-guneabi-gcc系列交叉編譯鏈。數組

二、硬件清單:網絡

IoT-3960工控板、龍尚4G模塊U8300C或U8300W。app

三、軟件資源:編輯器

光盤EPC-280_283_287V1.04.iso中的內核源碼包:linux-2.6.35.3-fec60fa.tar.bz2(光盤內容可在致遠電子官網下載http://www.zlg.cn)。工具

2、硬件概述測試

IoT-3960L是廣州致遠電子股份有限公司以NXP i.MX287處理器爲核心開發的工業IoT網絡控制器,集成多路通訊接口,支持多種通訊協議,具備性價比高、功能豐富、工做穩定、兼容性強等特色,產品實物如圖1所示。

圖1 IoT-3960L工控板

經過自定義的Mini-PCIE接口,IoT-3960L可外擴3G、4G、GPRS、ZigBee、RFID等無線通訊模塊。本文外擴的是龍尚4G模塊,所用的型號如圖2所示。

圖2 龍尚4G模塊U8300C、U8300W

3、技術實現

一、解壓內核源碼

將 EPC-280_283_287 V1.04.iso 光盤中的linux-2.6.35..3-fec60fa.tar.bz2 源碼包複製到ubuntu系統的「~/」目錄下,將其解壓後可獲得linux-2.6.35.3目錄,參考命令以下:

vmuser@Linux-host:~$ tar -jxvf linux-2.6.35..3-fec60fa.tar.bz2

二、修改配置文件

在內核源碼目錄「drivers/gpio/」下的Kconfig文件中有設定了CONFIG_GPIO_M28X宏的默認配置,用vim編輯器打開這個Kconfig文件,搜索「GPIO_M28X」,找到其配置設定,將其修改成可獨立配置的選項,修改後的配置以下所示(紅色標識的爲修改部分):

config GPIO_M28X

tristate"GPIO support for MiniPCI-E slot control"

#depends onIoT_3960 || IoT_3962

help

Say yes here to enable the IoT_396x boardgpio driver.

三、修改內核編譯腳本

Linux源碼目錄下的build-kernel腳本文件主要用於切換內核默認配置,但因光盤中的該腳本文件設置不夠靈活,建議直接將build-kernel文本內容總體替換爲以下列表所示的代碼:

#!/bin/sh

echo "build menu, please select your choice:"

echo " 1 make clean"

echo " 2 config for EPC_28xA"

echo " 3 config for EPC_283 or EasyARM-i.MX283A"

echo " 4 config for EPC_287 or EasyARM-i.MX287A"

echo " 5 config for EPC_280 or EasyARM-i.MX280A"

echo " 6 config for IoT_3960"

echo " 7 config for IoT_3962"

echo " 8 config for A287_W128LI"

echo " 9 config for A287_WB128LI"

echo " a make menuconfig"

echo " b make uImage"

echo " c make zImage"

echo " d make modules"

echo " q exit"

make_distclean() {

echo "make distclean"

make clean

}

config_EPC_28xA() {

echo "EPC_28xA"

cp .config .config.bk

cp arch/arm/configs/EPC_28xA_defconfig .config

}

config_EPC_283B() {

echo "EPC_283B"

cp .config .config.bk

cp arch/arm/configs/EPC_283B_defconfig .config

}

config_EPC_287B() {

echo "EPC_287B"

cp .config .config.bk

cp arch/arm/configs/EPC_287B_defconfig .config

}

config_EPC_280() {

echo "EPC_280"

cp .config .config.bk

cp arch/arm/configs/EPC_280_defconfig .config

}

config_IoT_3960() {

echo "IoT_3960"

cp .config .config.bk

cp arch/arm/configs/IoT_3960_defconfig .config

}

config_IoT_3962() {

echo "IoT_3962"

cp .config .config.bk

cp arch/arm/configs/IoT_3962_defconfig .config

}

config_A287_W128LI() {

echo "A287_W128LI"

cp .config .config.bk

cp arch/arm/configs/A287_W128LI_defconfig .config

}

config_A287_WB128LI() {

echo "A287_WB128LI"

cp .config .config.bk

cp arch/arm/configs/A287_WB128LI_defconfig .config

}

make_uImage() {

make uImage

}

make_zImage() {

make zImage

}

make_modules() {

make modules

}

make_menuconfig() {

make menuconfig

}

read sel

echo "select $sel"

case $sel in

[1]) make_distclean;;

[2]) config_EPC_28xA;;

[3]) config_EPC_283B;;

[4]) config_EPC_287B;;

[5]) config_EPC_280;;

[6]) config_IoT_3960;;

[7]) config_IoT_3962;;

[8]) config_A287_W128LI;;

[9]) config_A287_WB128LI;;

[a]) make_menuconfig;;

[b]) make_uImage;;

[c]) make_zImage;;

[d]) make_modules;;

[q] | [Q]) exit 0;;

*) echo "ONLY accept 1~9,a~d/q/Q"

esac

(下拉可顯示更多代碼)

四、配置內核源碼

進入解壓後的 Linux 源碼根目錄,使用IoT-3960L 的默認內核配置,參考命令以下:

vmuser@Linux_host:~/ linux-2.6.35.3$ ./build-kernel

而後輸入6選擇Iot3960,若是是其餘工控板或開發套件,則選擇對應的選項便可,若是對應的Linux源碼根目錄下沒有.config文件,運行該步驟操做後會提示cp命令執行錯誤,直接忽略此錯誤便可。

工控板或開發套件使用USB接口來與龍尚4G模塊通訊,須要配置內核以支持USB轉串口功能。參考命令以下:

vmuser@Linux-host:~/ linux-2.6.35.3 $ make menuconfig

進入配置界面後,按回車鍵進入「Device Drivers --->」選項,配置完內核後,保存並退出內核配置操做。

五、修改&編譯內核源碼

對龍尚4G模塊,咱們須要在linux-2.6.35.3 目錄下對三個數組中的內容進行修改:

  • 使用vi 或者vim 命令打開drivers/gpio/gpio_m28x.c 文件,在all_gpios_info[ ]數組做中做修改;

  • 使用vi 或者vim 命令打開arch/arm/mach-mx28/mx28evk_pins.c 文件,在mx28evk_fixed_pins []數組中做修改;

  • 使用vi或者vim命令打開drivers/usb/serial/option.c 文件,在option_ids[]數組中做修改。

按上述操做修改完成以後,就能夠編譯內核了,內核編譯參考命令以下:

vmuser@Linux-host:~/ linux-2.6.35.3 $ make uImage

待內核編譯完成後,將生成的uImage 文件(可在arch/arm/boot 目錄下找到)燒寫到工控板或開發套件上,燒寫方法請參考《IoT-3960 用戶手冊.pdf》第6章的內容。

4、4G模塊測試

這裏主要介紹龍尚4G模塊的電話、網絡等控制接口以及IoT-3960L工控板對其操做的通訊流程。用於測試的工控板必須燒寫EPC-280_283_287 V1.04.iso 光盤中V1.03的uboot 及文件系統,由於其中包含必要的撥號上網工具。

一、電話控制接口

電話接聽和撥打命令如表1所示。經過向串口發送相應的命令就能夠實現電話的接聽和撥打。如:能夠向串口發送「ATD12345678901;nr」就能夠向12345678901撥打電話。

表1 電話撥打和接聽控制命令表

命令 語法及做用
ATD

撥打電話:ATD+電話+;rn」如ATD10010;後面分號

不能少,返回OK或ERROR

AT+COPS? 「AT+COPS?rn」檢測運營商,返回OK或ERROR
AT+CVHU=0和ATH 掛斷電話:「AT+CVHU=0rn」再發「ATHrn」
ATA 接聽電話:「ATAnr」

電話撥打接聽代碼執行流程如圖3所示。代碼首先會顯示可供使用的菜單,如電話撥打,短信接收等。等待用戶輸入參數,執行參數對應的流程。而後判斷是否執行成功,若是執行成功就會返回顯示菜單代碼處繼續執行下一下循環。

圖3 電話撥打接聽流程圖

二、網絡控制接口

4G模塊上網功能經過PPP撥號提供的接口鏈接網絡。在開發套件文件系統的「/etc/ppp」目錄下預置了能夠參考的撥號腳本。撥號成功後(執行PPP 撥號腳本),內核會生成PPP網絡設備。經過建立套接字就能夠訪問網絡。

三、演示程序實操

  • 使能4G模塊

默認內核啓動時,把4G模塊的復位引腳拉低,使模塊處於非工做的狀態。要想徹底使能模塊,運行/opt 目錄下的upmodule.sh 腳本便可。

此時板子的WWAN 這個LED 會出現閃爍的現象,閃爍頻率大概爲800 毫秒,而後設備開始入網,入網成功後,板子的WWAN 這個LED 的閃爍頻率變爲3 秒左右。同時,大概10 秒以後,板子開始檢測到USB 設備的插入,而後板子自動安裝USB 轉串口的驅動,驅動安裝完成後,會在板子的/dev 目錄下自動生成ttyUSB0~ttyUSB5 這6 個串口設備。

  • 編譯演示程序

將/works/mx28x/app/目錄下的longsung-test文件夾拷貝到Linux 開發主機,編譯了longsung-test 下的代碼,將生成的longsung-test 文件拷貝到板子便可進行後續的電話功能測試。

  • 電話功能測試

使用U8300C,以中國聯通4G卡爲例進行電話功能測試,設備上電以前須要先插入SIM 卡,且保證已經按前面介紹使能了4G模塊,並能成功入網。進入longsung-test 測試程序存放的目錄,而後運行longsung-test 程序。

[root@M28x opt]# ./longsung-test /dev/ttyUSB1

longsung-test 測試程序運行結果及其中各數字表明功能如圖4所示。須要注意,輸入「1」撥打電話以後,必須須要輸入「2」掛斷電話以後方可繼續撥打電話。

圖4 代碼啓動運行結果

  • 上網功能測試

這裏使用U8300C,以中國移動4G卡爲例進行撥號上網,設備上電以前須要先插入SIM 卡,保證以使能4G模塊併成功入網。

進入板子的/etc/ppp/目錄,建立一個名字爲ppp_dial_LTE.sh的腳本,寫入以下程序:

echo "TIMEOUT 5 '' AT OK ATE0V1 OK AT OK ATS0=0 OK AT OK ATE0V1 OK AT OK ATDT*99*# CONNECT ''" > /tmp/chat

pppd /dev/ttyUSB3 persist connect "chat -v -f /tmp/chat"

保存退出後,修改ppp_dial_LTE.sh 的運行屬性,而後直接運行該腳本,進行撥號操做,參考操做以下:

[root@M28x ppp]# wr chmod 755 ppp_dial_LTE.sh

[root@M28x ppp]# ./ppp_dial_LTE.sh

執行後,等待大概10~20s,使用ifconfig 命令查看網絡設備,能看到系統生成了一個名爲ppp0 的網絡設備,該設備就是撥號成功後生成的網絡設備。撥號成功後可經過ping 114.114.114.114.-I ppp0檢查外網是否鏈接正常。若是沒能成功撥號,能夠參考下面的「撥號異常分析」來排除問題。

  • 撥號異常分析

運行撥號腳本後,使用ps 命令能看到撥號進程的存在。只要撥號成功,撥號進程是一直存在的(與pppd 相關的進程),若是該進程不存在,那麼生成的ppp0 網絡設備也會隨同消失。

若是使用 ifconfig 命令,沒法看到ppp0 這個網絡設備,只要使用ps 命令一直都能看到撥號進程的存在,那麼只能耐心的等待撥號程序的反饋了。若是ps 命令沒法看到撥號進程了,那麼從新運行撥號腳本便可。撥號進程的退出,極有多是由於信號弱或者SIM 卡餘額不足致使的。

相關文章
相關標籤/搜索