nRF51822芯片上的BLE蓝牙协议栈

合集下载

nRF51822开发文档-中文

nRF51822开发文档-中文

OHTCOMTechnology Ltd.nRF51822 Application KitnRF51822User Guide v1.3Copyright © 2013 Ohtcom Technology. All rights reserved.1 介绍nRF51822 Bluetooth® low energy/2.4 GHz Application Kit (AK II) 提供了一整套的测试和应用nRF51822的解决方案。

nRF51822是nRF51 系列中的一员,它是一个超低功耗(ultra-low power),单片系统 (SoC) 的2.4 GHz 无线通信解决方案.1.1 最小系统要求•nRFgo Studio v1.14 或更高版本•Windows XP or Windows 71.2 外部资源•Keil MDK-ARM Lite v4.54或更高版本https:///demo/eval/arm.htm•J-Link Software v4.52b或更高版本/jlink-software.html1.3 Writing conventions这篇用户指南遵从了一些排版规则,这样能够使文章更加连贯,更加易于阅读。

以下是使用到的协作约定::•命令使用Lucida Console.•芯片管脚使用Consolas.•文件名和用户接口使用bold.•内部关联采用斜体并使用semi-bold.1.4 Application kit 发布说明2 套件内容nRF51822 Application Kit 的硬件资料以及相关软件和文档。

可以从https:///overheat1984/nRF51822_STUDY处下载。

2.1 nRF51822 Application Kit硬件Figure 1 nRF51822 硬件2.2 可下载的资源nRF51822 Application Kit 包括固件程序,文档,硬件原理图等。

xAN1503006_BLE静态秘钥在51822程序中的实现

xAN1503006_BLE静态秘钥在51822程序中的实现

BLE静态秘钥在51822程序中的实现xAN1503006Application Note V1.00类别内容关键词nRF51822;静态秘钥;摘要介绍在SDK7.1下,如何实现添加静态秘钥。

版本日期更新内容V1.00 2015-03-15 创建文档目录1概述 (3)2实现步骤 (4)免责声明 (8)1概述在使用nrf51822开发BLE应用中,很多情况下,为了提高安全性,需要使用到秘钥配对。

而有时候要实现友好的用户界面,使得手机在与51822连接时,跳出秘钥输入框,就必须使用BLE中的静态秘钥功能。

本文以experimental_ble_app_uart这个例程为基础,介绍如何在程序中实现静态秘钥的功能。

如图1-1,使用nRF UART这个app连接的效果图。

图1-1 app连接效果图2实现步骤●首先修改配对信息安全参数的值。

#define SEC_PARAM_TIMEOUT 30 /**< Timeout for Pairing Request or Security Request (in seconds). */#define SEC_PARAM_BOND 0 /**< Perform bonding. */#define SEC_PARAM_MITM 1 /**< Man In The Middle protection not required. */#define SEC_PARAM_IO_CAPABILITIES BLE_GAP_IO_CAPS_DISPLAY_YESNO /**< Display and Yes/No entry. */#define SEC_PARAM_OOB 0 /**< Out Of Band data not available. */#define SEC_PARAM_MIN_KEY_SIZE 7 /**< Minimum encryption key size. */#define SEC_PARAM_MAX_KEY_SIZE 16 /**< Maximum encryption key size. */●通过协议栈提供的API设置秘钥(为6位字符串)static void ble_stack_init(void){uint32_t err_code;static uint8_t passkey[] = "123456";ble_opt_t ble_opt;ble_opt.gap_opt.passkey.p_passkey = &passkey[0];// Initialize SoftDevice.SOFTDEVICE_HANDLER_INIT(NRF_CLOCK_LFCLKSRC_XTAL_20_PPM, false);// Enable BLE stackble_enable_params_t ble_enable_params;memset(&ble_enable_params, 0, sizeof(ble_enable_params));ble_enable_params.gatts_enable_params.service_changed = IS_SRVC_CHANGED_CHARACT_PRESENT;err_code = sd_ble_enable(&ble_enable_params);APP_ERROR_CHECK(err_code);// Subscribe for BLE events.err_code = softdevice_ble_evt_handler_set(ble_evt_dispatch);APP_ERROR_CHECK(err_code);(void) sd_ble_opt_set(BLE_GAP_OPT_PASSKEY, &ble_opt);}设置需要属性的安全等级/**@brief Function for adding RX characteristic.** @param[in] p_nus Nordic UART Service structure.* @param[in] p_nus_init Information needed to initialize the service.** @return NRF_SUCCESS on success, otherwise an error code.*/static uint32_t rx_char_add(ble_nus_t * p_nus, const ble_nus_init_t * p_nus_init){/**@snippet [Adding proprietary characteristic to S110 SoftDevice] */ ble_gatts_char_md_t char_md;ble_gatts_attr_md_t cccd_md;ble_gatts_attr_t attr_char_value;ble_uuid_t ble_uuid;ble_gatts_attr_md_t attr_md;memset(&cccd_md, 0, sizeof(cccd_md));BLE_GAP_CONN_SEC_MODE_SET_OPEN(&cccd_md.read_perm);//BLE_GAP_CONN_SEC_MODE_SET_OPEN(&cccd_md.write_perm);BLE_GAP_CONN_SEC_MODE_SET_ENC_WITH_MITM(&cccd_md.write_perm);cccd_md.vloc = BLE_GATTS_VLOC_STACK;memset(&char_md, 0, sizeof(char_md));char_md.char_props.notify = 1;char_md.p_char_user_desc = NULL;char_md.p_char_pf = NULL;char_md.p_user_desc_md = NULL;char_md.p_cccd_md = &cccd_md;char_md.p_sccd_md = NULL;ble_uuid.type = p_nus->uuid_type;ble_uuid.uuid = BLE_UUID_NUS_RX_CHARACTERISTIC;memset(&attr_md, 0, sizeof(attr_md));//BLE_GAP_CONN_SEC_MODE_SET_OPEN(&attr_md.read_perm);BLE_GAP_CONN_SEC_MODE_SET_ENC_WITH_MITM(&attr_md.read_perm); //BLE_GAP_CONN_SEC_MODE_SET_OPEN(&attr_md.write_perm);BLE_GAP_CONN_SEC_MODE_SET_ENC_WITH_MITM(&attr_md.write_perm);attr_md.vloc = BLE_GATTS_VLOC_STACK;attr_md.rd_auth = 0;attr_md.wr_auth = 0;attr_md.vlen = 1;memset(&attr_char_value, 0, sizeof(attr_char_value));attr_char_value.p_uuid = &ble_uuid;attr_char_value.p_attr_md = &attr_md;attr_char_value.init_len = sizeof(uint8_t);attr_char_value.init_offs = 0;attr_char_value.max_len = BLE_NUS_MAX_RX_CHAR_LEN;return sd_ble_gatts_characteristic_add(p_nus->service_handle,&char_md,&attr_char_value,&p_nus->rx_handles);/**@snippet [Adding proprietary characteristic to S110 SoftDevice] */}/**@brief Function for adding TX characteristic.** @param[in] p_nus Nordic UART Service structure.* @param[in] p_nus_init Information needed to initialize the service.** @return NRF_SUCCESS on success, otherwise an error code.*/static uint32_t tx_char_add(ble_nus_t * p_nus, const ble_nus_init_t * p_nus_init){ble_gatts_char_md_t char_md;ble_gatts_attr_t attr_char_value;ble_uuid_t ble_uuid;ble_gatts_attr_md_t attr_md;memset(&char_md, 0, sizeof(char_md));char_md.char_props.write = 1;char_md.char_props.write_wo_resp = 1;char_md.p_char_user_desc = NULL;char_md.p_char_pf = NULL;char_md.p_user_desc_md = NULL;char_md.p_cccd_md = NULL;char_md.p_sccd_md = NULL;ble_uuid.type = p_nus->uuid_type;ble_uuid.uuid = BLE_UUID_NUS_TX_CHARACTERISTIC; memset(&attr_md, 0, sizeof(attr_md));BLE_GAP_CONN_SEC_MODE_SET_ENC_WITH_MITM(&attr_md.read_perm); //BLE_GAP_CONN_SEC_MODE_SET_OPEN(&attr_md.read_perm);//BLE_GAP_CONN_SEC_MODE_SET_OPEN(&attr_md.write_perm);BLE_GAP_CONN_SEC_MODE_SET_ENC_WITH_MITM(&attr_md.write_perm);attr_md.vloc = BLE_GATTS_VLOC_STACK;attr_md.rd_auth = 0;attr_md.wr_auth = 0;attr_md.vlen = 1;memset(&attr_char_value, 0, sizeof(attr_char_value));attr_char_value.p_uuid = &ble_uuid;attr_char_value.p_attr_md = &attr_md;attr_char_value.init_len = 1;attr_char_value.init_offs = 0;attr_char_value.max_len = BLE_NUS_MAX_TX_CHAR_LEN;return sd_ble_gatts_characteristic_add(p_nus->service_handle,&char_md,&attr_char_value,&p_nus->tx_handles);}免责声明深圳市蓝科迅通科技有限公司随附提供的软件或文档资料旨在提供给您(本公司的客户)使用,仅限于且只能在本公司销售的产品上使用。

