跳转至

B80照明应用SDK


SDK概述

SDK 给用户提供基于B80开发的遥控灯,包含remote-light,remote-RGB light,remote-beacon这三种模式,用户可以在这些 demo code基础上开发应用层代码和适配pcb板。

SDK的文件架构

目前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文件夹里面定义的是用户层的代码。

"demo文件夹结构"

其中common文件夹中包含的是所有编译选项共用的文件夹选项。其余的文件夹分别对应不同的编译分支。

project

project为工程文件夹,其中的.cproject,.project文件为对应的工程文件,.boot.link为链接文件,不建议客户修改,proj_lib为库存放的路径,其中的文件夹为编译生成的文件,例如LIGHT文件夹里面会生成LIGHT.bin和LIGHT.lst。

"project文件夹结构"

其余文件夹

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配对的流程图:

"light&remote配对流程"

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信息到模拟寄存器中。防止在深睡唤醒后丢失信息。

发包的逻辑流程图:

"remote命令发包流程"

以light工程为例,, 转发命令的函数说明:

Light把收到的remote控制命令转发给其他light设备。

void rfc_send_relay_pkt(void)

转发收到的remote命令,ttl减1,防止无限转发。

发包的逻辑流程图:

"light命令转发流程"

收包的接口说明:

void sys_status_process(void)

中断函数void light_irq_handler(void)中判断接收的数据为配对的remote发出的新命令。然后在函数void sys_status_process(void)处理相应的控制命令。

收包的逻辑流程图:

"light命令响应流程"

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。

"wtcdb调试"

串口打印调试说明

#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和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_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%。