小熊派4G開發板初體驗

開發板硬件資源介紹

前陣子小熊派發佈了一款超高性價比的4G開發板(19.8元包郵),但是板子僅限量1000套。小熊派官方給我送了一塊,我們一起來學習學習:


板子做得小巧精緻,控制核心用的是移遠的EC100Y LTE Cat1無線通信模組,該模組可對所有用戶開放二次開發;EC100Y LTE Cat1模組兩側座子/排針是E53接口,可接小熊派的E53拓展模塊,如:

小熊派4G開發板與其E53接口拓展模塊配合來使用就可以做各種豐富的實驗。EC100Y LTE Cat1模組下方是一個SIM卡槽,支持全網通。SIM卡卡槽左側預留了幾個排針孔,連着兩個串口,可根據需要焊接排針來使用。板子頂部是一個小辣椒天線。板子左下角有一個攝像頭接口與一個音頻輸入/輸出接口。板子右下角是4個按鍵:BOOT按鍵、RESET按鍵、POWER按鍵、用戶按鍵。板子最下方是一個USB口。

開發板入網測試

1、SIM卡槽插入一張手機卡

SIM卡插入一張手機卡,支持全網通,我這裡用的是移動4G卡。

2、串口助手發送AT指令進行測試

AT+CPIN?    : 查詢SIM卡狀態
AT+CSQ      : 查詢信號質量
AT+CGATT?   : 查詢是否附着網絡


以上圖片是入網成功的情況,如果不成功則需要檢查SIM卡有沒有插反、COM號有沒有選對等等。

開發板OPENMCU開發

OPENMCU是一種以模塊作為主處理器的應用方式。這裡就是把移遠的EC100Y LTE Cat1無線通信模組作為主處理器的應用。

1、SDK軟件開發包

我們主要需要關注的是ql-application文件夾,一般的開發主要都是在這裏面添代碼。

2、生成固件

(1)編譯環境

一種方法是自己搭建相關編譯環境,另一種方法是直接用SDK包裏面的編譯工具。SDK包中相關的工具在ql-cross-tool中。為了簡單省事,我們直接使用SDK包給我們提供的編譯工具。

(2)編譯流程

圖片來自移遠官方文檔。

可見,固件打包需要用到一些鏡像,主要分為四大塊:kernel鏡像bootloader鏡像app鏡像其它鏡像

SDK包中有兩個編譯相關的批處理文件:build.batbuild_all.bat。其中:

build_all.bat:提供整體編譯的功能,即雙擊這個批處理文件就會執行上面四大塊鏡像的編譯及打包生成固件的過程。但一般我們都只是修改APP相關的代碼,沒有必要全部編譯。

所以,SDK包中給我們提供了build.bat批處理文件,我們可以在命令行指定一些參數來執行相應的過程,如:

build.bat bootloader命令:只編譯bootloader
build.bat kernel命令    :只編譯kernel
build.bat app命令       :只編譯app
build.bat firmware命令  :生成固件包

因為我們平時開發基本上只是修改了app,所以大多數情況下都是只需要這兩條命令:

build.bat app命令       :只編譯app
build.bat firmware命令  :生成固件包

win7環境下在sdk路徑下快捷操作進入cmd窗口的方法:

與上面操作相同,在win10環境下可在sdk路徑下進入Power shell窗口。當然,win10下也可以進入cmd窗口,然後再進入sdk路徑。其中,在Power shell窗口中運行的編譯命令與在cmd窗口中運行的編譯命令有點不一樣,在Power shell窗口中需要加上.\,如:

執行這個編譯命令時,會自動找到ql-cross-tool里的編譯工具來編譯我們的程序。

生成固件操作:

固件存放的路徑:

我們並沒有編譯bootloader與kernel,那麼生成固件需要的bootloader鏡像與kernel鏡像又是從哪來?

其實,SDK包給我們提供了一組出廠的鏡像,存放在路徑ql-sdk\ql-config\quec-project\aboot\images下:

所以,當我們執行完編譯app的命令,並執行生成固件包的命令時,大致過程如下:

