B80照明应用SDK
SDK概述
SDK 给用户提供基于B80开发的遥控灯,包含remote-light,remote-RGB light,remote-beacon这三种模式,用户可以在这些 demo code基础上开发应用层代码和适配pcb板。
SDK的文件架构
目前sdk的文件结构图为:
chip
chip里面主要包含B80芯片的驱动和启动代码,其中启动代码包含了三种模式,boot文件夹中包含cstartup_flash.S,cstartup_otp.S,cstartup_sram.S,分别对应宏MCU_STARTUP_FLASH,MCU_STARTUP_OTP, MCU_STARTUP_SRAM来控制,通过在IDE中配置对应的宏来选择不同的模式。
cstartup_flash.S :flash模式,烧录程序在flash中运行,开发板有外置flash可以选择这种模式。
cstartup_otp.S:otp模式,烧录程序在otp中,由于B80最终是采用内置otp的方式,最终量产的产品采用otp的选项。
cstartup_sram.S:sram模式,在没有外置flash,需要做简单调试的时候可以采用这种模式进行调试,避免otp被写后无法改变。
Driver文件夹里面对应的是B80对应的驱动文件以及rf,pm对应的函数库。
common
div_mod.s定义的是一些通用的接口,例如大数乘法之类的汇编接口。其余的函数是通用的类型定义以及类似于memcpy,memcmp之类的接口。
demo
demo文件夹里面定义的是用户层的代码。
其中common文件夹中包含的是所有编译选项共用的文件夹选项。其余的文件夹分别对应不同的编译分支。
project
project为工程文件夹,其中的.cproject,.project文件为对应的工程文件,.boot.link为链接文件,不建议客户修改,proj_lib为库存放的路径,其中的文件夹为编译生成的文件,例如LIGHT文件夹里面会生成LIGHT.bin和LIGHT.lst。
其余文件夹
Doc里面对应的是release版本信息,tool里面对应的是一些打包的工具。
Demo project
B80 remote light的sdk是给客户开发的编译分支,用户可以通过demo操作来观察直观的效果,也可以在demo code上面修改,完成自己的应用程序部分的开发。
SDK收发包以及配对部分的处理
以下讲述配对和收发包流程目前都基于remote-light的模式。
SDK配对的流程介绍
Tx发射的参数:
发射频道:2401mhz,2424mhz,2451mhz,2476mhz,4个信号上发送。
发射的accesscode: {0x71,0x76,0x51,0x39,0x95}
发射功率为:11.46dbm
Sdk的配对原理:
上电5s内,短按某组的开灯键一次。即可完成配对。配对成功LED闪灯3次。
上电5s内,短按某组的开灯键连按5次(间隔小于500ms)。即可完成清除配对信息。清除配对信息成功LED闪灯5次。
上电5s内,收到非开灯键命令,退出配对模式,进入正常状态。
sdk配对的流程图:
SDK收发包的流程介绍
以remote工程为例, 发包的函数说明:
void package_data_init_func(void)
发包数据初始化。配置VID信息,重特定otp地址或者remote的PID,从模拟寄存器获取保存的信息。
void package_data_set_newcmd(unsigned char key_value,unsigned char* para)
配置新命令。更新rf_seq_no,控制码和控制码参数。
void package_data_send_func(void)
调用rf模块把命令发送出去。(remote发送TTL=5)(命令一般重复发送15次,除非中途被更新为新命令。)
void package_data_store_func(void)
保存命令码的group&rf_seq_no信息到模拟寄存器中。防止在深睡唤醒后丢失信息。
发包的逻辑流程图:
以light工程为例,, 转发命令的函数说明:
Light把收到的remote控制命令转发给其他light设备。
void rfc_send_relay_pkt(void)
转发收到的remote命令,ttl减1,防止无限转发。
发包的逻辑流程图:
收包的接口说明:
void sys_status_process(void)
中断函数void light_irq_handler(void)中判断接收的数据为配对的remote发出的新命令。然后在函数void sys_status_process(void)处理相应的控制命令。
收包的逻辑流程图:
remote矩阵键盘扫描
按键矩阵行和列个数配置:
#define KB_COL_NUM 5
#define KB_ROW_NUM 3
按键行列的管脚配置:
gpio_column[KB_COL_NUM]={GPIO_PB0,GPIO_PB1,GPIO_PB4,GPIO_PB5,GPIO_PB6};//矩阵列的IO
gpio_row[KB_ROW_NUM] ={GPIO_PD3,GPIO_PD6,GPIO_PA0};//矩阵行的IO
按键键值配置:
key_table[KB_ROW_NUM][KB_COL_NUM] //按键表格
按键扫描原理:
当一个按键两端分别接一个IO口,一个IO口置高电平另一个置低电平,当按下按键时高电平IO口电平被拉低,另一端还是为低电平,这时检测IO口值就是两个低电平。
EEPROM
Eeprom目前是内置的B80芯片内部的,用于存储配对pid和group的信息,大小为256bytes。
void e2prom_init();
配置eeprom的初始化,以及内部eeprom的管脚的初始化。
void e2prom_write (u8 adr, u8 *p, int len);
adr为eeprom内部的地址,p为写入buffer的头指针,len为写入到eeprom的长度。
void e2prom_read (u8 adr, u8 *p, int len);
adr为eeprom内部的地址,p为读取buffer的头指针,len为读取到eeprom的长度。
LED
亮度加减键和色度加减键调节LED变化原理:
light目前预设10档变化,每档参数保存在数组led_luminance_value和led_chroma_value。接收亮度或者色度变化命令后,跳入下一档参数作为LED的目标值。LED渐变到目标值后,就不再变化。
LED颜色渐变过程:
每隔5ms检查一次,当设置的目标亮度或者色度和当前值有差异的时候,单步调节当前的参数(亮度单步变化为10,色度单步变化为1,不足对齐目标值),一直到调节到目标值。完成颜色渐变的过程。
SDK调试说明
Tdebug调试
通过wtcdb工具,查看对应的变量,通过变量观察对应的变量来debug。
串口打印调试说明
#define DEBUG_MODE 1
通过DEBUG_MODE来打开和关闭打印函数。
#define PRINT_BAUD_RATE 115200 //1M baud rate,should Not bigger than 1Mb/s
#define DEBUG_INFO_TX_PIN GPIO_PD3
通过PRINT_BAUD_RATE来配置串口的波特率,DEBUG_INFO_TX_PIN来配置打印的接口。Printf作为标准打印的接口,printhex打印数组。
DEBUG_MODE =0 关闭打印模式,并且在编译的过程中,不会编入和打印相关的函数,客户在调试阶段可以打开,量产程序建议关闭能节约ram和code。
SDK的代码说明
分别介绍remote-light,remote-rgb light,remote-beacon这3种模式的详细介绍,以及以light工程为例,介绍初始化接口以及主循环里面的处理。
Remote
初始化函数接口介绍
led_gpio_init(LED1)
初始化LED管脚。每次只能初始化1个。
keyscan_gpio_init();
初始化按键矩阵管脚
package_data_init_func()
初始化发包数据。包括固化的VID、从OTP中读取的PID、从模拟寄存器恢复的group&rf_seq_no.
rfc_init_func()
初始化RF模块。RF配置成tx_mode,用于发送命令。
Loop接口介绍
unsigned char keyscan_scan_func(void)
扫描按键矩阵。返回按键键值。通过按键发送控制命令。(OFF命令按键抬起才开始发送,OFF长按发送夜灯模式命令,色温和亮度变化支持长按>320ms连续发送新命令,其他命令按键按下后发送命令)
Light
初始化函数接口介绍
rfc_init_func()
初始化RF模块。RF配置成Rx_mode。用于接收remote命令。
led_pwm_init_func()
把LED灯管脚配置成PWM功能。后续通过改变PWM波形,改变LED亮度和色度以及亮灭等状态。
led_init_func()
根据之前保存的参数,恢复light的亮灯状态。
sys_status_init()
初始化系统状态。默认配网状态。
Loop接口介绍
void sys_status_process(void)
处理RF接收到的控制命令,并触发对应的操作。
led_task_process_func()
处理LED闪烁。每隔500ms,亮度由500变成0,再由0变成500。循环闪烁。
处理LED亮度和色度渐变。每隔5ms,单步变化LED当前的亮度和色度参数,逐步向目标亮度和色度靠近,达到目标保存LED参数。
更改LED本地模式信息。如果非本地模式上电超过500ms,则保存状态“下次上电不需要切换到本地模式”。下次重新上电不会进入本地模式。
time_event_process_func()
定时切换RF的接收通道。(默认20ms切换一次,4通道循环切换)。
sys_status_check_func()
检查系统状态。配对模式超过6s,切换到正常模式。CMD_ON命令间隔超过500ms,退出清码状态。
LIGHT_BEACON
略。同Light。
REMOTE_BEACON
略。同Light。
LIGHT_RGB
rf_packget_pro_func()
处理RF接收到的控制命令,并触发对应的操作。
void led_task_process_func(void)
LED闪烁。每隔500ms,亮度由500变成0,再由0变成500。循环闪烁。
LED亮度和色度渐变。每隔5ms,单步变化LED当前的亮度和色度参数,逐步向目标亮度和色度靠近,达到目标保存LED参数。
LED的RGB颜色渐变。包括流水灯功能和RGB显示。
REMOTE_RGB
略。同Light。
SDK配置文件说明
射频参数和频点的配置
Accesscode: 通过修改RF_ACCESS_CODE_USE
频点: LIGHT&REMOTE和LIGHT RGB/REMOTE RGB默认使用频点{1,24,51,76},修改变量rf_channel[4]可以改变频点。LIGHT BEACON&REMOTE BEACON使用固定频点: {37,38,39}
发射功率:
#define RF_POWER RF_POWER_P11p46dBm
发射的模式选择:
#define RF_MODE RF_PRIVATE_2M
IO口的配置
#define LED_R GPIO_PB3//read
#define LED_G GPIO_PB4//green
#define LED_B GPIO_PB5//blue
#define LED_Y GPIO_PB6//yellow
#define LED_W GPIO_PD4//white
通过修改不同的LED的gpio的定义来修改不同的LED的配置。
修改主频
通过修改app_config.h文件中的宏定义CLOCK_SYS_CLOCK_HZ,宏定义选项有12M,16M,24M,32M,48M。
配置产品VID
#define REMOTE_VID 0x5453
配置REMOTE PID的OTP地址
#define PID_ADDR 0x3fe0
配置命令发送次数
#define TTL_MAX 5 //remote命令可转发次数
#define NUM_SENDING_CMD_CTR 15//单个控制命令最少发送次数,除非中途切换新命令
#define NUM_SENDING_CMD_NONE 5//空命令重发次数
操作简介
REMOTE&LIGHT和REMOTE_BEACON&LIGHT_BEACON按键功能介绍
全开:
短按或者长按,发出全开灯命令,把附近和remote配对的light全部开灯。
全关:
按下<1.5s,按键抬起后发出全关灯命令,把附近和remote配对的light全部关灯。
按键>1.5s,发送全部进入夜灯模式命令,把附近和remote配对的light全部进入夜灯模式。
组1开:
短按或者长按,发出组1开灯命令,把附近和组1配对的light全部开灯。
组1关:
按下<1.5s,按键抬起后发出组1关灯命令,把附近和组1配对的light全部关灯。
按键>1.5s,发送组1进入夜灯模式命令,把附近和组1配对的light全部进入夜灯模式。
组2开/组3开/组4开/:同理“组1开”。
组2关/组3关/组4关/:同理“组1关”。
亮度加/亮度减:
选择组别(按下组别开关键,例如“组1开”或者“组1关”),然后按下亮度加/亮度减键。
按键短按,单次发送单次命令。亮度单次变化。
按键长按,每个320ms左右,持续发送命令,亮度持续变化。
色度加/色度减:
选择组别(按下组别开关键,例如“组1开”或者“组1关”),然后按下色度加/色度减键。
按键短按,单次发送单次命令。色度单次变化。
按键长按,每个320ms左右,持续发送命令,色度持续变化。
REMOTE_RGB&LIGHT_RGB按键功能介绍
色温灯开:
短按或者长按,发出开灯命令,把附近和remote配对的色温灯全部开灯。
色温灯关:
短按或者长按,发出关灯命令,把附近和remote配对的色温灯全部关灯。
亮度加/亮度减/色度加/色度减:
按键短按,发送单次命令,light led单次变化。
按键长按,320ms定时更新命令,light led持续变化。
RGB呼吸灯模式不响应色温和亮度调节命令。
夜灯模式:
短按或者长按,发出夜灯模式命令,把附近和remote配对的色温灯全部进入夜灯模式。
RGB呼吸灯模式:
短按或者长按,发出夜灯模式命令,把附近和remote配对的色温灯全部进入RGB呼吸灯模式。
对码:
light上电<6s,remote短按或者长按发出配对命令,light收到命令,保留配对信息并闪灯3次。
light上电>6s,remote短按或者长按发出配对命令,light无任何动作。
清码:
light上电<6s,remote短按或者长按发出清码命令,light收到命令,清除配对信息并闪灯5次。
light上电>6s,remote短按或者长按发出清码命令,light无任何动作。
RGB设置:
短按或者长按,发出RGB设置命令,把附近和remote配对的色温灯全部RGB灯亮50%。