Page 1 of 1

【技术干货】TuyaOS(NB-IoT)新平台移植指导

Posted: 2023年 Sep 20日 16:31
by liujt@tuya.com

NB-IoT TuyaOS SDK如何获取参考:
viewtopic.php?t=89
目前涂鸦已经成功导入的芯片平台如下:
https://developer.tuya.com/cn/docs/iot- ... fezpw8zih4
部分用户有需要对接涂鸦云业务,但是又希望使用非涂鸦模组,所以本文根据该需求,对如何使用TuyaOS SDK(基于已发布的TuyaOS3.8.x开发框架)在NBIoT新平台上的导入进行相关指导。

一.SDK目录结构

首次获取到SDK为压缩文档,如tuyaos-iot-nbiot-2226454_4300130_2225878.tar.gz,解压后得到以下目录结构:

tuyaos_sdk_初始目录.png
  • apps为应用程序目录,该目录下为基本的应用程序例程(如果为空,可以找对应的联系人获取),目录结构如下:

    apps_ 目录.png
  • include:SDK系统头文件目录

  • libs:SDK系统静态库文件目录

二.完整开发框架获取

在最上层目录执行如下指令:

  • TuyaOS# ./build_app.sh apps/tuyaos_demo_nb_sample/ tuyaos_demo_nb_sample 1.0.0

其中

  • ./build_app.sh:执行指令

  • apps/tuyaos_demo_nb_sample/:应用程序所在路径

  • tuyaos_demo_nb_sample:生成固件名称

  • 1.0.0:生成固件版本

该命令执行后要拉取原厂工具链(本工程开发环境工具链为nb_virtual_env,如下),需花费5分钟左右,请耐心等待.......

拉取工具链.png

完成之后,新的目录结构如下:

新目录.png

其中vendor目录为以上命令执行后拉取的开发环境目录,包括原厂工具链目录toolchain和需要用户实现的平台适配目录:

新工具链.png

三.开发环境配置

  • TuyaOS开发框架的编译执行完后,会交由/TuyaOS/vendor/nb_virtual_env/tuyaos/build.sh接管,该脚本会输出以下参数,以供后续用户调用并完成脚本余下部分的编写:

    编译接管.png
    • APP_BIN_NAME:生成固件名称,对应到上述命令中的“tuyaos_demo_nb_sample”

    • APP_VERSION:生成固件版本,对应到上述命令中的“1.0.0”

    • TARGET_PLATFORM:平台名称,如nb_virtual_env

    • APP_PATH:应用程序所在路径,对应到上述命令中的“apps/tuyaos_demo_nb_sample”

    • USER_CMD:用户命令

  • 开发环境对TuyaOS SDK的依赖配置:
    芯片的开发环境可以放置在和工具链目录toolchain于同一级目录下,如下:

    vendor目录.png
    • 静态库的依赖,需要按如下顺序进行链接:
      -l$(APP_BIN_NAME) -ltuyaapp_components -ltuyaapp_drivers -ltuyaos -ltuyaos_adapter

    • 头文件的依赖包括:
      系统头文件目录:TuyaOS/include,
      平台适配头文件目录:TuyaOS/vendor/nb_virtual_env/tuyaos/tuyaos_adapter/include,
      产品应用头文件目录:TuyaOS/apps/tuyaos_demo_nb_sample/include,
      建议从开发环境Makefile所在位置开始,指定相对的依赖库及头文件路径。
      由于涉及的头文件层次较多,可以通过脚本遍历的方式,避免因为遗漏相关目录而造成编译时找不到头文件报错的问题出现,如:
      GLOBAL_INCLUDES += $(addprefix -I , $(shell find $(TY_NBIOT_INCLUDE_PATH) -type d))
      其中TY_NBIOT_INCLUDE_PATH表示头文件所在的最上层路径。

四.芯片平台接口适配

需要完成以下目录TuyaOS/vendor/nb_virtual_env/tuyaos/tuyaos_adapter/src中接口的相关适配:

适配.png

需完成以下几部分芯片原厂接口对TuyaOS SDK适配:

  • 操作系统接口部分:
    tkl_memory.c:系统内存相关
    tkl_mutex.c:系统互斥锁相关
    tkl_network.c:系统网络相关
    tkl_queue.c:系统队列相关
    tkl_semaphore.c:系统信号量相关
    tkl_system.c:系统功能相关
    tkl_thread.c:系统任务相关

  • 驱动部分:
    tkl_adc.c:ADC驱动驱动相关(产品开发若不需要,可以不用适配)
    tkl_flash.c:FLASH驱动操作相关
    tkl_gpio.c:GPIO驱动操作相关
    tkl_i2c.c:I2C驱动操作相关(产品开发若不需要,可以不用适配)
    tkl_rtc.c:时间操作相关
    tkl_spi.c:SPI驱动操作相关(产品开发若不需要,可以不用适配)
    tkl_symmetry.c:硬件AES操作相关(目前释放的SDK默认是开启软AES,如果有需求支持硬件AES,请特别说明)
    tkl_uart.c:UART驱动操作相关

五.产品应用开发

应用程序目录:TuyaOS/apps/tuyaos_demo_nb_sample
需特别注意,可以将以上生成固件名称及生成固件版本以环境变量的方式传入代码,在tuya_device.c中实现以下函数:

Code: Select all

CONST CHAR_T* device_app_bin_name(void)
{
    return APP_BIN_NAME;
}

CONST CHAR_T* device_user_sw_ver(void)
{
    return USER_SW_VER;
}

设备运行时,会输出以上固件名称及版本号信息以便开发调试及产测信息核对。
另外,对于如下函数的布尔型输出:

Code: Select all

bool device_is_release_ver(void)
{
   // return true;
    return false;
}

可以控制系统日志级别,为"真"时表示正式发布版本,默认输出NOTICE级别日志;为"假"时表示调试版本,默认输出DEBUG级别日志。
本例程提供两种授权信息的烧录方式,代码烧录和生产工具烧录。产品调试阶段建议使用代码烧录方式,需要在编译期间通过环境变量传入如:
CFLAGS += -DDEV_UUID=\"d93dbb4a949c4cb5\"
CFLAGS += -DDEV_AUTHKEY=\"z2bRKjthdvb7frKvQ0vRPSJwf2LZpLI2\"
CFLAGS += -DDEV_PSK=\"ca2BAAAaBA8adc3a\"
CFLAGS += -DDEV_IMEI=\"660102040124193\",
具体的传参方式依据平台环境特性决定。
产品应用开发详细API请参考:
https://developer.tuya.com/cn/docs/iot- ... ff1c1fwdnf