NRF51822-Eval-Kit-用户手册

NRF51822-Eval-Kit-用户手册

图 4.
Program SoftDevice
b) c)
下载上层应用。 进入<KEIL path> \ARM\Device\Nordic\nrf51822\Board\pca10001\s110\ble_app_hrs\arm 或<code path>\BLE4.0\nrf51822\Board\pca10001\s110\ble_app_hrs\arm 打开Keil工程文件 这个编译下载的程序即为产品出厂时自带的程序,测试方法请参考上文“开箱检测”章节。
1.2 下载手机端 app
NORDIC官方提供的app可以从苹果应用商店App Store中下载,安卓手机可以从Google Play 下载。 具体方法如下: iPhone:进入App Store 并搜索“nRF Utility ” Android :进入Google Play并搜索“nRF Utility” 注意:目前官方仅支持的机型与app请从以下网址查看: /Products/nRFready-Demo-APPS 如手机不在其中,需要升级到Android 4.3或更换手机。
6
NRF51822 Eval Kit 用户手册
微雪电子
2.5 各程序功能简介
a) 以下所有程序路径为:<code path>\BLE4.0\nrf51822\Board\pca10001 且所有跳线都已连接。 b) 下表中的步骤序号,请参考表格下方的备注栏。 c) 操作涉及步骤②的,下载方法请参考上文“编译下载 ble_app_hrs 测试程序”。 d) 其他的程序下载方法请参考上文“编译下载 blinky_example 测试程序”
核心板介绍:
Core51822参数:
主控芯片:nRF51822 通信距离: 30m (条件: 空旷区域 / 1M速率) 工作频段:2.4GHz 工作电压:2.0V ~ 3.6V 温度范围:-40℃ ~ 85℃ 尺寸:24.5mm x 32.26mm(PCB) 接口: 除P0.26和P0.27外, 所有I/O 接口 排针间距:2.00mm 两侧排针间距:18.00mm 天线:板载天线

NORDIC蓝牙芯片NRF51822说明-文档资料

NORDIC蓝牙芯片NRF51822说明-文档资料
13
四、蓝牙协议和应用代码相互分开
1:NRF51822蓝牙协议和应用代码的存储空 间相互分开,互不干扰,客户只需关注
应用代码
应用代码开发,不需花大量的时间去了解蓝 176K
牙协议是如何运行的,只需配置API参数就
可运行起来。
2:TI和CSR都是只提供蓝牙源代码,客户 蓝牙协议
只能在此代码上进行修改、编译程序,把 80K 应用代码和协议混合放在同一空间里,给修
灵敏度
-94dBm -85dBm -82dBm
51822
ARM M0 256/128K ROM 16k RAM
4dBM 0dBM -4dBM -8dBM -12dBM -16dBM -20dBm
LDO 16/4dB 10.5/0dB
RX 13
DC/DC 10.5/4dB 8.1/0dB
RX 9.5
250Kbps 1Mbps 2Mbps
■ CSR:自有16位MCU,需外挂Flash/EEPROM, 无法对产品进行加密,同时增加了相应的成本和 PCB板面积。
9
二、新增功能
■电源管理:除system ON/OFF外,各功能 模块有自己的电源管理,电源管理简单,只 有ON/OFF,有利于降低功耗。
■具有DC/DC 功能: 2.1~3.6V,DC/DC功 能可以让功耗更低。
2
nRF51822功耗/灵敏度
3
nRF51822原装开发系统
原装开发系统包括2部分 1:nRFGo Starter Kit Development Kit (简称nRF6700) 包括2个开发母板,开发调试环境,支持Keil C
2:nRF51822 Development Kit (简称nRF51822-DK) 1个nRF51822 USB dongle接收端 1个nRF51822 PCB模块 1个nRF51822 SMA模块 2个J-Link开发板(烧录、仿真) 5片nRF51822样片

nRF51822库函数速查

nRF51822库函数速查

