更新时间:2025-11-04 07:13:32下载pdf
本文介绍如何将蓝牙芯片自主接入涂鸦云平台。以下步骤描述以 nRF52832 为例。
关于如何自主接入蓝牙芯片,流程如下所示:
如果您想使用 TuyaOS 开发框架进行产品开发,但是 TuyaOS 不支持您使用的芯片平台,此时可以通过 TuyaOS 三方对接的方式,向 TuyaOS 开发者团队申请。审批通过后,即可获取适用于期望芯片平台的 TuyaOS SDK 模式的开发框架,然后自主地进行 TuyaOS Kernel 接口的适配、调试和验证。移植完成之后,即可进行产品的开发。
移植之前,要完成一些准备工作:
了解 TuyaOS。
了解和安装 Tuya Wind IDE。
准备工作完成后,将 TuyaOS 移植申请模板 需要的信息提供给跟您对接的业务线产品经理,并由业务线产品经理通过发送邮件的方式代为申请,申请的同时说明具体的业务需求(即在邮件中附上涂鸦的 Wiki 链接)。
TuyaOS 移植申请模板
标题:三方平台自主接入申请 - 蓝牙
申请人:<涂鸦开发者平台账号>
企业:<申请人所属企业>
联系方式:<申请人的联系方式,手机号码>
申请原因:<提供详细的申请原因和用途,有效地提高审批效率>
开发类型:<联网单品/网关/中控/IPC/Zigbee/蓝牙/NB-IoT>
备注:<其他一些特别需求,需要详细描述>
芯片详情:
名称:<芯片名称,英文,例如 nRF52832 >
厂商:<芯片生产厂商简写,英文,例如 Nordic >
型号:<芯片型号,英文,例如 nRF52832 >
架构:<芯片架构,例如 ARM Cortex-M4 >
芯片类型:<芯片分类:Wireless SoC/MCU>
通信类型:<芯片的通信类型,仅 Wireless SoC 需要选择,包括 Ethernet/Wi-Fi/Wi-Fi& Bluetooth LE/Bluetooth/Zigbee/Cellular/NB-IoT>
bit 位宽:<芯片总线位宽,16 位/32 位/64 位>
操作系统:<芯片操作系统类型:Linux/RTOS/Non-OS>
大小端:<小端/大端>
开发环境:
- 开发工具,例如 Keil。
- 开发工具版本,例如 V5.28.0.0,可添加截图。
- 电脑系统要求,例如 Windows 10 及以上,写您已知的要求即可。
- 开发环境搭建步骤,详细且具备实操性,需要在新电脑上面验证过(十分重要,需要写清楚安装什么路径下的什么软件,点击什么位置)。
- 编译并生成 C 语言库文件的详细步骤及示例程序(十分重要,需要写清楚点击什么位置,配置什么信息,有可能遇到什么异常,需要怎么处理)。
- 如果芯片平台是基于 GCC 编译工具链的(如 RISC-V 架构的芯片),请提供对应的 toolchain 以及关键编译参数。涂鸦提供一份标准模版。<vendor.json>,请按需填写(如工具链路径、编译器选项、链接脚本等)并在申请时作为附件一并发送给涂鸦,详见 附件 1:GCC 编译脚本。
- (上述两步骤的目的:涂鸦需要基于开发者提供的教程将涂鸦 SDK 中的一部分源代码生成库文件,然后将库文件加入到涂鸦 SDK 中释放给开发者。涂鸦对于开发者的开发环境并不熟悉,所以需要开发者提供生成 C 语言库的详细教程,这是三方芯片导入的前提,教程模版)。
- 相关资料压缩包,压缩包名称要求:
TuyaOS_SDK_公司名称\_芯片型号,例如 TuyaOS_SDK_xxxx_nRF52832。开发环境资料及使用说明详见附件:TuyaOS_SDK_xxxx_nRF52832。
收件人:蓝牙线产品经理(抄送对接的涂鸦商务、PM 等)
邮件发送完成后,等待审批结果。
如果审批通过,则可以通过 Tuya Wind IDE,选择 TuyaOS SDK 模式,以及对应的开发框架、类型开发包、芯片平台来下载所需开发框架。更多信息,查看教程。
注意:SDK 中存在一些安全相关的 C 语言库文件,涂鸦根据您提供的芯片开发环境,对这些文件进行编译生成库文件。因此,您提供的开发环境相关信息以实用性为主,以便提供一个生成库文件的环境及相关信息,帮助涂鸦对接人员快速了解环境,以期更好地为您服务。
涂鸦准备并提供 SDK,完成三方芯片自主对接的完整流程。
IDE 审批流程,目前由人工完成,后续会由 IDE 接管。
后台新增芯片型号及资料,目前由人工完成,后续会由自动化工具生成。
涂鸦对接人员会根据 步骤 1 中收到的相关资料生成库文件,目前蓝牙开发包核心组件库只有 3 个。已导入芯片平台位于 .\software\TuyaOS\libs 文件夹,自主接入芯片平台将位于 .\software\TuyaOS\vendor\nrf52832_ble\sdk\lib 文件夹。
安全库生成,人工操作。
SDK 打包流程,人工操作。将库文件、源文件及其他相关资料打包后形成 SDK。
SDK 以白名单形式发布到 Tuya Wind IDE 平台,人工操作。关于如何获取 SDK,参考 TuyaOS 开发蓝牙产品之环境搭建。
在开始移植之前,强烈建议您先体验 已导入的芯片平台,再开始移植您自己的芯片平台。很多问题都可以参考已导入的芯片平台。
体验步骤一般为:
按顺序阅读 涂鸦开发者论坛 内 TuyaOS 快速入门 相关资料,根据资料获取相关开发包并体验。
移植一般分为三个阶段性目标:
将相关文件放置到指定位置。
添加源文件/头文件并编译通过。
实现接口并测试通过。
移植的所有工作都位于 .\software\TuyaOS\vendor 文件夹内,请勿修改其他位置的文件及代码。
准备工作完成后,就可以开始移植。详细的移植步骤如下:
打开 步骤 2 获取的 SDK。
将芯片原厂的 SDK 放置到 .\software\TuyaOS\vendor\xxxx_ble\sdk 目录下。
将以下文件夹内的所有源文件和库文件添加到芯片原厂提供的示例工程中。
.\software\TuyaOS\apps\tuyaos_demo_ble_peripheral //tuyaos_demo_ble_peripheral 可能是其他的名字
.\software\TuyaOS\components\……\src //"\software\TuyaOS\components"文件夹下的所有子文件夹
.\software\TuyaOS\libs //为空则不添加
.\software\TuyaOS\vendor\nrf52832_ble\tuyaos\bluetooth
.\software\TuyaOS\vendor\nrf52832_ble\tuyaos\drivers
.\software\TuyaOS\vendor\nrf52832_ble\tuyaos\include
.\software\TuyaOS\vendor\nrf52832_ble\tuyaos\system
.\software\TuyaOS\vendor\nrf52832_ble\tuyaos\utilities
.\software\TuyaOS\vendor\nrf52832_ble\sdk\lib
将以下头文件目录添加到芯片原厂提供的示例工程中。
.\software\TuyaOS\apps\tuyaos_demo_ble_peripheral
.\software\TuyaOS\apps\tuyaos_demo_ble_peripheral\include
.\software\TuyaOS\components\……\include //"\software\TuyaOS\components"文件夹下的所有子文件夹
.\software\TuyaOS\include //"\software\TuyaOS\include"文件夹下的所有含头文件的子文件夹
.\software\TuyaOS\vendor\nrf52832_ble\tuyaos\include
.\software\TuyaOS\vendor\nrf52832_ble\sdk\lib //".\software\TuyaOS\vendor\nrf52832_ble\sdk\lib"文件夹下的所有含头文件的子文件夹
尝试修改代码,直到编译通过。
根据 .\software\TuyaOS\include\vendor\adapter 里的头文件和 \software\TuyaOS\vendor\ats2835x_bt_le\tuyaos_doc 里的 API 文档说明,实现涂鸦 Tuya Kernel Layer(TKL)层接口,所有接口位于以下文件夹的源文件中:
.\software\TuyaOS\vendor\nrf52832_ble\tuyaos\bluetooth
.\software\TuyaOS\vendor\nrf52832_ble\tuyaos\drivers
.\software\TuyaOS\vendor\nrf52832_ble\tuyaos\include
.\software\TuyaOS\vendor\nrf52832_ble\tuyaos\system
不需要实现所有的接口,可参考 已导入的芯片平台,实现相同的接口即可。
如果在移植过程中遇到任何问题,请在 TuyaOS 开发者论坛 TuyaOS-蓝牙设备开发 版块通过发帖的方式寻求帮助。涂鸦有机器人实时关注论坛上帖子的情况,实时为您解决问题。
您结合涂鸦提供的测试用例和 已导入的芯片平台 进行自测,通过所有测试用例,实现 已导入的芯片平台 的同等功能或其他高级功能,并将测试结果发送给对接人。
测试过程中出现问题的排查方法:
在完成 TuyaOS 移植工作并自测完成后,您根据需要进行产品业务开发,也可以将 SDK 提供给第三方开发者进行产品开发。
为了方便其他开发者的使用,您在移植工作完成后,建议仿照已导入的芯片平台完成《平台功能说明》文档,例如 nRF52832 平台功能说明。
涂鸦对接人将测试结果和《平台功能说明》文档进行归档。
大部分常用的蓝牙芯片不支持 RTOS,所以上述流程是针对非 RTOS 芯片进行介绍的。
如果要基于 TuyaOS 蓝牙 LE SDK v3.12.3 版本接入支持 RTOS 的蓝牙芯片,按照以下步骤进行操作。单击此处下载 涉及到的文件。
\software\TuyaOS\apps 路径下的 tuyaos_demo_ble_peripheral 文件夹。\software\TuyaOS\vendor\xxxx_ble\tuyaos\system 路径(其中 xxxx_ble 是由您要接入的芯片平台决定)下,新增 tkl_thread.c 和 tkl_queue.c 文件。tkl_thread.c 和 tkl_queue.c 文件中的接口。当前内容为 FR801x 平台的接口实现,供您参考。tkl_memory.c 中的接口,否则不建议改动。如果要基于 TuyaOS 蓝牙 LE SDK V3.9.0 版本接入支持 RTOS 的蓝牙芯片,按照以下步骤进行操作。单击此处下载 涉及到的文件。
替换 \software\TuyaOS\apps 路径下的 tuyaos_demo_ble_peripheral 文件夹。
替换 \software\TuyaOS\components\tal_ble_protocol\src 路径下的 tuya_ble_port.c 和 tuya_ble_main.c 文件。
在 \software\TuyaOS\vendor\xxxx_ble\tuyaos\system 路径(其中 xxxx_ble 是由您要接入的芯片平台决定)下,新增 tkl_thread.c 和 tkl_queue.c 文件。
根据芯片平台,重新实现 tkl_thread.c 和 tkl_queue.c 文件中的接口。当前内容为 FR801x 平台的接口实现,供您参考。
如果芯片 RAM 不足,可使用 OS 相关接口重新实现 tkl_memory.c 中的接口,否则不建议改动。
其他内容与 NO-OS(不支持 RTOS)的移植过程相同,参考上文中的 步骤 1 ~ 步骤 6。
除了 fr801x_ble_os 以外,涂鸦已导入的芯片平台都是非 RTOS 芯片。fr801x_ble_os 下载方式如下:
开发模式:TuyaOS OS 开发
类型开发包:子设备开发/蓝牙设备开发包
开发平台:Wireless SoC/FREQCHIP/Bluetooth/FR8018HA
TuyaOS 版本:TuyaOS-3.9.4
下载之前,联系产品经理添加白名单。
tkl_system_get_random(真随机数,每次上电不同)。tal_sw_timer_xxxx 开头的多个接口,详见上文提到的 API 说明文档)。适用于 GCC 编译工具链,请根据目标芯片平台的特性调整以下核心参数,并在申请 SDK 时 务必附带此配置文件。未提及字段(如 objcopy、after-build)建议保留默认值。您可以 点击链接下载标准模版。
bin_path:指向编译工具链可执行文件的路径(gcc、ar、objdump 等),其中 $PROJECT_ROOT/vendor/xxxx_ble/toolchain/software/ 为固定格式,后续请按您提供工具链的绝对路径填写。cc:C 编译器(Cross Compiler)的可执行文件名称,用于将 C 源代码(.c)编译为目标文件(.o)。asm:汇编器(Assembler)的可执行文件名称,用于将汇编源代码(.s/.S)编译为目标文件(.o)。c_flags:C 代码 全局编译选项与规则。s_flags:汇编代码 全局编译选项,用于控制汇编代码(.s/.S 文件)的编译行为,一般必须与 c_flags 保持一致以避免 ABI 冲突。ar:静态库归档工具(Archiver),用于将多个目标文件(.o)打包为静态库文件(.a)。{
"tool": {
"gcc": {
"toolchain": {
"bin_path": "$PROJECT_ROOT/vendor/xxxx_ble/toolchain/software/risc-v/bin"
},
"cmd": {
"gcc": {
"cc": "riscv64-unknown-elf-gcc.exe",
"asm": "riscv64-unknown-elf-gcc.exe",
"c_flags": "-march=rv32imafc -mabi=ilp32f -g3 -Os -pipe -nostdlib -fsingle-precision-constant -fno-tree-switch-conversion -fno-strict-aliasing -fno-jump-tables -fno-common -fno-builtin -fdata-sections -ffunction-sections",
"s_flags": "-march=rv32imafc -mabi=ilp32f -g3 -Os -pipe -nostdlib -fsingle-precision-constant -fno-tree-switch-conversion -fno-strict-aliasing -fno-jump-tables -fno-common -fno-builtin -fdata-sections -ffunction-sections",
"c_macros": ""
},
"ld": "",
"objcopy": "",
"objdump": "",
"size": "",
"ar": "riscv64-unknown-elf-ar.exe",
"before-build": [],
"after-build": [
"",
""
]
},
"output": {
"UG": "output/tuyaos_demo_ble_peripheral_fw.bin",
"UA": "output/tuyaos_demo_ble_peripheral_fw.bin",
"QIO": "output/tuyaos_demo_ble_peripheral_fw.bin",
"PROD": "output/tuyaos_demo_ble_peripheral_fw.bin"
},
"flash": {
"bin_path": "",
"flash_user_cmd": "",
"flash_all_cmd": ""
}
}
}
}
该内容对您有帮助吗?
是意见反馈该内容对您有帮助吗?
是意见反馈