更新时间:2025-11-13 07:31:58下载pdf
本文仅介绍 TuyaOS 开发过程中芯片平台相关的基本信息。有关 TuyaOS 的更多信息,参考 TuyaOS 开发者论坛。
获取方式一:接入蓝牙子设备开发框架后,在 hardware\BK3633\chip_manual\BK3633_Datasheet_V1.5.pdf 路径下,获取芯片手册。
获取方式二:访问 Beken 官方网站,文档中心获取 最新资料。
原厂开发板
BK3633 芯片特点以及产品参数,可访问 Beken 官网 产品中心 > 蓝牙低功耗 SoC > BK3633。
GPIO
有三种可选规格,32 引脚、40 引脚和 48 引脚。具有多达 32 个 GPIO 引脚,可以配置为输入或输出。GPIO 引脚可配置用于第二功能。引脚定义详见 hardware\GR551x\chip_manual\GR551x_Datasheet_Rev.2.3.pdf 内 2 Pin Information 以及 3.2 GPIO 章节。TuyaOS SDK 中默认定义引脚序号与 BK3633 引脚对应关系如下表所示:
| TUYA_GPIO_NUM 定义 | 引脚 |
|---|---|
| TUYA_GPIO_NUM_0 ~ TUYA_GPIO_NUM_07 | P00 ~ P07 |
| TUYA_GPIO_NUM_10 ~ TUYA_GPIO_NUM_17 | P10 ~ P17 |
| TUYA_GPIO_NUM_20 ~ TUYA_GPIO_NUM_27 | P20 ~ P27 |
| TUYA_GPIO_NUM_30 ~ TUYA_GPIO_NUM_37 | P30 ~ P37 |
UART
BK3633 支持两路串口 UART0 与 UART2,默认串口引脚定义如下表(引脚固定,不支持自由配置)。
| UART | 功能 | 引脚 | 描述 |
|---|---|---|---|
| UART0 | TX | P00 | 作为烧录、授权、上位机测试串口 默认波特率 9600 |
| UART0 | RX | P01 | - |
| UART2 | TX | P16 | 作为 Log 日志口 默认波特率 115200 |
| UART2 | RX | P17 | - |
SPI
BK3633 仅支持一路 SPI 接口,支持 SPI Master/Slave 角色,最高速率可达 32 MHz,支持设置的 频率范围为 126 KHz ~ 32 MHz。
TuyaOS 中 SPI 初始化默认使用 SPI Master,将 MISO 与 MOSI 通过引线连接(P06 与 P05 短接)即可测试验证。默认引脚定义如下表所示:
| SPI | 功能 | 引脚 |
|---|---|---|
| SPI0 | CS | P07 |
| SPI0 | CLK | P04 |
| SPI0 | MOSI | P05 |
| SPI0 | MISO | P06 |
I2C
BK3633 仅支持一路 I2C 接口,支持 100 kHz 和 400 kHz 通讯速率可调。SDK 内配置 仅支持 I2C Master 与 7 Bit 地址与 1 Byte 寄存器地址。特殊需求参照 i2c_software_drv.c 修改软驱动。由于 OLED 屏幕为了显示 SDK 信息(TuyaOS Demo)需预先初始化,TuyaOS 中 I2C 初始化默认使用 I2C0,引脚定义如下表所示:
| I2C | 功能 | 引脚 |
|---|---|---|
| I2C0 | SCL | P02 |
| I2C0 | SDA | P03 |
PWM
BK3633 支持 6 路 PWM 输出,即 channel 0~5。SDK 内默认采用 16 M 主晶振作为时钟,支持设置频率范围:1 Hz ~ 8 MHz。通道与默认引脚定义如下表所示:
| 通道 | 引脚 |
|---|---|
| 0 | P10 |
| 1 | P11 |
| 2 | P12 |
| 3 | P13 |
| 4 | P14 |
| 5 | P15 |
ADC
10 位 ADC,多达 8 个通道,包括 5 个外部测试通道和 3 个内部单通道,支持单次和连续模式。其中外部通道支持电压范围 0~1.05 V,精度 ±50 mV。通道与引脚定义如下表所示:
| 通道 | ADC Source |
|---|---|
| 0 | Temperature Sensor(不推荐使用) |
| 1 | P31 |
| 2 | P32 |
| 3 | P33 |
| 4 | P34 |
| 5 | P35 |
| 6 | VBAT1V-pin |
| 7 | VCCBAT-pin |
提高 ADC 测量精度的方法:
为了确保转换值的稳定性,ADC 口需要加个 10 nF 到地电容。
对待测硬件做线性度校准,具体方法如下:
测量 VBAT 基准值。往 VCCBAT 接入稳定标准的 3 V 电压,测量通道 7 的 ADC 值并记录,以下简称 Ymax,也就是 0.75 V 点(VBAT/4)的 ADC 值。建议同批次的硬件多抽样几块板子测量,最终求稳定值。
测量 0 点值。将通道 1-引脚 P31 接到板子的 GND,测量通道 1 的 ADC 值并记录,以下简称 Ymin,也就是 0V 点的 ADC 值。多样本测试方法同上。
实际测量。实际测量通道 x 的 ADC 值,以下简称 Ysample。通过公式换算测量电压值,单位 mV。
V = 750*(Ysample-Ymin) / (Ymax-Ymin)
上述测试基准点的值,需同步填入软件中,位于 tkl_adc.c 文件下,具体如下所示:
// The macro definition is located within the tkl_adc.c file.
// Replace it with the actual measured values from the hardware.
#define ADC_CALIC_VAL_0V ( 16 ) //!< ADC measurement value when connected to GND
#define ADC_CALIC_VAL_0_75V ( 179 ) //!< Connect a standard 3V voltage to VCCBAT, and measure the ADC value.
Flash
| 操作 | 耗时(ms) |
|---|---|
| Erase 4K | 8 ms |
| Write 4K (已擦除) | 35.8 ms |
| Read 4K | 6.89 ms |
按键
P32(引脚简称:P32)
启动时间检测引脚
P31(引脚简称:P31)
进入 main 函数后置为高电平。
软件环境涉及 Keil 和 BK3633 烧录环境安装。
前往 Arm Keil 官方网站 自行安装 Keil 软件,所有安装步骤使用默认配置,推荐使用 mdk528a.exe 版本。
安装期间若弹出安装驱动,选择 安装。
打开 Keil 时,若弹出器件包安装,请手动关闭。
安装 Keil 后,将 UV4.exe 文件所在目录的路径,添加到 环境变量 中。例如:TUYAOS_COMPILE_TOOL: C:\Keil_v5\UV4,结果如下图所示:
安装 Legacy Pack,下载链接:Legacy pack for Arm7, Arm9 & Cortex-R devices。
该平台既支持涂鸦提供的 Visual Studio Code 开发环境,也支持芯片原厂提供的 Keil 开发环境。
Visual Studio Code 开发环境的使用方法详见 获取开发框架 和 编译开发框架 章节。
支持串口烧录,烧录工具安装包位于 .\vendor\bk3633_ble\sdk\BK3633_DesignKit_V06_2411\Tools\ 下,有 2 款工具,分别为:
bk_writer_V2.00_20231218.exe关闭测试功能。
#define TUYA_SDK_TEST 0
关闭涂鸦 Log。
#define ENABLE_LOG 0
#define BOARD_ENABLE_LOG 0
重新进行全量编译后,打开 .map 文件可知,占用的 RAM 和 Flash 空间如下:
使用 USB 串口工具连接板子电源、地以及 UART0(TX:P00 引脚,RX:P01 引脚)。将 RST 复位信号与芯片复位脚 接在一起,对应步骤脚本/上位机都会自动控制 RST 引脚,使设备复位。硬件连接及工具如下图所示:
编译输出产物路径位于 .\log\output\app下,BK3633 固件主要由三部分组成:boot + stack + app,其中:
tuyaos_demo_ble_peripheral_merge_crc.bin = boot + stack + app,支持 UART 烧录,也就是日常说的 生产固件。tuyaos_demo_ble_peripheral_oad.bin = app,支持 UART 烧录,也就是日常说的 OTA 升级固件。tuyaos_demo_ble_peripheral_stack_oad.bin = stack + app,支持 UART 烧录。除非有升级 stack 的需求,一般用不到。
BKFIL 使用说明
操作说明 - 配置与主页面
1:选择烧录文件路径。选择后,主界面的 Bin 文件路径会同步。2:全部擦除。如有需要时,勾选该选项,将整个片子擦除一遍。后续如仅更新代码,无需勾选。3:选择串口。选择对应烧录串口,波特率可用 1M 或 2M,部分串口模组不支持高速率,可尝试降低波特率。4:选择烧录文件。在该界面也可重新选择 Bin 文件路径。5:常用操作。按需选择烧录、擦除 Flash(不同于全片擦除,仅擦除代码区)、读取 Flash 操作。BKFIL 不要在线升级,建议使用 TuyaOS 开发包中的 v2.1.10.0 版本,其他版本可能有兼容性问题。
BK3633 平台目前仅 芯片烧录 上位机工具支持,也就是日常说的 小黄鸭工具,烧录完固件后进行产测授权。
测试方法:使用逻辑分析仪,测量 VCC 引脚 和 启动时间检测引脚 的电平变化时间差。
检测引脚:外设 > 启动时间检测引脚。
启动时间说明:从上电运行至 main 函数,需要 500 毫秒左右 的时间。
BK3633 的 SiP Flash 支持 2 种规格,分别为 512 KB or 1 MB。您需按实际使用芯片规格定义,建议在 app_config.h 下增加宏定义配置,具体如下所示。
// app_config.h
#define BOARD_CHIP_TYPE 0 //!< 512KB Flash
#define BOARD_CHIP_TYPE 1 //!< 1MB Flash
// Flash
//<0=> 512K flash
//<1=> 1M flash
#ifndef BOARD_CHIP_TYPE
#define BOARD_CHIP_TYPE ( 0 )
#endif
BK3633 的 TuyaOS 蓝牙子设备开发包提供两个版本:BLE 从机版本和主从一体版本,分别对应开发平台的芯片类型 BK3633 和 BK3633_M。其中,从机版本相比主从一体版本预留了更多 Flash 空间用于应用固件和应用数据存储。开发者可根据实际项目的蓝牙功能需求进行选择。
512KB Flash 分区(从机版本)
1MB Flash 分区(从机版本)
512KB Flash 分区(主从一体版本)