nRF51822库函数速查nrf_soc.h//初始化互斥锁uint32_t sd_mutex_new(nrf_mutex_t*p_mutex);//尝试获取互斥锁.uint32_t sd_mutex_acquire(nrf_mutex_t*p_mutex);//释放互斥锁.uint32_t sd_mutex_release(nrf_mutex_t*p_mutex);//使能外部中断.uint32_t sd_nvic_EnableIRQ(IRQn_Type IRQn);//禁止外部中断.uint32_t sd_nvic_DisableIRQ(IRQn_Type IRQn);//Get Pending Interrupt.uint32_t sd_nvic_GetPendingIRQ(IRQn_Type IRQn,uint32_t*p_pending_irq);//Set Pending Interrupt.uint32_t sd_nvic_SetPendingIRQ(IRQn_Type IRQn);//Clear Pending Interrupt.uint32_t sd_nvic_ClearPendingIRQ(IRQn_Type IRQn);//设置中断优先级.uint32_t sd_nvic_SetPriority(IRQn_Type IRQn,nrf_app_irq_priority_t priority);//取得中断优先级.uint32_t sd_nvic_GetPriority(IRQn_Type IRQn,nrf_app_irq_priority_t*p_priority); //系统复位.uint32_t sd_nvic_SystemReset(void);//进入临界区.uint32_t sd_nvic_critical_region_enter(uint8_t*p_is_nested_critical_region);//退出临界区.uint32_t sd_nvic_critical_region_exit(uint8_t is_nested_critical_region);//查询应用的随机数池容量.uint32_t sd_rand_application_pool_capacity_get(uint8_t*p_pool_capacity);//取得应用中有效地随机数字节数.uint32_t sd_rand_application_bytes_available_get(uint8_t*p_bytes_available);//从池中获取随机数字节.uint32_t sd_rand_application_vector_get(uint8_t*p_buff,uint8_t length);//取得复位原因寄存器的值.uint32_t sd_power_reset_reason_get(uint32_t*p_reset_reason);//清除复位原因寄存器的若干bit.uint32_t sd_power_reset_reason_clr(uint32_t reset_reason_clr_msk);//设置CPU睡眠时的电源模式.uint32_t sd_power_mode_set(nrf_power_mode_t power_mode);//关闭系统.uint32_t sd_power_system_off(void);//开关电源失效比较器uint32_t sd_power_pof_enable(uint8_t pof_enable);//设置电源故障阈值.uint32_t sd_power_pof_threshold_set(nrf_power_failure_threshold_t threshold);//设置NRF_POWER->RAMON寄存器.uint32_t sd_power_ramon_set(uint32_t ramon);//清除NRF_POWER->RAMON寄存器.uint32_t sd_power_ramon_clr(uint32_t ramon);//Get contents of NRF_POWER->RAMON register,indicates power status of ram blocks. uint32_t sd_power_ramon_get(uint32_t*p_ramon);//Set bits in the NRF_POWER->GPREGRET register.uint32_t sd_power_gpregret_set(uint32_t gpregret_msk);//Clear bits in the NRF_POWER->GPREGRET register.uint32_t sd_power_gpregret_clr(uint32_t gpregret_msk);//Get contents of the NRF_POWER->GPREGRET register.uint32_t sd_power_gpregret_get(uint32_t*p_gpregret);//设置DCDC模式.uint32_t sd_power_dcdc_mode_set(nrf_power_dcdc_mode_t dcdc_mode);//请求使用高频晶体振荡器.uint32_t sd_clock_hfclk_request(void);//释放高频晶体振荡器.uint32_t sd_clock_hfclk_release(void);//检查高频晶体振荡器是否在运行.SVCALL(SD_CLOCK_HFCLK_IS_RUNNING,uint32_t,sd_clock_hfclk_is_running(uint32_t*p_is_running));//等待程序事件.uint32_t sd_app_evt_wait(void);//Get PPI channel enable register contents.uint32_t sd_ppi_channel_enable_get(uint32_t*p_channel_enable);//Set PPI channel enable register.uint32_t sd_ppi_channel_enable_set(uint32_t channel_enable_set_msk);//Clear PPI channel enable register.uint32_t sd_ppi_channel_enable_clr(uint32_t channel_enable_clr_msk);//Assign endpoints to a PPI channel.uint32_t sd_ppi_channel_assign(uint8_t channel_num,const volatile void*evt_endpoint, const volatile void*task_endpoint);//Task to enable a channel group.uint32_t sd_ppi_group_task_enable(uint8_t group_num);//Task to disable a channel group.uint32_t sd_ppi_group_task_disable(uint8_t group_num);//Assign PPI channels to a channel group.uint32_t sd_ppi_group_assign(uint8_t group_num,uint32_t channel_msk);//Gets the PPI channels of a channel group.uint32_t sd_ppi_group_get(uint8_t group_num,uint32_t*p_channel_msk);//配置无线通知信号.uint32_t sd_radio_notification_cfg_set(nrf_radio_notification_type_t type,nrf_radio_notification_distance_t distance);//AES-ECB加密.uint32_t sd_ecb_block_encrypt(nrf_ecb_hal_data_t*p_ecb_data);//Gets any pending events generated by the SoC API.uint32_t,sd_evt_get(uint32_t*p_evt_id);//取得芯片温度uint32_t sd_temp_get(int32_t*p_temp);//写数据到Flashsd_flash_write(uint32_t*const p_dst,uint32_t const*const p_src,uint32_t size); //擦除Flash页uint32_t sd_flash_page_erase(uint32_t page_number);//Flash Protection setuint32_t sd_flash_protect(uint32_t protenset0,uint32_t protenset1);ble.h//从队列中取得等待处理的事件uint32_t,sd_ble_evt_get(uint8_t*p_dest,uint16_t*p_len);//取得BLE协议栈中有效地传输缓冲区总数uint32_t sd_ble_tx_buffer_count_get(uint8_t*p_count);//添加一个厂商特定UUID.uint32_t sd_ble_uuid_vs_add(ble_uuid128_t const*const p_vs_uuid,uint8_t*const p_uuid_type);//解码原始小端UUID字节(16bit或128bit)到24bit的ble_uuid_t结构uint32_t sd_ble_uuid_decode(uint8_t uuid_le_len,uint8_t const*const p_uuid_le, ble_uuid_t*const p_uuid);//编码24bit的ble_uuid_t结构到原始小端UUID字节(16bit或128bit)uint32_t sd_ble_uuid_encode(ble_uuid_t const*const p_uuid,uint8_t*constp_uuid_le_len,uint8_t*const p_uuid_le));//取得版本信息uint32_t sd_ble_version_get(ble_version_t*p_version);//提供用户内存块uint32_t sd_ble_user_mem_reply(uint16_t conn_handle,ble_user_mem_block_t*p_block); ble_gap.h//设置本地蓝牙MAC地址uint32_t sd_ble_gap_address_set(ble_gap_addr_t const*const p_addr);//取得本地蓝牙MAC地址uint32_t sd_ble_gap_address_get(ble_gap_addr_t*const p_addr);//设置,清除,更新广播扫描响应数据uint32_t sd_ble_gap_adv_data_set(uint8_t const*const p_data,uint8_t dlen,uint8_t const*const p_sr_data,uint8_t srdlen);//开始广播(Start advertising(GAP Discoverable,Connectable modes,Broadcast Procedure) uint32_t sd_ble_gap_adv_start(ble_gap_adv_params_t const*const p_adv_params);//停止广播(Start advertising(GAP Discoverable,Connectable modes,Broadcast Procedure) uint32_t sd_ble_gap_adv_stop(void);//更新连接参数uint32_t sd_ble_gap_conn_param_update(uint16_t conn_handle,ble_gap_conn_params_t const*const p_conn_params);//断开连接(GAP Link Termination).uint32_t,sd_ble_gap_disconnect(uint16_t conn_handle,uint8_t hci_status_code);//设置无线发射功率dBm(accepted values are-40,-30,-20,-16,-12,-8,-4,0,and4dBm). SVCALL(SD_BLE_GAP_TX_POWER_SET,uint32_t,sd_ble_gap_tx_power_set(int8_t tx_power)) ;//Set GAP Appearance value.uint32_t sd_ble_gap_appearance_set(uint16_t appearance);//Get GAP Appearance value.uint32_t,sd_ble_gap_appearance_get(uint16_t*const p_appearance);//设置GAP外设优先连接参数uint32_t sd_ble_gap_ppcp_set(ble_gap_conn_params_t const*const p_conn_params);//取得GAP外设优先连接参数uint32_t sd_ble_gap_ppcp_get(ble_gap_conn_params_t*const p_conn_params);//设置GAP设备名uint32_t sd_ble_gap_device_name_set(ble_gap_conn_sec_mode_t const*const p_write_perm, uint8_t const*const p_dev_name,uint16_t len);//取得GAP设备名uint32_t,sd_ble_gap_device_name_get(uint8_t*const p_dev_name,uint16_t*constp_len);//启动GAP认证流程uint32_t,sd_ble_gap_authenticate(uint16_t conn_handle,ble_gap_sec_params_t const* const p_sec_params);//Reply with GAP security parameters.uint32_t sd_ble_gap_sec_params_reply(uint16_t conn_handle,uint8_t sec_status,ble_gap_sec_params_t const*const p_sec_params);//Reply with an authentication keySVCALL(SD_BLE_GAP_AUTH_KEY_REPLY,uint32_t,sd_ble_gap_auth_key_reply(uint16_tconn_handle,uint8_t key_type,uint8_t const*const key);//Reply with GAP security information.uint32_t sd_ble_gap_sec_info_reply(uint16_t conn_handle,ble_gap_enc_info_t const* const p_enc_info,ble_gap_sign_info_t const*const p_sign_info);//Get the current connection security.uint32_t,sd_ble_gap_conn_sec_get(uint16_t conn_handle,ble_gap_conn_sec_t*const p_conn_sec);//开始接受RSSI值的变化通知uint32_t sd_ble_gap_rssi_start(uint16_t conn_handle);//停止接收RSSI值变化通知SVCALL(SD_BLE_GAP_RSSI_STOP,uint32_t,sd_ble_gap_rssi_stop(uint16_t conn_handle); ble_gattc.h//启动或继续GATT主要服务的发现过程uint32_t sd_ble_gattc_primary_services_discover(uint16_t conn_handle,uint16_tstart_handle,ble_uuid_t const*const p_srvc_uuid);//启动或继续GATT关系发现过程uint32_t sd_ble_gattc_relationships_discover(uint16_t conn_handle,ble_gattc_handle_range_t const*const p_handle_range);//启动或继续GATT特性发现过程uint32_t sd_ble_gattc_characteristics_discover(uint16_t conn_handle,ble_gattc_handle_range_t const*const p_handle_range);//启动或继续GATT特性描述发现过程uint32_t sd_ble_gattc_descriptors_discover(uint16_t conn_handle,ble_gattc_handle_range_t const*const p_handle_range);//启动或继续通过GATT特性的UUID的读操作uint32_t sd_ble_gattc_char_value_by_uuid_read(uint16_t conn_handle,ble_uuid_t const *const p_uuid,ble_gattc_handle_range_t const*const p_handle_range);//启动或继续GATT读取长特性或描述的过程uint32_t sd_ble_gattc_read(uint16_t conn_handle,uint16_t handle,uint16_t offset); //启动GATT读取多个特性值的过程uint32_t sd_ble_gattc_char_values_read(uint16_t conn_handle,uint16_t const*const p_handles,uint16_t handle_count);//执行一个无报告的写操作uint32_t sd_ble_gattc_write(uint16_t conn_handle,ble_gattc_write_params_t const* const p_write_params);//发送配置到GATT服务器uint32_t sd_ble_gattc_hv_confirm(uint16_t conn_handle,uint16_t handle);ble_gatts.h//添加一个服务声明到本地服务的ATT表uint32_t sd_ble_gatts_service_add(uint8_t type,ble_uuid_t const*const p_uuid,uint16_t*const p_handle);//添加一个包含声明到本地服务的ATT表uint32_t sd_ble_gatts_include_add(uint16_t service_handle,uint16_t inc_srvc_handle, uint16_t*const p_include_handle);//添加特性声明,特性值声明,可选的特性描述声明到ATT表uint32_t sd_ble_gatts_characteristic_add(uint16_t service_handle,ble_gatts_char_md_t const*const p_char_md,ble_gatts_attr_t const*const p_attr_char_value,ble_gatts_char_handles_t*const p_handles);//添加描述到ATT表uint32_t sd_ble_gatts_descriptor_add(uint16_t char_handle,ble_gatts_attr_t const* const p_attr,uint16_t*const p_handle);//设置值到特性uint32_t sd_ble_gatts_value_set(uint16_t handle,uint16_t offset,uint16_t*const p_len, uint8_t const*const p_value);//取得属性值uint32_t sd_ble_gatts_value_get(uint16_t handle,uint16_t offset,uint16_t*const p_len, uint8_t*const p_data);//Notify或Indicate特性值.uint32_t,sd_ble_gatts_hvx(uint16_t conn_handle,ble_gatts_hvx_params_t const*constp_hvx_params);//Indicate属性值改变uint32_t sd_ble_gatts_service_changed(uint16_t conn_handle,uint16_t start_handle, uint16_t end_handle);//报告读写授权请求uint32_t sd_ble_gatts_rw_authorize_reply(uint16_t conn_handle,ble_gatts_rw_authorize_reply_params_t const*const p_rw_authorize_reply_params);//Update persistent system attribute informationuint32_t sd_ble_gatts_sys_attr_set(uint16_t conn_handle,uint8_t const*constp_sys_attr_data,uint16_t len);//Retrieve persistent system attribute information from the stack.uint32_t sd_ble_gatts_sys_attr_get(uint16_t conn_handle,uint8_t*constp_sys_attr_data,uint16_t*const p_len);ble_l2cap.h//注册一个L2CAP的CIDuint32_t sd_ble_l2cap_cid_register(uint16_t cid);//注销CIDuint32_t sd_ble_l2cap_cid_unregister(uint16_t cid);//发送L2CAP包uint32_t sd_ble_l2cap_tx(uint16_t conn_handle,ble_l2cap_header_t const*const p_header,uint8_t const*const p_data);nrf_sdm.h//使能SoftDeviceuint32_t sd_softdevice_enable(nrf_clock_lfclksrc_t clock_source,softdevice_assertion_handler_t assertion_handler);//禁用SoftDeviceuint32_t sd_softdevice_disable(void);//检查SoftDevice是否已使能uint32_t sd_softdevice_is_enabled(uint8_t*p_softdevice_enabled);//开始转发中断到应用程序uint32_t sd_softdevice_forward_to_application(void);。

