自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

WPI_Leo的博客

NXP BLE产品(QN9020/QN9021/QN9022)技术汇总

  • 博客(28)
  • 收藏
  • 关注

原创 QN9022自定义广播包数据

QN9022的广播包数据有两种:1、广播包 adv_data,最大长度31字节2、反馈包 scanrsp_data,最大长度31字节以上两种广播包都可以包含多组数据,第一组数据的格式为:长度+数据类型代码+数据一、广播包 adv_data,在函数app_set_adv_data里: // Advertising data, BLE only,

2017-04-28 20:21:03 1020

原创 BASS 电池电压修正

printf("battery voltage: %dmV\r\n", (388*ADC_RESULT_mV(battv))/100);规格书上写的是4倍的关系,有0.1V误差,改为3.88倍待验证。。

2017-01-12 10:50:53 519

原创 广播包里加MAC地址

1、定义个放MAC的数组uint8_t bdadd_Leo[6];2、获取MAC,在函数app_task_msg_hdl里加入: case GAP_READ_BDADDR_REQ_CMP_EVT://leo bdadd_Leo[0]=((struct gap_read_bdaddr_req_cmp_evt *)param)->addr.addr[0]; bda

2016-12-23 14:09:07 2226

原创 做主机连接失败以后的处理

1.     这里面的timeout 是指连上之后的参数,表示多长时间没有收到对方包而认为是断链。2.     le_create_conn  这个函数本身是没有超时动作的,所以如果外部没有这个设备是死等操作。3.     如客户这个问题,如果外面设备不存在,应该是这样处理, 在调用链接函数的时候开启一个超时定时器,如果时间到了还没有连上,则退出此函数,调用app_gap_le_can

2016-08-23 11:18:09 604

原创 广播期间功耗计算

平均电流跟广播间隔有关,非广播期间是睡眠,3-5uA。广播一个包大概1ms为了好算,广播时的电流按10mA比如,200ms广播间隔,基本就是10mA * 1ms/200ms=50uA

2016-08-09 09:13:52 1131

原创 memcpy注意点

char buf[20];memcpy( buf, data_in, 20);这个结果是对的,buf结果修改不用动到data_in而如果第一行buf的定义改为:char *buf;执行的结果就会同时修改到data_in,因为memcpy把data_in的地址给了buf的地址,所以会同时修改

2016-07-26 16:26:44 642

原创 debug(1) Android手机连接不上

屏蔽掉下面一行:app_gap_param_update_req(((struct gap_le_create_conn_req_cmp_evt *)param)->conn_info.conhdl, &conn_par);原因:有些手机不支持更新的链接间隔,手机端对更新的参数认为不合法。一般手机是说如果连接参数不合法,它只是拒绝,但不会断链。影响:不更新连接间隔会

2016-07-13 17:14:36 438

原创 debug(3) 死机原因及解决方法