1M Flash 分区(主从一体版本)

分区调整方法
在原工程中修改 board.h 配置文件下的一些宏定义,即可调整默认的 Flash 分区,会涉及改动的几种可能情况,以下 512K 版本为例 说明。
application 代码大小超过了默认分区的 136K,如何扩容?压缩 unused 区域。
unused 区域用于存储业务数据,但空间不够,如何扩容?压缩 application 与 OTA 区域。
unused 区域 SDK 默认用于存储一些测试数据,可按需自行分配规划。
其他的分区,原则上没必要也不建议改动。
Flash 分区调整后,需对应调整 boot 下的一些参数配置,boot 工程路径位于:.\vendor\bk3633_ble\sdk\BK3633_DesignKit_V06_2411\SDK\projects\boot 下,具体调整方式参考 Boot 调整。复制 编译后生成的 boot 产物 bk3633_boot.bin,并用来 替换 位于 .\.log\output\boot 下的文件。
OTA 存储数据起始地址与大小
// board.h
#if (BOARD_CHIP_TYPE == 0)
// 512K Flash
#ifndef BOARD_FLASH_TUYA_INFO_START_ADDR
#define BOARD_FLASH_TUYA_INFO_START_ADDR (0x79000)
#endif
#ifndef BOARD_FLASH_SDK_TEST_START_ADDR
#define BOARD_FLASH_SDK_TEST_START_ADDR (0x75000)
#endif
#ifndef BOARD_FLASH_OTA_START_ADDR
#define BOARD_FLASH_OTA_START_ADDR (0x4A000)
#endif
#ifndef BOARD_FLASH_OTA_END_ADDR
#define BOARD_FLASH_OTA_END_ADDR (0x6C000)
#endif
#ifndef BOARD_FLASH_OTA_SETTING_ADDR
#define BOARD_FLASH_OTA_SETTING_ADDR (0x7D000)
#endif
#ifndef BOARD_FLASH_OTA_SIZE
#define BOARD_FLASH_OTA_SIZE (BOARD_FLASH_OTA_END_ADDR - BOARD_FLASH_OTA_START_ADDR)
#endif
#else
// 1M Flash
#ifndef BOARD_FLASH_TUYA_INFO_START_ADDR
#define BOARD_FLASH_TUYA_INFO_START_ADDR (0xF9000)
#endif
#ifndef BOARD_FLASH_SDK_TEST_START_ADDR
#define BOARD_FLASH_SDK_TEST_START_ADDR (0xF5000)
#endif
#ifndef BOARD_FLASH_OTA_START_ADDR
#define BOARD_FLASH_OTA_START_ADDR (0x75000)
#endif
#ifndef BOARD_FLASH_OTA_END_ADDR
#define BOARD_FLASH_OTA_END_ADDR (0xC2000)
#endif
#ifndef BOARD_FLASH_OTA_SETTING_ADDR
#define BOARD_FLASH_OTA_SETTING_ADDR (0xFD000)
#endif
#ifndef BOARD_FLASH_OTA_SIZE
#define BOARD_FLASH_OTA_SIZE (BOARD_FLASH_OTA_END_ADDR - BOARD_FLASH_OTA_START_ADDR)
#endif
#endif
Unused 区域
// board.h
// SDK 测试存储地址 16 K
/**@brief Define storage SDK test data addr, such as storage bulk data, and product test common data. */
// 512KB Flash
#ifndef BOARD_FLASH_SDK_TEST_START_ADDR
#define BOARD_FLASH_SDK_TEST_START_ADDR (0x75000)
#endif
// 1MB Flash
#ifndef BOARD_FLASH_SDK_TEST_START_ADDR
#define BOARD_FLASH_SDK_TEST_START_ADDR (0xF5000)
#endif
Boot 调整
测试方法
将板子所有外接引线全部拆除,仅保留与上位机通信串口。可用 USB 转 TTL 工具接板子的串口,USB 串口的 TX 接 P01,USB 串口的 RX 接 P00。
将带有供电能力的电流表接入,供电电压 3.3 V。其中电源正极接 +3 V 丝印位置,电源负极接板子 GND。
通过上位机 功耗管理,即可测试不同模式的功耗数据。
功耗数据
此处测试的功耗为典型的 1s 广播 的平均功耗。
此处测试的功耗为典型的 600 ms 广播 的平均功耗。
此处测试的功耗为典型的系统 Deep Sleep 模式 平均功耗。关闭所有外设,关闭广播,RTC 保持,支持 GPIO 唤醒,RAM 数据保持。
根据您的硬件选择 32 K 时钟来源,在 board.h 下对应配置,具体如下所示。
// 32K clock select, used inter RC32K set to 1, otherwise used external 32.768K crystal.
//<0=> external 32.768K crystal
//<1=> internal RC32K
#ifndef BOARD_USED_INTER_RC32K
#define BOARD_USED_INTER_RC32K (0)
#endif
QFN32 和 QFN48(涂鸦定制版,引脚为 P37)支持外接 32 kHz 晶体,其他封装无对应引脚,默认使用外部32K时钟。时钟晶振建议使用原厂推荐型号,手册位于 TuyaOS 蓝牙子设备开发包/hardware文件夹。
测试硬件:原厂开发板,16 M 晶体 20 ppm 精度,外接 32.768 K 晶体。本地时钟长运挂机 24 小时,误差在 2 秒左右。
默认固件路径的固件不存在。删除 BKFIL.exe 所在文件夹内 settings.ini 文件中的 BinFilePath="xxxxxx" 的固件路径。
32 K 时钟异常。SDK 开发包默认使用外部 32 K 晶体。如果电路板没有焊接外部晶体,将宏 BOARD_USED_INTER_RC32K 设为 1,使能内部 RC 时钟。
16 M 晶振起振异常。使用原厂推荐的晶振型号,PCB 预留负载电容封装。
检查并确保 bootloader 固件的 OTA 起始地址和应用层中 OTA 起始地址保持一致。
该内容对您有帮助吗?
是意见反馈该内容对您有帮助吗?
是意见反馈