AIR724UG开发板试用

本文最后更新于 2024年6月25日 早上

AIR724UG是个合宙通信推出的LTE CAT.1模组,然后这次试用了下该模组的官方开发板。试用嘛,就是简单跑个程序,之后如果有必要再继续捣鼓。

简述

Air724UG是上海合宙物联发布的一款基于UIS8910DM芯片组的物联网通讯模块
支持LTE-FDD:B1/B3/B5/B8和LTE-TDD:B34/B38/B39/B40/B41。
在LTE-FDD时最大上行10M最大下行5M,在LTE-TDD是最大上行4M最大下行6M或是最大上行2M最大下行8M

简易使用

1 安装驱动

官方下载
根据系统选择合适的安装即可,无需重启。

2 安装luatool工具

该工具用于对开发板的程序下载和调试。
官方下载
打开软件后开始更新,如果没有自动更新,则可以选择上列菜单的帮助->检查新版本进行更新。更新会下载大约1G多文件,注意放置位置。下图为更新完成后的目录

3 连接

开发板有两个micro usb接口,连接丝印写了USB那一个。打开luatool工具。长按“下载模式按钮”,在此时再短按复位按钮,最后松开“下载模式按钮”。
这时会有两种情况,如果板子有程序,则左上角会识别出多个USB端口,直接勾选”4G模块USB打印即可连接”。
如果板子没有程序,则只会识别出一个名为Diag的端口,选择,点击打开串口即可连接。此时左边什么启动原因,系统状态那些是没有任何显示的。

4 下载

首先下载核心固件,点击右边的“下载固件按钮”,弹出如下
选择固件,目录就在luatool工具更新时下载的source文件夹中,这芯片编码为8091,进入对于文件夹,版本差别可见参考链接中的固件固件说明。我这里选择了在\resource\8910_lua_lod\core_V3035下的Luat_V3035_RDA8910_BT_FLOAT.pac这个固件,该固件支持蓝牙。
点击下载,根据提示按压按键,也就是和上面一样,一直按着“下载模式”,再去点一次复位,在松开“下载模式”按键。
之后下载脚本,示例包在Luat_Lua_Air724U文件夹下的demo中,在参考链接的固件说明网页中可以下载。
点击右边的项目管理测试,然后弹出页面中,创建项目,选择底层core(选择了可以和脚本一起下,不用上面单独下),增加脚本,也就是导入demo中的lua脚本,和下图一样勾选配置,然后点击下载,根据提示按压按键。

下载完成后在之前的窗口就可以看到打印信息了。

5 简单的代码说明

就测试了下蓝牙代码,所以就对bluetooth文件夹下的main和master聊聊。
main文件中就注意一下require,是关联那个脚本,根据需求不同来修改

1
2
3
4
5
--加载BLE功能测试模块
require "master" --主设备
--require "slave"  --从设备
--require "beacon"  --beacon
--require "bt"  --bt classic

在master文件的最下方有这样一段代码

1
2
3
4
5
6
7
8

local ble_test = {init, poweron, scan, data_trans}
sys.taskInit(function()
    for _, f in ipairs(ble_test) do
        f()
    end
end)