當我們需要恢復出廠設置的時候,可以下載出廠自帶的那組鏡像,此時我們需要先執行如下清除命令:

build.bat kernel/bootloader/app clean命令

分別清除這三大模塊編譯生成的一些文件,然後再打包生成固件。

(3)實操:輸出helloworld實驗

sdk包中已經給我們做好了一個hello例程:

一般printf都是重定向到串口,小熊派4G開發板也有引出debug串口的排針孔,我們可以焊接排針來使用;但是小熊派這裡給我們提供了另一種更方便的方法,重新封裝一個打印函數,打印信息通過USB口輸出。

還需要注意的是Makefile文件的修改。這裡需要修改兩個Makefile文件,一個是ql-sdk\ql-application\threadx\interface\init\example下的Makefile文件:

另一個是ql-sdk\ql-application\threadx\下的Makefile文件:

編譯、生成固件前面已經介紹過了。下面看一下如何下載固件到板子里:

打開aboot工具,找到我們編譯生成的.zip後綴的固件,點擊start:



下載成功,點擊back返回。然後按下板子的RESET鍵複位板子。


這裡需要隨意發送一串字符串觸發我們的輸出,至於為什麼要這樣,後續還需研究研究。另外,有些電腦可能識別不出這個USB串行設備,那打印輸出的信息就沒辦法從USB口輸出。我有兩台電腦,剛開始用另一台開發,發現一直識別不出這個USB串行設備,各種重啟、重裝驅動的方法也都試過,還是沒用。然後我換用另一台電腦,另一台電腦竟然可以識別。所以可能原因有:

①電腦USB口輸出電流不足。小熊派這個USB口的輸入的電流有一定的要求,電腦的USB口輸出的電流不足板子可能就不正常;

②系統的問題。我一台電腦裝的是win7、另一台電腦裝的是win10。裝win10的那台電腦可以正常識別這個USB串行設備,win7的那一台識別不了。

(4)實操:LED實驗

我們創建一個example_led.c文件,與上面的example_helloworld.c放在同一個路徑下,並編寫如下代碼:

#include "ql_application.h"
#include "ql_gpio.h"
#include <stdio.h>

/* led配置表 */
static quec_gpio_cfg_t led_gpio_cfg[] =
{
	/*---引腳號-----------引腳方向---------引腳邊沿--------內部上下拉--------引腳電平---*/
	{GPIO_PIN_NO_75, PIN_DIRECTION_OUT, PIN_NO_EDGE, PIN_PULL_DISABLE, PIN_LEVEL_LOW},

	// 其它GPIO配置......
};

/* led測試任務 */
static void led_test(void * argv)
{
	/* 用戶LED引腳初始化 */
	ql_gpio_init(led_gpio_cfg[0].gpio_pin_num, led_gpio_cfg[0].pin_dir, led_gpio_cfg[0].pin_pull, led_gpio_cfg[0].pin_level);

	while(1)
	{
		ql_gpio_set_level(led_gpio_cfg[0].gpio_pin_num, PIN_LEVEL_LOW);
		ql_rtos_task_sleep_s(1);
		ql_gpio_set_level(led_gpio_cfg[0].gpio_pin_num, PIN_LEVEL_HIGH);
		ql_rtos_task_sleep_s(1);
	}
}

application_init(led_test, "led_test", 2, 2);

這裡需要注意的是:這裡的引腳號並不是原理圖上標的(原理圖上標的是引腳名)。每個引腳都有好幾種模式/功能,我們需要查看《Quectel_EC100Y_QuecOpen硬件設計手冊V1.0.pdf》的功能復用表查看真正的引腳號:

這裡我們創建了一個led配置表,這樣方便添加、修改LED的配置。創建表的形式有時候更清晰一些,關於表驅動的相關文章:

C語言精華知識:表驅動法編程實踐

空間換時間,查表法的經典例子

修改同目錄下的Makefile文件:

編譯、生成固件,下載固件,可以看到LED閃爍的現象。