蓝牙 nRF51822 应用

蓝牙  nRF51822 应用

蓝牙nRF51822 应用(基于低功耗蓝牙技术的温湿度传感器节点的设计)关键字:低功耗蓝牙温湿度传感器nRF51822 SHT11随着兼容蓝牙4.0标准的智能手机逐步普及,低功耗蓝牙技术也面临着越来越广泛的应用。

本设计采用了nRF51822和SHT11设计了一种基于低功耗蓝牙技术的温湿度传感器节点,能够将节点位置的温度和湿度发送给主机用于显示,可广泛应用于家庭、车间、仓库的温湿度监控。

1.引言在智能家居和物联网飞速发展的背景下,基于蓝牙4.0标准的低功耗蓝牙(Bluetooth Low Energy,BLE)技术正被逐步地为人们重视。

随着兼容蓝牙4.0标准的智能手机逐步普及,低功耗蓝牙技术也面临着越来越广泛的应用。

本设计采用了基于BLE技术的nRF51822蓝牙SoC芯片和SHT11温湿度传感器设计了一种基于低功耗蓝牙技术的温湿度传感器节点,能够将节点位置的温度和湿度发送给主机用于显示,可广泛应用于家庭、车间、仓库的温湿度监控。

节点采用了低功耗设计,可用一枚纽扣电池供电,实际使用时间可达1年以上。

2.系统结构本设计的系统结构如图1所示,系统的处理器模块由nRF51822构成,温湿度传感器件采用SHT11,电源采用纽扣电池供电;由处理器模块、温湿度传感器模块、天线模块、电源模块构成的节点与主机通过2.4GHz的低功耗蓝牙信号通信,主机采用智能手机运行信息采集显示的APP。

多个节点可利用应用层协议与主机组成星形网络。

图1 系统结构图3.硬件电路温湿度传感器节点硬件的系统构成如图2所示。

图2 硬件系统结构图3.1 处理器模块处理器模块选用Nordic公司的nRF51822芯片。

nRF51822是具有CORTEX-M0低功耗内核,支持BLE、Gazell等多协议的低功耗高速率射频收发器的SoC。

其具有高集成度、低成本、处理能力强、低功耗、小体积等优势,非常适合低功耗蓝牙产品的应用。

该芯片具有以下特性:具有Cortex-M0内核,片上256KB FLASH,16KB RAM,片内包含支持BLE协议的2.4GHz射频收发器。

Noridc nRF51822 BLE to UART

