A9G 开发环境搭建
一、A9G简介
A9G 是一个完整的四频 GSM / GPRS 模块,它融合 GPRS 和 GPS / BDS 技术,并将其集成在一个紧凑型设计的 SMD 封装中,大大的节省了客户开发 GNSS 应用的时间和成本。
A9G 可广泛应用于各种物联网场合,适用于家庭自动化、工业无线控制、可穿戴电子产品、 无线位置感知设备、无线定位系统信号以及其它物联网应用,是物联网应用的理想解决方案。 A9G 采用 SMD 封装,可通过标准 SMT 设备实现产品的快速生产,特别适合自动化、大规 模、低成本的现代化生产方式,方便应用于各 种物联网硬件终端场合。
二、Windows开发环境搭建
1. 注意
重要,请先阅读 SDK没有特定的IDE,用户自己选择代码编辑器编辑代码。 在修改代码时,一定不能使用windows自带的记事本和写字板,请使用更加专业的编辑器(推荐使用如vscode,sublime,atom,eclipse,source insight等,或者其它你熟悉的编辑器。)
比如使用VS Code, 它支持函数跳转等基本功能(在vscode里面搜索C/C++插件安装),多使用搜索功能(侧边栏搜索图标)会很方便
请修改编辑器设置,文件结尾符号设置为unix风格((\n)结尾)(设置方法请自行到网络查找) 如果你是使用git进行克隆,请设置git在pull时不将转换为,设置方法参考这里.
2. 下载工具链以及下载调试工具及SDK
1.下载CSDTK4.2:百度云下载 2.下载SDK
注意: 下载完请检查platform/csdk文件夹下是否包含debug、release文件夹,没有说明下载文件不全,请重新下载完整的SDK 如果使用git克隆,因为工程使用了子模块,请添加--recursive参数,否则克隆下来的文件不全无法编译成功
3. 安装
解压到某个文件夹,比如C:\CSDTK,路径请不要带中文! 运行CSDTk目录下的config_env_admin.bat文件来设置环境变量
这个脚本做的事情就是新建一个名为GPRS_CSDTK42_PATH的环境变量,变量值为CSDTK的目录路径。 如果脚本建立失败也可以自己手动建
4. 编译
解压下载到的CSDK为GPRS_C_SDK文件夹放到某个目录下,比如C:\GPRS_C_SDK,请使用下划线(_)而不是减号(-). 进入CSDK文件夹(C:\GPRS_C_SDK),按住shift,在文件夹内空白处鼠标右键单击,选择cmd打开或者powershell打开,如图:
使用./build.bat app 或者 build.bat app来编译工程,测试环境是否可用,如果正常,会出现以下结果:
如果提示NO CSDTK,Please install CSDTK first!,则是环境变量没有生效(在win7下可能会出现),可以重启电脑以生效 保证环境可以使用后,就可以在CMD或powershell窗口中使用build.bat脚本来编译工程,有以下参数:
使用 ./build.bat
PROJ 来编译demo目录下的特定例程,比如./build.bat demo gpio 使用 ./build.bat clean
PROJ目录的中间文件 使用 ./build.bat clean all 清除所有中间文件 使用 ./build.bat demo $PROJ release 来生成release版本,比如./build.bat demo gpio release, 如果最后一个参数不是release,则默认是debug版本, debug版本在死机后会停止运行并可以使用GDB调试,而release版本加入了看门狗功能,在死机时会自动重启系统,所以实际投入使用时请使用release版本以防止出现bug时死机,测试时使用debug版本
比如:
./build.sh demo gpio
进行编译,编译会生成一个build目录,编译完成会在hex目录下生成两个格式为lod的文件,这就是我们用来下载到开发板的目标文件. 目标文件说明 两个文件一大一小,在第一次下载时需要下载大文件(_B.lod)即可,第二次和以后为了减少下载时间都只需要下载小文件(*_flash.lod)即可,更新SDK后需要重新下载大文件.
5. 其它问题
如果遇到问题,请仔细对比文档,看操作是否有错,也可以在issue里找有没有先例,如果仍然有错,可以到安信可论坛提问或者github提交issue 方式一:github添加issue 方式二:安信可论坛讨论
三、Linux开发环境搭建
1.注意
重要,请先阅读 SDK没有特定的IDE,用户可以选择代码编辑器来编辑代码(例如vscode,sublime,atom,eclipse,Source Insight或其他您熟悉的编辑器。) 请修改编辑器设置。文件符号的末尾设置为UNIX样式((\n)结束),文件编码为UTF-8. 如果使用git克隆,则将pull处的git设置为not转换为,在这里设置方法参考。
2.下载工具链,调试工具和SDK
下载CSDTK4.2 Linux版本:baidu cloud
下载SDK 或通过git克隆:(需要git clone https://github.com/Ai-Thinker-Open/GPRS_C_SDK.git --recursive注意--recursive,否则编译文件湖失败) 检查C_SDK platform/csdk文件夹,应该有一些文件夹和文件,如果没有,您可能会以错误的方式获取源代码,然后再次检查并下载.
3.安装
3.1 安装编译工具的依赖项
sudo apt install build-essential gcc-multilib g++-multilib libzip-dev zlib1g lib32z1
3.2 安装coolwatcher的依赖
sudo apt install build-essential libqt4-qt3support itcl3 itk3 iwidgets4
以及最新的ubuntu中的其他兼容库
sudo apt install libpng12-0 libusb-0.1-4
3.3 CSDTK成立
创建一个项目文件夹,例如 ~/projects
mkdir ~/projects
解压缩CSDTK42_Linux.tar.gz到一个文件夹,~/software/CSDTK例如,然后执行setup.sh,第一个参数是CSDTK的位置,第二个参数是项目的位置
cd ~/software tar -xzvf CSDTK42_Linux.tar.gz cd CSDTK ./setup.sh ./ ~/projects
3.4 编译
将下载到GPRS_C_SDK文件夹的CSDK解压缩到目录中,例如~/projects/GPRS_C_SDK,请使用下划线(_)代替减号(-)。 检查SDK有充分的文件,检查platform/csdk文件夹,如果没有debug和release文件夹,你下载了错误的SDK文件,请重新下载中发布页或克隆的命令git clone https://github.com/Ai-Thinker-Open/GPRS_C_SDK.git --recursive 编译
cd ~/projects/GPRS_C_SDK ./build.sh demo gpio
如果将GPRS项目放在projects folder(通过命令./setup.sh ./ ~/projects之前设置)中,则可以使用脚本快速进入项目文件夹,如下所示
work GPRS_C_SDK ./build.sh demo gpio
然后,您可以使用./build.sh脚本来构建项目:
./build.sh
PROJ:compile demo project,例如:./build.sh demo gpio编译gpio demo ./build.sh clean
PROJ ./build.sh clean all:清除所有构建文件 ./build.sh demo $PROJ release:build一个发行版本,例如:./build.sh demo gpio release,如果最后一个参数不是release,则默认为debugversion。GDB在debug版本系统崩溃后可以用来调试错误,但是release版本不能,在发行版本中看门狗激活,当系统崩溃时它将自动重启系统!
例如:
./build.sh demo gpio
build编译后会生成一个文件夹,该文件夹中有两个*.lod文件hex,它是目标文件(刻录到下载板) 关于目标十六进制文件( .lod)
有两个十六进制文件(_B.lod和*_flash.lod),您必须在第一时间将较大的文件刻录到开发板,然后可以刻录一个小文件以减少下载时间。如果您更新SDK版本,则必须下载更大的版本.
4.其他问题
如果遇到问题,请仔细对比文档,看操作是否有错,也可以在issue里找有没有先例,如果仍然有错,可以到安信可论坛提问或者github提交issue 方式一:github添加issue 方式二:安信可论坛讨论
四、GPRS 下载调试说明
1. 硬件连接
模块的调试下载接口是HST接口,即引脚HST_RX和HST_TX脚分别连接连接USB转串口模块的TX和RX引脚(交叉连接,HST_RX接TX)。
电源可以接锂电池电压(即3.8v~4.2v)(VBAT引脚),也可以接5v电源(5v输入引脚或者USB输入),需要注意的是,如果使用锂电池供电,上电后需要按POWER KEY3秒左右让模块开机,USB供电则会上电自动开机。 在下载或者调试时要确保已经开机。
2. Linux
安装依赖
sudo apt install build-essential libqt4-qt3support itcl3 itk3 iwidgets4
创建串口如下链接文件,以后你可以在coolwatcher的图表中有补1中,COM1必须大写
sudo ln -s /dev/ttyUSB0 comport/COM1
然后双击coolwatcher运行软件
3. 下载步骤
将coolwatcher更新到最新版本(coolwatcher在CSDTK文件夹下)
打开CSDTK/cooltools/coolwatcher.exe
左边profiles选项选择8955,右边需要设置lastcomport为连接模块下载调试串口(HST)的端口
点击Ok
等待连接成功,出现以下界面
如果出现连接失败的情况,请参考 coolwatcher 无法连接原因部分
如果第一次使用,需要点击DRY图标,选择名字包含8955 ramrun spi32m .lod的文件(在工程platform/ramrun下或者coolwatcher cooltools\chipgen\Modem2G\toolpool\plugins\fastpf\flash_programmers目录下)。 只需要设置一次,后面都会记住的
点击下图中的lod图标,选择编译生成的固件,在工程hex目录下.lod格式的文件,首次下载下载文件体积较大的.lod格式文件,后面为了加快下载速度只需要下载体积较小的固件文件即可
点击 download图标,进行下载,正常效果如下图,右下角Command栏会有进度标志。
五、开始第一份代码
确保可以编译代码、下载固件到GPRS模块/开发板后,就可以开始了解如何写一份代码啦~~~~ 以下的代码可以在工程目录demo/first中找到 作为第一份代码,当然是从我们熟悉的hello wold做起呀~~~ 所以我们的目标:一个完整的代码架构,并能不断间隔打印Hello GPRS即可
1. 目录
目录描述app程序主目录,应用代码放在这里build编译生成的目录、中间文件demo一些例程doc相关文档,Markdown格式hex最后产生的可烧录文件includeSDK头文件目录,可以在这里面找需要的API以及函数、参数注释init系统初始化的目录,可以不用理会,不建议改动platform库文件等,请确保platform/csdk文件夹不为空
2. 建立文件夹、文件
新建demo/fisrt文件夹,并新建Makefile文件,注意只是首字母大写,或者全是小写 填入以下内容:
#Name of the module
LOCAL_NAME := demo/first
#List of submodules which contain code we need to include in the final lib
LOCAL_API_DEPENDS := \
LOCAL_ADD_INCLUDE := include\
include/std_inc \
include/api_inc \
#Set this to any non-null string to signal a module which # generates a binary (must contain a "main" entry point). # If left null, only a library will be generated.
IS_ENTRY_POINT := no
##------------------------------------ #### Add your custom flags here #### ------------------------------------ ##
MYCFLAGS +=
##------------------------------------- #### List all your sources here #### ------------------------------------- ##
C_SRC := ${notdir ${wildcard src/*.c}}
##------------------------------------- ##
##Do Not touch below this line ##
##------------------------------------- ##
include ${SOFT_WORKDIR}/platform/compilation/cust_rules.mk
这里LOCAL_NAME := demo/first填文件夹路径,LOCAL_ADD_INCLUDE是包含的头文件路径. 新建demo/first/src文件夹,并新建demo_first.c文件.
3. 代码
代码可以在工程目录demo/first/src/demo_first.c中找到 主要要做的事情是:编写程序入口,并创建主任务,用来接收来自底层的事件,同时建立一个任务,不停打印信息.
3.1. 入口及主任务
程序入口,创建主任务(这里使用到了操作系统相关的函数,如果没有接触过,请不要惧怕,可以先照着做)
#include "stdbool.h"#include "stdint.h"
#include "api_os.h"#include "api_debug.h"#include "api_event.h"
#define MAIN_TASK_STACK_SIZE (2048 * 2)#define MAIN_TASK_PRIORITY 0#define MAIN_TASK_NAME "Main Test Task"
static HANDLE mainTaskHandle = NULL;
void first_Main(void){
mainTaskHandle = OS_CreateTask(MainTask,
NULL, NULL, MAIN_TASK_STACK_SIZE, MAIN_TASK_PRIORITY, 0, 0, MAIN_TASK_NAME);
OS_SetUserMainHandle(&mainTaskHandle);
}
每个程序都有一个入口,这里的入口是一个函数: void first_Main(void),返回值和参数都是void,下划线左边必须是文件夹的名字,这里是first,下划线右半边必须是Main,首字母大写。 调用OS_CreateTask来创建一个任务,具体参数含义可以见OS部分,这里先不阐述。调用OS_SetUserMainHandle将刚刚创建的任务指针(句柄)传给底层,让底层知道给那个任务发送事件,这个是必须的.
3.2. 主任务处理及打印任务
#define SECOND_TASK_STACK_SIZE (2048 * 2)#define SECOND_TASK_PRIORITY 1#define SECOND_TASK_NAME "Second Test Task"
static HANDLE secondTaskHandle = NULL;
void SecondTask(void *pData){
while(1)
{
Trace(1,"Hello GPRS ");
OS_Sleep(3000);
}
}
void EventDispatch(API_Event_t* pEvent){
switch(pEvent->id)
{
default:
break;
}
}
void MainTask(void *pData){
API_Event_t* event=NULL;
secondTaskHandle = OS_CreateTask(SecondTask,
NULL, NULL, SECOND_TASK_STACK_SIZE, SECOND_TASK_PRIORITY, 0, 0, SECOND_TASK_NAME);
while(1)
{
if(OS_WaitEvent(mainTaskHandle, (void**)&event, OS_TIME_OUT_WAIT_FOREVER))
{
EventDispatch(event);
OS_Free(event->pParam1);
OS_Free(event->pParam2);
OS_Free(event);
}
}
}
主任务MainTask中又新建了一个任务SecondTask,这个任务中做的事情就是每间隔3秒钟打印一句Hello GPRS,打印信息可以在coolwatcher的tracer工具中看到;
然后主任务阻塞等待来自底层的事件,并在EventDispatch函数中处理,这里暂时没有处理任何事件,所有事件可以在api_event.h中找到,每个事件的参数也有注释
4. 编译并下载固件看验证
按照前面的编译、下载方法下载到开发板运行,打开调试工具可以看到打印的Hello GPRS.
联系方式
技术支持邮箱:[email protected] 有问必回复!
关注“安信可科技”微信公众号,干货多多,第一时间推送!