SYD8821蓝牙遥控器设计方案【在开发板上功能演示】

SYD8821是具有全球领先低功耗(RX 2.4mA @-94.5dBm灵敏度,TX 4.3mA @0dBm输出功率)的蓝牙低功耗SOC芯片,在极低电流下实现了优异的射频性能,搭配176kB SRAM,512kB flash,非常适合中高阶可穿戴、智能家居、物联网等低功耗应用。具体可咨询:http://www.sydtek.com/

SYD8821蓝牙遥控器设计方案

SYD8821的蓝牙遥控器方案以至于SYD8801的遥控器方案,SYD8801的遥控器方案请看:https://blog.csdn.net/chengdong1314/article/details/70141758
关于本程序的配置以及架构请看:https://blog.csdn.net/chengdong1314/article/details/79599299
关于本程序的烧录和仿真过程请看:https://blog.csdn.net/chengdong1314/article/details/80079490
遥控器方案的目录如下:
这里写图片描述这里写图片描述
打开工程文件后可看到main函数如下:
int main(void)
{
__disable_irq();

ble_init(); 

// RC bumping
sys_mcu_rc_calibration();

sys_mcu_clock_set(MCU_CLOCK_64_MHZ);
#ifdef USER_32K_CLOCK_RCOSC
sys_32k_clock_set(SYSTEM_32K_CLOCK_LPO);
delay_ms(500);
LPOCalibration();						//这是内部RC32k晶振的校准函数	经过该函数后定时器能够得到一个比较准确的值
#else
sys_32k_clock_set(SYSTEM_32K_CLOCK_XO);
#endif

gpio_init();

led_config(LED1);
led_config(LED2);

#ifdef CONFIG_DEBUG_MSG
	dbg_init();
	PMU_CTRL->UART_EN = 1;
#else
	//PMU_CTRL->UART_EN = 0;   //要仿真和打印不能够设为0  要低功耗设为0
#endif

dbg_init();		dbg_printf("\r\nPower On!\r\n"); 

#if 1
//-----------------------------------删除绑定信息----------------------------------------
{
struct gap_bond_dev bonds_device;

	if(bm_s_bond_info_get(&bonds_device) == 1)
	{
		dbg_printf("Delete bond info & reset!!!\r\n");
		
		bm_s_bond_info_delete_all();

		pmu_system_reset();
		while(1);
	}
	else
	{
		dbg_printf("No bond info!\r\n");
	}
}

#endif

#ifdef CONFIG_LED
led_config(LEDALL);
#endif

io_irq_init(user_gpio_callback);

__enable_irq();

start_adv();	

while(1)
{
	ble_sched_execute();

	KeyEvent_Handle();
	
	//要仿真和打印设为POWER_SAVING_RC_ON  要低功耗设为POWER_SAVING_RC_OFF
	//SystemSleep(POWER_SAVING_RC_OFF, FLASH_LDO_MODULE, 11000 , (PMU_WAKEUP_CONFIG_TYPE)(FSM_SLEEP_EN|PIN_WAKE_EN|TIMER_WAKE_EN|RTC_WAKE_EN));
	SystemSleep(POWER_SAVING_RC_ON, FLASH_LDO_MODULE, 11000 , (PMU_WAKEUP_CONFIG_TYPE)(FSM_SLEEP_EN|PIN_WAKE_EN|TIMER_WAKE_EN|RTC_WAKE_EN));
}

}

开发板功能演示

在开发版上功能演示如下:
1.下载代码后复位可看到串口打印如下:
这里写图片描述
实物图如下:
这里写图片描述
2.蓝牙遥控器名称是"SYD-RCU",选择并点击该蓝牙:
这里写图片描述这里写图片描述
3.在上个步骤中蓝牙已经正确连接,接下来点击配对按钮,遥控器正确连接完成:
这里写图片描述
4.接下来如果不按下开发板的任何按键,开发板在30S后将断开连接并进入休眠状态,这里先测试音量减按键,按下音量减按键,可看到手机弹出音量减窗口,并且串口打印如下;
这里写图片描述这里写图片描述
5.接下来测试音量加按键,按下音量加按键,可看到手机弹出音量加窗口,并且串口打印如下;
这里写图片描述这里写图片描述
6.接下来30秒内无操作,可看到手机显示未连接并且串口显示断开然后进入休眠:
这里写图片描述这里写图片描述

到此SYD8821遥控器开发板上的测试完成!
整个测试流程串口打印以及图片请看:https://download.csdn.net/download/chengdong1314/10617641
关于遥控器的源代码请和官方索取!