Noridc nRF51822 BLE to UART
nRF51822:BLE-UART Demo
Gandy Huang
1 Gandy.huang@
Open
• C:\Keil\ARM\Device\Nordic\nrf51822\ Board\pca10001\s110\experimental\bl e_app_uart
2
可以修改蓝牙参数
8
蓝牙的接收数据传输
void nus_data_handler(ble_nus_t * p_nus, uint8_t * p_data, uint16_t length) { //接收入口
// // // // // }
uint32_t err_code = ble_nus_send_string(&m_nus, p_data, length); //发送函数 if (err_code != NRF_SUCCESS) { //如果不成功,需要安排重新发送 } for (int i = 0; i < length; i++) //默认是串口打印出来,这里更改为直接BLE数据返回 { simple_uart_put(p_data[i]); } simple_uart_put('\n');
7
UUID更改
1 打开ble_nus.c 2 更改下面UUID,记得APP也需要同步修改 uint32_t ble_nus_init(ble_nus_t * p_nus, const ble_nus_init_t * p_nus_init) { uint32_t err_code; ble_uuid_t ble_uuid; ble_uuid128_t nus_base_uuid = {0x9E, 0xCA, 0xDC, 0x24, 0x0E, 0xE5, 0xA9, 0xE0, 0x93, 0xF3, 0xA3, 0xB5, 0x00, 0x00, 0x40, 0x6E};

nrf5182-主机-串口代码讲解

nrf5182-主机-串口代码讲解

nrf5182-主机-串口代码讲解nrf5182 主机串口代码讲解,跟官方的串口代码配套使用工程文件nrf51822\Board\nrf6310\s120\experimental\ble_app_uart_c\arm 配套的uart的串口从机是nrf51822\Board\pca10001\s110\experimental\ble_app_uart1、首先添加16位的uuid号,重新宏定义如下点击(此处)折叠或打开1.#define BLE_UUID_NUS_SERVICE 0x0001 /**< The UUID of the Nordic UART Service.*/2.#define BLE_UUID_NUS_TX_C_CHARACTERISTIC 0x0003 /**< 主机的TX 特性对应于从机的RX特性*/3.#define BLE_UUID_NUS_RX_C_CHARACTERISTIC 0x0002 /**< 主机的RX 特性. */4.5.#define BLE_NUS_MAX_DATA_LEN (GATT_MTU_SIZE_DEFAULT - 3) /**< 最大20字节Maximum length of data (inbytes) that can be transmitted by the Nordic UARTservice module to the peer. */6.7.#define BLE_NUS_MAX_RX_CHAR_LEN BLE_NUS_MAX_DATA_LEN /**< 等价于接收长度Maximum length of the RX Characteristic (in bytes). */8.#define BLE_NUS_MAX_TX_CHAR_LEN BLE_NUS_MAX_DATA_LEN/**< Maximum length of the TX Characteristic (inbytes). */蓝牙ble是基于属性协议的属性协议:客户端通过它可以发现并获取属**器上的属性:6种基本操作1、请求:客户端发给请求给服务器,需要服务器回复一个响应2、响应:3、命令:客户端发给请求给服务器,不需要服务器回复一个响应4、指示:服务器发给指示给客户端,需要客户端发一个确认给服务器5、确认:6、通知:客户端发给请求给服务器,不需要服务器回复一个响应例子用到了请求,通知。

NRF51822,NRF52832,NRF52810,NRF52840BLE方案对比

NRF51822,NRF52832,NRF52810,NRF52840BLE方案对比

蓝牙ble系列nrf51822,nrf52810,nrf52832,nrf52840方案对比一、nRF51822简介:nRF51822是一款功能强大,高度灵活的多协议的SoC,非常适用于蓝牙低功耗和2.4GHz的无线应用。

该SoC是基于ARM Cortex M0为内核的微处理器,拥有256KB/128KB的片上FLASH存储空间,32KB/16KB的RAM空间。

2.4G无线射频支持蓝牙低功耗,同时兼容nRF24L系列的产品。

其应用领域:手机配件,穿戴式设备,无线充电监控,PC外设,消费电子遥控器,智能家居,智能射频标签,玩具和电子游戏等。

二、芯片特性:●单芯片,高度灵活的2.4GHz多协议设备●32位ARM Cortex M0 CPU内核●256KB/128KB闪存+32KB/16KB RAM●支持蓝牙低功耗协议栈●线程安全和运行时保护●事件驱动API支持●空中链路兼容nRF24L系列●三种速率:2Mbps/1Mbps/250Kbps●+4dBm输出功率●-93dBm灵敏度,蓝牙低功耗●灵活的电源管理系统●可配置的I/O●工作温度范围:-40℃至+105℃三、nRF52810简介:nRF52810是一款支持蓝牙5,ANT和2.4GHz的高性能多协议的SoC。

该SoC提供了对蓝牙5的支持,同时微处理器内核为ARM Cortex M4,具有192KB的FLASH和24KB的RAM空间,能够提供更多的高级应用的支持。

即使在低功耗的应用之中也是表现得非常出色的。

其应用领域:蓝牙5连接处理器,工业传感器和执行器,穿戴设备,智能家居传感器,电脑外设,体育和健身传感器,智能手表,互动游戏和楼宇自动化等。

四、芯片特性:●单芯片,高度灵活的2.4 GHz多协议SoC●32位ARM Cortex-M4处理器●电压范围:1.7V至3.6V●192kB闪存+ 24kB RAM●支持并发蓝牙低功耗/ ANT协议操作●+4dBm的输出功率●-96dBm灵敏度,蓝牙低功耗●线程安全和运行时保护●事件驱动API支持●空中链路兼容nRF24L和nRF24AP系列●两种速率:2Mbps/1Mbps●自动的电源管理系统●可配置的I/O●1个主/从SPI● 1 x双线接口(I²C)●UART(RTS / CTS)●1个PWM(4个通道)●AES HW加密●8通道10/12位ADC●正交解码器●64级模拟比较器●实时时钟(RTC)●数字麦克风接口(PDM)一、nRF52832简介:nRF52832是一款功能强大,高度灵活的超低功耗多协议的SoC,非常适合蓝牙低功耗(BLE,以前成为智能蓝牙),ANT和2.4GHz的无线应用。

讯联电子nRF51822实战教程--2.4G无线通讯

讯联电子nRF51822实战教程--2.4G无线通讯

讯联电子
nRF51822实战--2.4G无线通讯
申明:本教程版权归讯联电子所有。本教程仅供 内部客户交流之用。如需引用,请注明出处。由 于工程师水平有限,文档难免有所疏漏和错误, 由此造成的损失,讯联电子不承当任何责任。
1 目的
2块nRF51822EK_TM蓝牙开发板通过2.4G自定义的信道进行数据传输。一块开发板烧录发射程序 (我们称之为A);另一块开发板烧录接收程序(我们称之为B)。当A的按钮BUTTON0被按下的时 候,A在指定的信道上发送0X00 、0X01、 0X02 、0X03四个数据;B每接收到一次正确的数据会驱动蜂 鸣器发出声音,同时七彩灯会发红色的光,200mS以后蜂鸣器停止发声,七彩灯熄灭。TX和RX的源代 码在nRF51822EK_TM开发板配套资料的<实战演练>文件夹内。
讯联电子
4.3.2 IO和系统初始化:
nRF51822实战--2.4G无线通讯
4.4 程序的验证ຫໍສະໝຸດ 把工程编译好以后,在MDK开发环境或者NRFGO STUDIO烧录软件把HEX烧录到nRF51822EK_TM开发板中。按发射端的 BUTTON 0,接收端的蜂鸣器会发出声音。
MAXLEN:数据包的最大长度。nRF51822的无线数据包最大长度为256字节,超过这个长度的数据包将会被截掉。 STALEN: 如果我们发送的数据包是固定长度,则可以设定这个字段,每次按固定的长度发送数据,不超过 256字节。 BALEN:前这个字段可以用来设定前面说的8个逻辑地址中BASEX的长度。 ENDIAN:用来设定发送数据的时候是先高位还是低位。 WHITEEN:打开或者关闭数据数据白化(加噪)功能。
发送地址(TXADDRESS):发送地址是对应于发射端而言的。前面说到,用户可以设定8个逻辑地址,在收发器 初始化的时候,必须要选择8个逻辑地址中的一个作为当前发射器的设备地址。然后,当发送数据的时 候,收发器会自动把设备地址添加到数据帧中把数据发出去。

nRF51822 模块 规格说明书

nRF51822 模块 规格说明书

OHTCOMTechnology Ltd.nRF51822模块规格说明书Datasheet of nRF51822 Modules2015.6.1目录1 简介 Introduction (3)2 nRF51822 M0 BLE模块介绍 specification for M0 Module . 4天线的连接 (7)程序的烧录 (8)表一 nRF51822 M0工作参数 (8)3 nRF51822 M1 BLE模块介绍 specification for M1 Module . 9程序的烧录 (11)表二 nRF51822 M1工作参数 (11)4 History (13)5 联系方式CONTACT US (14)NOTES:If you are customers from overseas, please contact sales@ for quotation and specifications of English version.1 简介IntroductionnRF51822 Mx BLE低功耗蓝牙模块目前包括nRF51822 M0、nRF51822 M1两款。

这两款BLE模块都是以nRF51822为主控芯片,封装不同的模块。

nRF51822 M0模块包含了LIS3DH3轴传感器,与百度手环使用相同的基础硬件,可以用来开发运动手环等穿戴设备。

nRF51822 M1模块单有一片nRF51822芯片,可以选择16kB RAM或者32kB RAM的不同版本,可以用来开发iBeacon、室内定位、穿戴设备,计算机控制等,应用更灵活,满足不同需求。

nRF51822 M0nRF51822 M12 nRF51822 M0 BLE模块介绍specification for M0 ModulenRF51822 M0采用BGA的nRF51822芯片封装并且集成了高低速晶振、LIS3DH三轴传感器,模块尺寸仅为10.5mm*8.5mm*1.5mm,为业界最小封装。

亿佰特(Ebyte)-E77-2G4M04S采用nRF51822射频芯片-支持蓝牙4.2协议-芯片自带高性能ARM-CORTEX-M0内核

亿佰特(Ebyte)-E77-2G4M04S采用nRF51822射频芯片-支持蓝牙4.2协议-芯片自带高性能ARM-CORTEX-M0内核

模块介绍E77-2G4M04S是一款小体积、低功耗的蓝牙无线模块。

模块自带高性能PCB板载天线和IPEX天线座。

E77-2G4M04S采用NORDIC公司原装进口nRF51822射频芯片,支持蓝牙4.2协议,芯片自带高性能ARM CORTEX M0内核,并拥有UART、I2C、SPI、ADC、WDT、RTC等丰富的外设资源。

模块引出了nRF51822所有的IO口,方便用户进行多方位的开发。

E77-2G4M04S为硬件平台,出厂无程序,用户需要进行二次开发。

nRF51822芯片特性请见官方Datasheet,模块已将芯片的射频特性发挥到极致。

模块已内置32.768KHz实时时钟晶振与16MHz晶振,用户可自行编程使用。

目录1.核心优势 (2)2.系列产品 (3)3.技术参数 (3)3.1.参数说明 (3)4.注意事项 (4)5.引脚定义 (4)6.开发使用 (6)7.天线选择 (6)8.生产指导 (7)8.1.回流焊温度 (7)8.2.回流焊曲线图 (7)9.常见问题 (8)9.1.通信距离很近 (8)9.2.模块易损坏 (8)10.重要声明 (8)1.核心优势序号优势特点注释1ARM芯片内部集成了基于Cortex-M032位处理器。

2时钟晶振模块已内置32.768KHz实时时钟晶振,用户可自行编程使用。

3谐波杂散射频硬件设计谐波杂散小,可以通过各种认证。

4GPIO所有可用IO均已引出,支持用户全面二次开发。

5双天线客户可以选择PCB天线或IPEX外置天线。

2.系列产品模块型号芯片方案载波频率Hz 发射功率dBm通信距离km封装形式天线形式E77-2G4M04S nRF51822 2.4G40.1/0.5贴片PCB/IPXE77系列的其他产品正在开发中,敬请期待3.技术参数产品型号核心IC尺寸模块净重工作温度工作湿度储存温度E77-2G4M04S nRF5182217.5*28.7mm 1.8±0.1g-40~85°C10~90-40~125°C参数类别Min Typ Max单位发射电流13.014.015.4mA接收电流11.312.613.8mA关断电流0.5 1.0 2.5μA发射功率 3.6 4.0 4.5dBm接收灵敏度-95.4-96.0-96.8dBm供电电压 2.1 3.3 3.6V通信电平 2.1 3.3 3.6V3.1.参数说明●在针对模块设计供电电路时,往往推荐保留30以上余量,有整机利于长期稳定地工作;●发射瞬间需求的电流较大但是往往因为发射时间极短,消耗的总能量可能更小;●当客户使用外置天线时,天线与模块在不同频点上的阻抗匹配程度不同会不同程度地影响发射电流的大小。

ble广播包详解

ble广播包详解

在使用EN-Dongle捕获和解析广播包之前,我们先了解一下BLE报文的结构,之后,再对捕获的广播包进行分析。

在学习BLE的时候,下面两个文档是极其重要的,这是SIG发布的蓝牙的核心协议和核心协议增补。

∙核心协议Core_v4.2。

∙核心协议增补CSS v6。

虽然这两个文档是蓝牙技术的根本,但是遗憾的是:通过这两个文档学习蓝牙并不是那么容易的,阅读和理解起来很费力。

尤其是初学者在阅读这两个文档的时候,感觉无从下口。

所以,本文在分析报文的过程中,会明确指出协议文档在什么地方定义了他们,让我们有目的的去查阅协议文档,做到知其然也知其所以然,这样,学习起来就会轻松很多。

1. BLE报文结构BLE报文结构如下,他由下图所示的各个域组成。

因为有的域的长度超过了一个字节,所以在传输的过程中就涉及到多字节域中哪个字节先传输的问题,BLE报文传输时的字节序和比特序如下:∙字节序:大多数多字节域是从低字节开始传输的。

注意,并不是所有的多字节域都是从低字节开始传输的。

∙比特序:各个字节传输时,每个字节都是从低位开始。

图1:BLE报文结构1.1 前导前导是一个8比特的交替序列。

他不是01010101就是10101010,取决于接入地址的第一个比特。

∙若接入地址的第一个比特为0:01010101∙若接入地址的第一个比特为1:10101010接收机可以根据前导的无线信号强度来配置自动增益控制。

1.2 接入地址接入地址有两种类型:广播接入地址和数据接入地址。

∙广播接入地址:固定为0x8E89BED6,在广播、扫描、发起连接时使用。

∙数据接入地址:随机值,不同的连接有不同的值。

在连接建立之后的两个设备间使用。

对于数据信道,数据接入地址是一个随机值,但需要满足下面几点要求:1) 数据接入地址不能超过6个连续的“0”或“1”。

2) 数据接入地址的值不能与广播接入地址相同。