其中sys.taskInit(function()表示单独建立现在来运行,ble_test则保存了文件前面需要执行的函数,按顺序逐个执行。
代码的打印方式通过如下

1
log.info("bt", "init")

或者打印变量:

1
2
3

log.info("bt.connect_name", name)

打印字节流

1
2
3

log.info("bt.raw_data"string.toHex(bt_device.raw_data)

对蓝牙的一些操作,如果已经知道了需要连接的设备MAC地址,可以直接通过下列API来连接

1
2
3

btcore.connect(bt_device.addr)

示例代码是通过名称来找到对应设备的信息后,再用MAC地址来连接,已经知道了就不用SCAN了
示例代码只会接受UUID为0XFFE0中的0XFFE2特制的数据,想要修改则直接改下面代码函数中的参数即可

1
2
3
4
5
6
btcore.findcharacteristic(0xfee0)--服务uuid
_, result = sys.waitUntil("BT_FIND_CHARACTERISTIC_IND") --等待发现服务包含的特征成功
if not result then
return false
end
btcore.opennotification(0xfee2); --打开通知 对应特征uuid

如果想增加则直接复制了修改
蓝牙的发送和接收

1
2
3
4
5
6
7
8

btcore.send(data,0xfee1, bt_connect.handle) --发送数据(数据 对应特征uuid 连接句柄)

_, bt_recv = sys.waitUntil("BT_DATA_IND"--等待接收到数据


local recvuuid, recvdata, recvlen = btcore.recv(200)

C语言的开发

固件包官网下载
在固件包中有个doc文件夹,里面有详细介绍,这里仅仅简单说明一下。之前的驱动和下载调试工具仍然得安。
首先在固件包的demo中新建一个工程,我这里复制了蓝牙工程,改名为bl,然后进入里面,修改demo_bluetooth_master.c为my_bluetooth.c,删除其他C文件,就保留如图

假设这就是我们属于我们自己的新工程了。
打开CMakeLists.txt,修改为

1
2
3
4
5
if(CONFIG_APPIMG_LOAD_FLASH)
add_appimg(${target} ${flash_ldscript} my_bluetooth.c)
elseif(CONFIG_APPIMG_LOAD_FILE)
add_appimg(${target} ${file_ldscript} my_bluetooth.c)
endif()

也就是删掉多余的,修改名称而已。然后前往固件包的project文件夹建立一个编译脚本,命名为bl.bat

1
2
3
4
5
6
7
8
9
@echo off
set CSDK_VER=1.0.0
set CSDK_PRO=bluetooth
set FOTA_FLAG=%1
set FOTA_TYPE=%2
set AM_MODEL=iot_SDK_720U_BT_TTS
call ..\tools\core_launch.bat bl

cd %PROJECT_OUT% & cmake ..\.. -G Ninja & ninja & cd ..\..\project

然后就在此模块运行cmd.exe,键入bl.bat开始编译,20几秒后结束。在此目录\Luat_CSDK_Air724U\hex多了两个文件夹

其中Air720U_V302076_CSDK_BT_TTS_demo_bl.pac文件便是底层和CSDK层的固件,而APP那个仅仅是CSDK层固件。下载方式和上面luat那个下基础固件一样。
更详细说明,就看doc里面的那些文档咯。
然后下载进去发现。。。。线程没运行,于是去找找官网文档
CSDK二次开发教程
里面的下载方式不一样,是通过其他工具下载,懒得试了,等之后有空在搞搞

21年8月9日补充:

最近才知道,CSDK官方是不提供支持的,之前网站上的文档也都是其他使用者写的。最近gitee上面的库被关掉了,连代码都无了- -|。
于是去万能的github上面找找看有没有玩过的人,结果还真有个工程。他这个demo就弄得很不错,下下来试了试,编译下载运行都没问题。下列简述实现BLE流程

  • 下载工程HYH分支,将下载下来的文件夹去掉只读
  • 下载SDKHYH分支,将下载下来的文件夹去掉只读
  • 打开Air724UDemo-HYH工程目录,找到build.bat,进行编辑。可以先删除第一行echo off这样在编译的时候可以看到地址打印信息,看有没有问题。主要修改CSDK_INSTALL_PATH变量,将其改为上面下载的Luat_CSDK_Air724U工程的绝对地址,例如
    1
    2
    @rem CSDK安装目录(默认需提前下载至%userprofile%\OpenLuat),目录必须可写
    set CSDK_INSTALL_PATH=C:\Users\lisse\Desktop\AIR724\Luat_CSDK_Air724U-HYH
  • 由于要使用蓝牙,所以需要修改bulid.bat中的
    1
    set AM_MODEL=iot_SDK_720U_BT_TTS
  • 删去不会用到的一些文件,下图中多的一些文件是编译或者新添加的,不用在意。
  • 修改makelists
    1
    2
    3
    4
    5
    if(CONFIG_APPIMG_LOAD_FLASH)
    add_appimg(${target} ${flash_ldscript} main.c debug.c)
    elseif(CONFIG_APPIMG_LOAD_FILE)
    add_appimg(${target} ${file_ldscript} main.c debug.c)
    endif()
  • 修改man.c,将其改为每秒打印一次
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25

    HANDLE main_task_handle=NULL;
    static void main_task(PVOID pParameter)
    {
        while(true)
        {
            iot_os_sleep(1000);
            app_debug_print("------------");
        }
        iot_os_delete_task(main_task_handle);
    }
    int appimg_enter(void *param)
    {
    #if CONFIG_APP_DEBUG == 1
        iot_debug_set_fault_mode(OPENAT_FAULT_HANG);
    #endif // CONFIG_APP_DEBUG
        iot_pmd_exit_deepsleep();
        app_debug_init();
        main_task_handle = iot_os_create_task(main_task, NULL, 1024, 1, OPENAT_OS_CREATE_DEFAULT, "main");
        return 0;
    }
    void appimg_exit(void)
    {
        app_debug_print("exit");
    }
  • 修改debug.c,设置打印使用的是那个接口,这里默认使用串口2,然后我们就修改波特率为115200
    1
    2
    uartCfg.baud = OPENAT_UART_BAUD_115200; //波特率

  • 编译,管理员运行cmd,然后执行Air724UDemo-HYH下的build.bat,编译结束后会在Air724UDemo-HYH\build\hex此目录下生成Air720U_V302340_CSDK_BT_TTS_demo_Air724UDemo.pac
  • 下载,仍然是使用Luatools工具,直接点击左边的下载固件,选择上面生成文件,下载即可。
  • 查看打印,勾选 4G模块串口打印,然后串口选择为CH340那个。手动打开串口。
  • BLE是直接改的库里面的例程,但是这个例程嘛,直接编译一堆问题。这里只说一下连接,设置UUID,获取数据这三个主要部分。
  • 连接是不需要先scan的,直接用mac地址和类型填入函数即可,和luat代码不同时多了个地址类型,如果不知道地址类型就先用scan函数去打印看看。
    1
    2
    3
    4
    5
    6
    7
    8

        iot_ble_connect("d8:0b:cb:61:02:e7",0);
        iot_os_wait_message(ble_test_handle,(PVOID*)&msg);//等待连接成功
        if(msg->eventid == OPENAT_BLE_CONNECT)
        {
            app_debug_print("ble connect\n");
        }

  • 设置UUID我将其提出来作为了一个独立函数
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38

    VOID ble_set_uuid(UINT16 uuid_server,UINT16 uuid_characteristic)
    {
        T_OPENAT_BLE_UUID uuid_s = {
            .uuid_type = UUID_SHORT,
            .uuid_short = uuid_server,
        };
        T_OPENAT_BLE_UUID uuid_c = {
            .uuid_type = UUID_SHORT,
            .uuid_short = uuid_characteristic,
        };
         ble_report_info_t *msg = NULL;
        U_OPENAT_BT_IOTCTL_PARAM  param1 = {0};
        U_OPENAT_BT_IOTCTL_PARAM  param2 = {0};
        param1.uuid = iot_os_malloc(sizeof(T_OPENAT_BLE_UUID));
        memcpy(param1.uuid,&uuid_s,sizeof(T_OPENAT_BLE_UUID));
        iot_ble_iotctl(connect_handle,BLE_FIND_CHARACTERISTIC,param1);//发现服务内的特征
       if(param1.uuid != NULL)
            iot_os_free(param1.uuid);
        param2.uuid = NULL;
        iot_os_wait_message(ble_test_handle,(PVOID*)&msg);
        if(msg->eventid != OPENAT_BLE_FIND_CHARACTERISTIC_IND)//等待发现特征成功
        {
            if(msg != NULL)
                iot_os_free(msg);
            msg = NULL;
            return ;
        }
        if(msg != NULL)
            iot_os_free(msg);
        msg = NULL;
        param2.uuid = iot_os_malloc(sizeof(T_OPENAT_BLE_UUID));
        memcpy(param2.uuid,&uuid_c,sizeof(T_OPENAT_BLE_UUID));
        iot_ble_iotctl(connect_handle,BLE_OPEN_NOTIFICATION,param2);//打开通知
        if(param2.uuid != NULL)
            iot_os_free(param2.uuid);
        param2.uuid = NULL;
    }
  • 数据接收是自动的,在调用完ble_set_uuid设置后,但数据来时会触发bluetooth_callback回调,然后发送一个消息出来,接收打印即可
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
            iot_os_wait_message(ble_test_handle,(PVOID*)&msg);//等待接收到数据
            if(msg->eventid == OPENAT_BLE_RECV_DATA)
            {
                bleRcvBuffer = iot_os_malloc(BLE_MAX_DATA_COUNT*2+1);
                app_debug_print("[bluetooth]uuid %x",msg->uuid);
                app_debug_print("[bluetooth]dataLen %d",msg->len);  
                AppConvertBinToHex(msg->bleRcvBuffer,msg->len,bleRcvBuffer);
                bleRcvBuffer[msg->len*2] = '\0';
                app_debug_print("[bluetooth]data %s",bleRcvBuffer);
                if(bleRcvBuffer != NULL)
                    iot_os_free(bleRcvBuffer);
                bleRcvBuffer = NULL;
                if(msg != NULL)
                    iot_os_free(msg);
                msg = NULL;  
            }

参考链接

开发板说明
开发板使用指南
固件说明
socket说明
luat的API接口文档
蓝牙API
TCP测试工具
基于C的串口开发文档


AIR724UG开发板试用
https://blog.kala.love/posts/d327d52f/
作者
久远·卡拉
发布于
2021年6月20日
许可协议