1、UART问题原有UART代码在中断的时候buf_ptr++,没考虑指针越界的问题,需要加上指针边界。解决方法:在UART_READ函数里加上初始指针地址uart0_env.rx.bufptr = bufptr;bufptr_start=app_uart_env.buf_rx;UART RX中断里改为:*uart0_env.rx.bufptr= reg;if(uart

2016-06-20 16:36:49 1118

原创 debug(2) 连接的时候一直断开、重连

usr_sleep_restore这个函数不可以用NVDS的数据,因为读取来不及,做不到快速restore.

2016-06-08 12:09:43 982

原创 打开UART0 RX功能

一、打开UART RX宏#define UART_RX_ACTIVE_BIT_EN TRUE /*!#if 1//(defined(CFG_DEMO_MENU)) #define CFG_DBG_PRINT // Debug menu enable #define QN_DEMO_MENU

2016-05-25 10:16:09 2584

原创 UART1配置为打印口

一、IO配置为UARTsystem.c 50行| P10_UART1_RXD_PIN_CTRL| P11_UART1_TXD_PIN_CTRL二、UART1中断打开#define CONFIG_UART1_TX_DEFAULT_IRQHANDLER TRUE /*!< Enable/Disable UART1 TX Default I

2016-05-25 10:01:45 2958

转载 NFMI

NFMI能够让电子设备之间进行非接触式点对点数据传输,从免接触式射频识别(RFID)演变而来的,由恩智浦半导体、诺基亚和索尼共同研制开发。NFMI属于短距高频的无线电技术,通过磁场感应方式实现无线通信,工作在10MHz到14 MHz的载波频率范围内,运行有效距离很短,只有20cm。无线发射功率只有1.62mW(工作电压1.2V,工作电流1.35mA),对人体的辐射伤害很小,可用于助听器等双耳互传通

2016-05-18 16:25:52 2551

原创 flash操作规则

另外在写之前要先erase 1个block,一次4K

2016-03-25 16:10:48 363

转载 蓝牙4.1技术解析-对比4.0主要在速度和配对上有突破性进步

在智能移动设备上,蓝牙一直扮演着重要的角色。通过蓝牙来连接耳机、键鼠、音箱等设备确实给我们带来了很大的便利,不过蓝牙技术的应用好像也是仅此而已。 近日,蓝牙技术联盟(Bluetooth SIG)对蓝牙标准进行了更新,发布了最新的蓝牙4.1标准,那么这个最新的标准有些什么改变,对用户又意味着什么呢?改善数据传输,迎合可穿戴设备需求如果说蓝牙 4.0主打的是省电特性的话,那么此次升级蓝牙4

2016-03-23 14:56:07 3109

原创 判断空闲、广播和连接的方法

if(APP_ADV==ke_state_get(TASK_APP)) printf("SPP: ok 01\r\n』);else if(QPPS_CONNECTED==ke_state_get(TASK_QPPS)) printf("SPP: ok 02\r\n");else if(QPPS_IDLE==ke_state_get(TASK_QPPS)) printf("SPP:

2016-03-15 15:26:38 530

原创 QN9022写NVDS失败原因

因为外置flash上电需要时间,可以加入power on 的代码#include "serialflash.h"#if defined(CFG_EXT_FLASH)power_on_flash ( FLASH_WR);delay(100);power_off_flash();

2016-02-16 16:26:00 1703

原创 ble_time.c用法

1、工程里加入BLE\src\driver\ble_time.c2、usr_design.h里include ble_time.h3、函数:app_task_msg_hdl的case GAP_SET_MODE_REQ_CMP_EVT: 下面加入:qn_time_init();4、函数:app_sys_time_check_timer_handler里加入:qn_tm

2016-01-29 14:48:56 494

原创 常用宏开关

1、QPPS开关:usr_config.h line 139#define CFG_PRF_QPPS更改QPP Notify数量#define QPPS_NOTIFY_NUM     52、上电自动广播:#define QN_DEMO_AUTO  13、按键定时中断:app_button_timer_handler()4、UART RX开关:

2015-12-21 11:39:09 882

原创 常见报错信息

1、ASSERT_ERR(0), in ..\..\src\profiles\prf_utils.c at line 1508烧录时未用QTOOL,或用了TOOLS但OTA选项未打开

2015-12-21 08:40:29 553

原创 uart接收改为指定函数发送

1、禁用原有每次指定接收地址void app_uart_rx_done(void){ if (app_uart_env.len == QN_UART_RX_LEN-1) app_uart_env.len = 0; else app_uart_env.len += 1;//printf("app_uart_en

2015-12-18 16:51:15 663

原创 prj_client Bond代码

bond, unboun等功能:static void app_menu_handler_gap_dev_select(void){ if (app_env.input[0] - '0' < BLE_CONNECTION_MAX) { app_env.select_idx = app_env.input[0] - '0'; switch (a

2015-12-16 11:49:36 691

原创 低功耗模式操作

1、如果32K可用,禁用掉RCO,如果功耗一直下不去,考虑是否32K晶振没有起振2、增加连接成功后的定时连接时间,分别是IOS_CONN_INTV_MIN,IOS_CONN_INTV_MAXPS:如果用RCO,这一步很容易断线 3、为了不影响性能,OTA时建议连接时间改为默认的8和16,分别对应10ms和20ms(待测试)4、

2015-12-14 14:53:25 665

原创 QPPc 工程更新,与QPPs通信

prj_client更新:一、自动扫描void app_menu_cb(ke_msg_id_t const msgid, void *param){ ke_state_t state = (ke_state_get(TASK_APP)); if (APP_INIT == state) { switch (msgid) { case

2015-11-26 17:34:41 1746

原创 BLE睡眠分析(二)

把uart调试关掉,就可以进入sleep和deep sleep了,分两步:1、关掉uart#define CFG_DBG_PRINT2、在main里看LED把while(1)换成下面的: while(1) { ke_schedule(); // Checks for sleep have to be done with interrupt

2015-11-26 10:25:23 1605

原创 BLE睡眠分析(一)

芯片睡眠的决定条件有两个: // +--------+--------+--------+--------+--------+ // | USR | | | | | // | BLE | ACTIVE | IDLE | SLEEP | DEEP | //

2015-11-26 09:21:00 2780

原创 Button press & debounce

一、先看下原始代码流程,按键1中断进入函数:void usr_button1_cb(void){ ke_evt_set(1UL << EVENT_BUTTON1_PRESS_ID);}建立事件 EVENT_BUTTON1_PRESS_ID而在事件初始化里定义了EVENT_BUTTON1_PRESS_ID 对应的函数是app_event_button1_press_handle

2015-11-13 10:35:25 797

原创 QPPc menu过程

由menu 主函数 app_menu_cb显示title,然后使用下面的函数调用menuQPRINTF("*------------------------\r\n"); app_env.menu_id = menu_main;app_menu_show();void app_menu_show(void){ switch (app_env.menu_id) {

2015-11-05 13:08:11 1215

原创 建立连接的过程

2015-11-05 09:17:31 503

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除