3) 数据接入地址的4个字节的值必须互补相同。

4) 数据接入地址不能有超24次的比特翻转(比特0到1或1到0,称为1次比特翻转)。

蓝牙4.0介绍

蓝牙4.0介绍

蓝牙4.0(BLE)介绍:2012年推出的蓝牙4.0,是3.0的升级标准,其最重要的特性是低功耗。

其功耗较老版本降低了90%,该项技术可为制造商及用户提供三种无线连接方式,包括用于多个类别电子消费产品的传统蓝牙技术;用于手机、相机、摄像机、PC及电视等视讯、音乐及图片传输的蓝牙高速技术;以及用于保健及健康、个人设备、汽车及自动化行业的低功率传感设备和新的网络服务的蓝牙低耗能技术。

nRF51822是一款为超低功耗无线应用(ULP wirelesss applications)打造的多协议单芯片解决方案。

它整合了Nordic一流的无线传送器,一个ARM Cortex M0核以及256KB的flash + 16KB 的RAM。

nRF51822支持Bluetooth(R) low energy 和专用的2.4GHz协议栈。

nRF51822使用32位ARM Cortex M0核心,片上256kB的flash(开发蓝牙4.0程序时,其中176kb可用于应用开发)。

相较于8/16位的平台拥有更佳的代码密度和更快的执行速度。

