当前位置: 首页 > 文档资料 > YoC 编程基础 >

产测参考例程开发指南

优质
小牛编辑
115浏览
2023-12-01

产测程序可以使用串口与上位机通信。本示例中,上位机发送相关AT指令至串口,示例程序成功解析AT指令后完成相关测试项。YoC SDK的AT Server模块实现了AT指令的解析,用户可以快速实现AT产测指令的开发与扩展。

该产测例程适用于CB6502M开发板。

AT Server的工作流程如下图所示,用户可根据需要扩展自定义的AT命令及处理函数。

3.1. 应用初始化

应用入口函数为app_main,用于实现了板级的初始化和创建APP任务。

void main()
{
    /* 板级初始化入口 */
    board_yoc_init();

    /* 获取当前运行模式 */
    g_app_dev_mode = get_dev_mode();

    if (g_app_dev_mode == DEV_MODE_FACTORY) {
        /* 当前运行模式为工厂测试模式,创建产测任务及LoRaWAN协议栈任务 */     

        aos_task_new_ext(&task_handle, "lorafactory_task", radiolora_app_entry,
                         &g_app_dev_mode, 2048, AOS_DEFAULT_APP_PRI);
    } else {
        ......

        /* 当前运行模式为AT模式,创建LoRaWAN协议栈任务 */
        lorawan_task_entry();        
    }    

    /* AT Server初始化入口 */
    at_server_init(NULL);

}

3.2. 板级初始化

板级初始化的入口为board_yoc_init,主要完成硬件初始化以及OS组件的初始化,由app_main函数调用。

void board_yoc_init(void)
{
    /* 引脚复用关系定义 */
    app_pinmux_config();

    /* 打印串口初始化,指定打印串口端口号 */
    console_init(CONSOLE_ID, 115200, 128);
    ......

    /* Flash分区初始化 */
    partition_init();
    ......

    /* KV系统初始化 */    
    aos_kv_init("kv");

    /* 事件服务初始化 */
    event_service_init(NULL);
    ......
}

3.3. AT服务初始化

AT Server的初始化入口为 at_server_init,主要完成AT Server微任务的创建、自定义AT命令的注册。

/* AT Server初始化 */
void at_server_init(utask_t *task)
{
    ......

    /* 创建AT Server微任务 */
    task = utask_new("at_srv", 2 * 1024, QUEUE_MSG_COUNT, AOS_DEFAULT_APP_PRI);

    if (task) {
        /* atserver模块初始化,指定AT串口端口号及工作参数 */
        atserver_init(task, AT_UART_DEV_NAME, &config);
        /* 打开命令回显 */
        atserver_set_echo(1);
        /* 增加自定义AT指令及处理回调函数 */
        atserver_add_command(lora_at_cmd);
    }
}

3.4. AT指令扩展

示例程序通过AT指令数组定义系统需要支持的命令,用户可以选择注册YoC通用AT指令,也可以添加数组成员以扩展自定义AT指令。

const atserver_cmd_t lora_at_cmd[] = {
    /* YoC通用AT指令注册 */
    AT_FWVER,  //获取固件版本

    AT_KVGET,  //KV系统键值获取命令
    AT_KVSET,  //KV系统键值设置命令
    AT_KVDEL,  //KV系统键值删除命令
    AT_KVGETINT,  //KV系统整形类型键值获取命令
    AT_KVSETINT,  //KV系统整形类型键值设置命令
    AT_KVDELINT,  //KV系统整形类型键值删除命令
    ......

    /* 自定义AT指令注册 */
    LORA_AT_CDEVEUI,
    ......

    LORA_AT_NULL,    
};
                            /* AT指令          回调处理函数   */
#define LORA_AT_CDEVEUI    {"AT+CDEVEUI", lora_at_cmd_cdeveui}     // dev eui (OTAA)

static void lora_at_cmd_cdeveui(char *cmd, int type, char *data)
{
    char info[30] = {0};

    if (type == TEST_CMD) {
        /* AT测试指令,AT+CMD=? */
        ......
    } else if (type == READ_CMD) {
        /* AT查询指令,AT+CMD? */
        ......
    } else if (type == WRITE_CMD) {
        /* AT执行指令,AT+CMD=param1,param2...... */
        ......
    }
    /* 发送执行结果至AT串口 */
    atserver_send(......);
}
  • 连接打印串口、AT串口和调试口
  • 打印串口以及AT串口的串口调试工具配置为: 波特率: 115200, 数据位: 8, 校验位: None, 停止位: 1, 流控: None
  • 使用集成开发环境CDK编译工程文件,然后下载至CB6502M开发板
  • 按RESET按键,复位开发板,打印串口将打印如下信息
[     0.362673][I][init    ]OS version: 7.0.2
[     0.392438][D][factory_test_demo]Enter Factory mode
  • AT串口打印
System enter into Factory Mode
  • AT命令执行

AT+CDEVEUI?

+CDEVEUI:D896E0FFFF0113F9
OK


AT+CDEVEUI=?

+CDEVEUI="DevEUI:length is 16"
OK