開發板硬體資源介紹
前陣子小熊派發布了一款超高價效比的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.bat
、build_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的配置。建立表的形式有時候更清晰一些,關於表驅動的相關文章:
修改同目錄下的Makefile檔案:
編譯、生成韌體,下載韌體,可以看到LED閃爍的現象。