可编程外设互联(Programmable Peripheral Interconnect, PPI)系统提供了一个16通道的总线使外设可在没有MCU介入的情况下进行直接的和自主的通信。

这将减少外设经由CPU通信造成的延迟,并可在通信过程中保持CPU休眠以减少能耗。

此设备有两种电源模式- ON/OFF, 但是所有系统模块和外设都有独立的电源管理用以控制相应模块根据任务需求在RUN/IDLE 状态间进行切换。

蓝牙通信协议:蓝牙的通信协议分为蓝牙专用协议和蓝牙非专用协议,它们都按特有的顺序包含在蓝牙协议栈中。

其中蓝牙专用协议包括:BaseBand、LMP、L2CAP、SDP;蓝牙非专用协议包括:电缆替代协议:RFCOMM、电话传送控制协议:TCS-Binary和AT命令集、选用协议:PPP、UDP/TCP/IP、OBEX、WAP、VCARD、IrMC、WAE。

干货|BLE入门谈:从空中数据收发理解BLE(下)

干货|BLE入门谈:从空中数据收发理解BLE(下)

⼲货|BLE⼊门谈:从空中数据收发理解BLE(下)点此查看>>从空中数据收发理解BLE(上)在使⽤带BLE功能的MCU进⾏应⽤开发的时候,需要先熟悉BLE的API. 然⽽,各⼚家的BLE API风格差异很⼤,要⽐不同器件平台硬件驱动库HAL之间的差别更⼤。

底层⽆线电部分的硬件,各家⾃有独⽴的设计(硬件寄存器也不⼀定开放),况且BLE协议栈有很⼤⼀部分是软件实现,它不光涉及⽆线电部分,还需要定时器和中断管理、电源管理,甚⾄⽤到动态内存分配。

于是要⽤BLE通信,协议栈部分⼏⼗上百kB的代码占⽤是很常见的(有的平台把API实现放到ROM⾥能省部分),但难处在于不容易预测它的软件⾏为,如⼀个API调⽤的执⾏时间、什么时候会⽤回调函数、什么时候需要切换低功耗模式等等。

每当接触⼀个新的BLE MCU平台时,对BLE API的学习时间要远多于GPIO、UART这些基础硬件。

如果对BLE技术缺乏认识,学习这些API更容易⼀头雾⽔。

BLE协议栈包含的内容太多了,⼀下弄明⽩太难。

作为MCU应⽤开发,⼜不⼀定需要了解那么多,只要能实现需要的数据通信就够了。

跟⼿机⽤BLE通信会⿇烦⼀点,但如果是MCU和MCU之间通信呢?⽤过NRF24L01吗?它的空中数据包和BLE的数据包很相似,因为协议简单了,没有BLE的Profile, Service那些概念,对MCU⼯程师友好很多。

BLE应⽤如果只做⼀个beacon的话,就是只管定期发出数据,不需要建⽴连接的那种,其实是⽤不着协议栈的,甚⾄可能BLE API都不⽤到——这么说是不是⼀下⼦简单了?⽐如,我只需要定时⼴播⼀个温度信息,真没必要那么复杂啊。

理解了BLE的数据包,就可以⽤不复杂的办法来做。

这还有⼀个条件,就是能直接访问MCU上的⽆线电部分硬件:得有⼀个开放的硬件环境,有⼿册。

本帖将⽤nRF51822来演⽰怎么直接操作硬件进⾏数据包的收发。

nRF51822是⽐较⽼的BLE MCU了,很容易从拆机的⼿环类电路板上找到,它后⼀代的nRF52xxx系列性能更好,⽆线部分硬件变化不⼤。

2.4GRF协议BLE蓝牙4.0协议芯片NRF51822介绍

2.4GRF协议BLE蓝牙4.0协议芯片NRF51822介绍

发布时间:2012-11-01 16:54:202.4GRF协议BLE蓝牙4.0协议芯片NRF51822介绍技术类别:资源共享关于 nRF51 系列多协议 2.4GHz 射频收发器拥有高性能、超低功耗以及灵活性等好处。

它的主要功能包括:在蓝牙低功耗模式下灵敏度为-92.5dB RX,高达 +4dBm 的输出功率;与 Nordic 上一代射频收发器相比,链接预算增强高达 9.5dBm;低于10mA 的峰值电流适合3V 纽扣电池;符合蓝牙低功耗(蓝牙 4.0 )标准;与 Nordic 现有的 nRF24L 系列 IC 空中完全兼容;支持包括蓝牙低功耗、ANT 和专有 2.4GHz 等协议的非并行和并行操作;场强RSSI。

nRF51 系列 SoC 大大地降低平均电流,使单芯片适用于各种无线应用。

它的主要功能包括:功能强大且低功耗的 32 位 ARM Cortex-M0 处理器,启动时间为 2µs,与 8/16 位处理器相比,大限度地降低了活动时间并提高了代码密度;细化电源管理,个别系统可独立开关,并能基于活动级别自主控制时钟;可编程周边互连 (PPI) 系统。

周边设备,如射频收发器、计时器及 I/O等,不需通过处理器而能自主相互作用。

从而降低处理器的活动时间来节省功耗,并放宽对处理器实时要求。

高效的EasyDMA射频收发器接口具有弹性 RAM 映射 FIFO;高灵活性的GPIO 映射简化了 PCB 设计,有助降低布线板层数量;自定义 2 区内存保护装置 (MPU) 对用户程序和预编译协议堆栈例如蓝牙低功耗和 ANT运行时保护。

nRF51 系列软件架构在协议堆栈和用户应用程序间具有一个独特且功能强大的分隔区,为应用程序开发人员提供最大的灵活性、开发简易性和代码安全性。

协议堆栈,例如蓝牙低功耗或 ANT,可为预编译二进制码或在设备上预编程;堆栈为 100% 异步并由事件驱动,并向应用程序层提供线程安全管理程序调用 (SVC) 的应用程序接口 (API);简单的编程模型,没有专用的应用程序框架或计划程序/RTOS 依存性,简化并加速了代码开发;协议堆栈和应用程序代码没有链接时间依存性,并可独立编译和更新/编程;堆栈受运行时保护,确保相互操作性并将应用程序错误而影响堆栈的风险降低;堆栈可以验证码和合格二进制目的码提供。

nrf51822学习记录

