开发板硬件资源介绍
前阵子小熊派发布了一款超高性价比的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闪烁的现象。