更新时间:2024-07-30 03:10:31下载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\BK3633\chip_manual\BK3633_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 与 7bit 地址。由于 OLED 屏幕为了显示 SDK 信息(TuyaOS Demo)需预先初始化,TuyaOS 中 I2C 初始化默认使用 I2C0,引脚定义如下表所示:
I2C | 功能 | 引脚 |
---|---|---|
I2C0 | SCL | P02 |
I2C0 | SDA | P03 |
PWM
BK3633 支持 6 路 PWM 输出,即 channel 0~5。SDK 内默认采用 16M 主晶振作为时钟,支持设置频率范围:1Hz ~ 8MHz。通道与默认引脚定义如下表所示:
通道 | 引脚 |
---|---|
0 | P10 |
1 | P11 |
2 | P12 |
3 | P13 |
4 | P14 |
5 | P15 |
ADC
10 位 ADC,多达 8 个通道,包括 5 个外部测试通道和 3 个内部单通道,支持单次和连续模式。其中外部通道支持电压范围 0~1.05V,精度 ±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 口需要加个 10nF 到地电容。
对待测硬件做线性度校准,具体方法如下:
测量 VBAT 基准值。往 VCCBAT 接入稳定标准的 3V 电压,测量通道 7 的 ADC 值并记录,以下简称 Ymax,也就是 0.75V 点(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
,结果如下图所示:
支持串口烧录,烧录工具安装包位于 .\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 操作。
BK3633 平台目前仅 芯片烧录 上位机工具支持,也就是日常说的 小黄鸭工具,烧录完固件后进行产测授权。
测试方法:使用逻辑分析仪,测量 VCC 引脚 和 启动时间检测引脚 的电平变化时间差。
检测引脚:外设 > 启动时间检测引脚。
启动时间说明:从上电运行至 main
函数,需要 500 毫秒左右 的时间。
BK3633 的 SiP Flash 支持 2 种规则,分别为 512KB or 1MB。您需按实际使用芯片规格定义,建议在 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
512KB Flash 分区
1MB 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 测试存储地址 16K
/**@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.3V。其中电源正极接 +3V 丝印位置,电源负极接板子 GND。
通过上位机 功耗管理,即可测试不同模式的功耗数据。
功耗数据
此处测试的功耗为典型的 1s 广播 的平均功耗。
此处测试的功耗为典型的 600ms 广播 的平均功耗。
此处测试的功耗为典型的系统 Deep Sleep 模式 平均功耗。关闭所有外设,关闭广播,RTC 保持,支持 GPIO 唤醒,RAM 数据保持。
根据您的硬件,选择 32 KHz 时钟来源,在 board.h
下进行对应配置,具体如下所示。
// Select 32K clock, set to 1 to use internal RC32K, and set to 0 to use external 32.768K crystal.
//<0=> external 32.768K crystal
//<1=> internal RC32K
#ifndef BOARD_USED_INTER_RC32K
#define BOARD_USED_INTER_RC32K (1)
#endif
QFN32 支持外接 32 kHz 晶体,其他封装无对应引脚,默认使用内部 RC。如果对时钟精度有高要求,16M 主晶体需选择精度高的,或产品方案上有可做时间同步的设备(例如蓝牙网关),子设备可定期主动进行时间同步。
QFN48 即将推出支持外接 32 kHz 晶体版本,引脚为 P37。
测试硬件:原厂开发板,16 MHz 晶体 20ppm 精度,外接 32.768K 晶体。本地时钟长运挂机 24 小时,误差在 2 秒左右。
该内容对您有帮助吗?
是意见反馈该内容对您有帮助吗?
是意见反馈