时下智能语音交互市场火热,越来越多的设备都开始支持远场AI语音交互。 例如:智能音箱,智能电视等等。但这类产品的识别率和误唤醒率还需再不断的优化提升,以至于日常生活中人们还是离不开各式各样的遥控器。而蓝牙语音遥控器这一产品,作为远场语音交互的一个近场配件,也搭上了这趟语音交互的快速列车,成长速度令人惊讶。基于Actions炬芯的ATB1103芯片的语音遥控器,打造了一个AIoT时代的高性价比精品。 一、遥控器应用总体架构 遥控器总体架构分四层,从上到下依次为应用层、应用框架层、硬件抽象层、底层驱动层 1.1、应用层 • 应用状态机– 事件触发让遥控器应用处理不同的状态 • 应用定时器– 定时触发不同的事件,驱动遥控器正常运行 • 应用输入处理– 处理底层来的不同按键消息 • 应用音频输入处理– 将底层的音频处理消息,进行编码,然后通过蓝牙发送给对端设备 • BLE profile – HID profile,提供按键输入输出接口服务 – BAS service,提供电池服务 – DIS service,提供读取设备基本信息的接口服务 – ota profile,提供OTA 升级服务 1.2、应用框架层 • 输入管理– 按键映射处理、按键过滤机制 • 消息管理– 消息分配和释放、 消息发送和接收 • 内存管理– 动态内存管理 • 闪灯管理– 灯资源分配和释放 • 电池管理– 电量读取、电量管理策略 1.3、硬件抽象层 将应用层和驱动层剥离开的中间件层 1.4、底层驱动层 底层硬件操作接口 二、遥控器模块流程概述 2.1、系统启动 系统相关初始化、板级相关外设初始化、蓝牙协议栈相关初始化、HidApp 应用初始化,并进入Main 主循环,等待消息处理 2.2、遥控器状态机 遥控器在运行过程中,主要靠如下3 种状态维持他的正常运行。 2.2.1. 触发遥控器进去空闲状态的事件: > 广播状态,没有连接成功,出现超时事件,进入idle > 连接状态,断开连接,如无操作主动断开连接,然后进入idle 2.2.2. 触发遥控器进入激活状态的事件: > 空闲状态,有按键、首次上电,进入激活状态 > 连接状态,出现异常断开,需要回连,进入激活状态 2.2.3. 触发遥控器进入工作状态的事件: > 激活状态下,配对成功或者回连成功,进入工作状态。 2.3、按键处理 由于遥控器的键值较多,通常用矩阵键盘方式以节省pin 的使用。当使能Key 模块后,Key 控制器就会处于矩阵扫描状态,当检测到外部按键有值时,就会产生中断,中断就将按键信息上报给应用。 2.4、红外处理 • 在非连接状态下,按下按键,就会发射红外码,进而通过红外操作对端设备,如使用红外进行配对. • IRC 协议上,最短的红外码重发时间为108 ms,而按键的重复上报时间,可能小于108ms,也可能大于108ms,因此按键输入和红外发送模块时间上存在三种可能: 2.4.1. 慢速点按 慢速点按动作特征是在大于Trpc 时间后有多次的按键输入。在Ta 时刻,发出初次按键值,在Tb 时刻,不做任何响应,在Tc 时刻,继续发送检测到的按键值,不会发送重复码. 2.4.2. 快速点按 快速点按的动作特征是用户在Trpc 时间内有两次或者以上的按键按下弹起的动作. 在Ta 时刻,将发送出初次按键,而Tb 时刻并不发送按键值,在Tc 时刻,如果按键仍然是按下状态,将发出按键值,否则将丢掉按键值. 2.4.3. 长按 长按的动作特征是按键按下后,一直不放开。此时CPU 检测到按键的持续按下,则在Ta 时刻发送出初次按键,发送出此时按键对应的红外键码,而在Trpc 时间内没有检测到按键的松开,则在Tb 时间输出重复码,直至检测到按键弹起为止. 2.5、语音采集 • 当启动Voice Key 后,ADC 开始采集 • 采集的数据通过DMA 搬运到应用的循环buffer 中,同时发送消息给Main 线程,让其处理语音数据。 • 如果Main 线程处理速度不够快,audioin 驱动就会因为分不到buffer,而将采集的语音数据丢弃。 2.6、BLE数据传送 • 将audioin 驱动发送上来的数据进行编码压缩。 • 然后将编码后的压缩数据切成几个20byte 的数据包 • 最后通过hid profile notify 接口发送给BLE 协议栈 2.7、应用软件Timer管理模块 2.8、LED管理模块 遥控器定义了几种LED 指示灯,用于指示遥控器的一些状态,如下表所示 通常遥控器只有一个物理的LED 灯用于各种场景的指示,这就需要软件上让其分时复用,如果同时需要显示两种状态,状态需要定义优先级,优先级高的状态先指示。如在配对模式下,处于闪灯状态下,这时候按下按键,那么灯还是处于快闪状态。 2.9、O
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值