nrf51822学习记录

目录第一部分:前期准备 (2)1.1软件准备: (2)1.2硬件准备: (2)第二部分:程序编写 (3)2.1编写第一个亮灯程序 (3)2.2一般程序的编写 (10)2.3 ble的编写 (14)1.1软件准备:Keil 4.72以上(4.72版本以下不能调试)JlinkARM 4.86bNrfgo studioNrf51 sdk协议栈s110,s120,s130软件说明:nrf51下载程序有两种途径,一种是keil,一种是nrfgo。

Keil只能下载非ble协议栈的普通程序。

Nrfgo是下载ble协议栈和普通程序的。

1.2硬件准备:认识pca10005(带sma天线),pca10004,pca10000(dongle),具体参考nRF51822_DK_User_Guide_v1.0.pdf(这本书是dk的入门介绍)其他的入门参考文档:nRF51822 PS v1.3 CN 20130903.pdfnRF51822_PS v2.0.pdf (这两个都是产品规格书,可以连接芯片的配置和电气特性,ps1.3是中文版。

Ps2.0是最新版)nRF51_Series_Reference_Manual_v2.1.pdf(nrf51822的具体寄存器使用必须参考这个文档)nRF51822上手指南.pdf(这是ak板的上手中文指南)nRF51822-Kit开发板使用说明.pdf(这是网上大d电子自己生产板子的使用说明可参考)nRF51822 Development Kit - Hardware files 2_0 (这个文件夹里面是dk板的pcb图)2.1编写第一个亮灯程序(由于第一个程序就详细的讲解下)硬件准备:pca10000(dongle)软件准备:blinky_exampl(Keil\ARM\Device\Nordic\nrf51822\Board\pca10001\blinky_example文件下,由于pca10000里没有点灯例程)1.打开blinky.uvproj(依次设置)(这里IROM,IRAM设置要强调下。

S110_SoftDevice_Specification_v1.3A

S110_SoftDevice_Specification_v1.3A

S110 nRF51822 SoftDevice Specification v1.3A
Document Status
Status
v0.5 v0.7 v1.0
Description
This specification contains target specifications for product development. This specification contains preliminary data; supplementary data may be published from Nordic Semiconductor ASA later. This specification contains final product specifications. Nordic Semiconductor ASA reserves the right to make changes at any time without notice in order to improve design and supply the best possible product.
Main office:
D
Page 2
ra
ft
St
Otto Nielsens veg 12 7052 Trondheim Norway Phone: +47 72 89 89 00 Fax: +47 72 89 89 89
at
Mailing address:
us
Nordic Semiconductor P.O. Box 2336 7004 Trondheim Norway
Contact details
For your nearest distributor, please visit . Information regarding product updates, downloads, and technical support can be accessed through your My Page account on our homepage.

nrf51822-协议栈

nrf51822-协议栈

nrf51822-协议栈买了开发板后,先⽤的开发板的例程,下载了协议栈后再下应⽤程序,程序能正常运⾏。

后来采⽤keil软件中的Pack Installer 下载了Nordic的官⽅example,再下载官⽅的应⽤程序发现协议栈⽆法初始化,程序在ble_stack_init()⾥⾯的// Initialize the SoftDevice handler module.SOFTDEVICE_HANDLER_APPSH_INIT(NRF_CLOCK_LFCLKSRC_XTAL_20_PPM, false);之后就复位了,然后⼜运⾏到这⾥,如此反复。

后来擦除了整个芯⽚后,重新下载了keil官⽅的协议栈和应⽤程序后,程序⼜能正常运⾏,但是再下载开发板的例程后发现⼜出现上述⼀样的情况。

开始以为的晶振问题,但下载每个官⽅发例程后程序都能正常运⾏。

最后发现,从keil官⽅下载的协议栈为s130_nrf51_2.0.0-7.alpha_softdevice.hex(注意:是2.0.0版本)从开发板下载的是s130_nrf51_2.0.1_softdevice.hex(注意:是2.0.1版本)两者在初始化协议栈时对时钟的处理有点差异:2.0.0版本的// Initialize the SoftDevice handler module.SOFTDEVICE_HANDLER_APPSH_INIT(NRF_CLOCK_LFCLKSRC_XTAL_20_PPM, true);2.0.1版本的nrf_clock_lf_cfg_t clock_lf_cfg = NRF_CLOCK_LFCLKSRC;// Initialize the SoftDevice handler module.SOFTDEVICE_HANDLER_INIT(&clock_lf_cfg, NULL);断点进⼊到⾥⾯其实是⼀样的,但处理函数有些区别。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

nRF51822芯片上的BLE蓝牙协议栈
本文介绍了在nRF51822芯片上使用S110 SoftDevice协议栈构建一个最小的BLE应用的过程。

1初始化介绍
有一些初始化函数通常在执行一个BLE应用之前调用,下面的表格中列出了这些初始化调用函数,在后面将对它们进行详细的介绍。

大部分采用数据结构的形式作为输入参数,这些数据结构包含一系列的配置和选项信息,阅读代码中的注释能更好地理解它们。

在广播开始之后,你就进入了main函数中的for循环。

2 协议栈S110 SoftDevice
为了使用独特的射频特性,你必须使能S110 SoftDevice协议栈。

见《S110 nRF51822 SoftDevice Specification》(S110 nRF51822 SoftDevice协议栈说明书)中对硬件资源的详细需求。

3 广播
用于广播的数据结构如下:
ble_gap.h 中ble_gap_conn_sec_mode_t
ble_advdata.h 中ble_advdata_t
注意:传递给sd_ble_gap_device_name_set()的安全模式仅适于设备本身的名字。

广播参数(ble_gap_adv_params_t)必须通过sd_ble_gap_adv_start()来传递:
4 连接参数
SDK提供了一个名为ble_conn_params的模块用于管理连接参数更新,它通过SoftDevice API进行处理,包括请求的时间和第一次请求被拒绝再发送一个新的请求。

在初始化结构体ble_conn_params_init_t中,定义了更新过程的有关参数,例如,是否开始连接,什么开始写入一个特定的CCCD,是否使用连接参数,发送更新请求的延时等等。

在初始化函数ble_conn_params_init()中,使用封装了初始化连接参数(ble_gap_conn_params_t)的结构体ble_conn_params_init_t作为输入参数进行连接参数初始化。

ble_conn_params SDK模块确保与主机(集中器)的连接参数相适应,如果不适应,外围设备将要求更改连接参数,超过设定的更新次数都没有更新成功后,它就会断开连接或者根据设置返回一个事件到应用层。

5 服务
服务可以通过sd_ble_gatts_service_add()进行添加,最好不要在应用层代码中建立服务,而是在一个单独的文件中建立服务。

一个服务不是主服务就是次服务,但是在通常实际的应用中大部分使用主服务。

变量service_uuid就是你想用于服务的UUID。

变量service_handle是一个输出变量,当创建一个服务的时候将会返回一个唯一的句柄值,这个句柄可以在以后用于识别不同的服务。

6 特性
特性可以通过sd_ble_gatts_characteristic_add()函数进行添加,它有4个参数。

为了代码清晰,这个函数应该只能出现在服务文件中,而不能出现在应用层中。

第1个参数是特性要加入的服务的句柄,第2个参数是特性的结构体,它是一个全局变量,它包含了特性可能用到的性质(读,写,通知等)。

第3个参数是值属性的描述,它包含了它的UUID,长度和初始值。

第4个参数是返回的特性和描述符的唯一句柄,这个句柄可以在以后用于识别不同的特性。

例如,在写事件中用于识别哪一个特性被写入。

相关文档
最新文档