nRF51822介绍
- 通信距离30m(条件:空旷区域/1M速率)
- 工作频段:2.4GHz
- 工作电压:2.0V~3.6V
- nRF51822整合了Nordic一流的无线传送器,同时支持BLE和专用的2.4GHz蓝牙协议栈
- 基本情况:
- 2.4GHz多协议无线射频
- 32位ARM CortexM0 处理器
- 128位AES硬件加密处理器
- 256KB Flash,32KB RAM(最新的QF AC版本)
- 可编程外设接口PPI
- 全功能数字接口:SPI、I2C、UART
- 10位ADC
- 可编程的输出功率+4dBm到-20dBm
- 应用开发和协议栈完全独立
- 固定的系统时钟:16MHz
- 参考资料:
- 与新版芯片的各种版本搭配:
- QFN48封装
- HWID=0084
- Rev:3
- nRF51 SDK:10.0.0
- software device:S130-1.0.0
- software device specification:S130-1.0
- Qualified Design ID(QD ID)=68915(for S130 v1.0.0)
工程配置
Bluetooth
- 蓝牙4.0提出了“低功耗蓝牙”、“经典蓝牙”和“高速蓝牙”三种模式。其中,高速蓝牙主攻数据交换与传输;经典蓝牙则以信息沟通、设备连接为重点;蓝牙低功耗以不需占用太多带宽的设备连接为主。
- Bluetooth SmartReady与Bluetooth Smart
- Bluetooth SmartReady设备包括智能电话、平板电脑、PC、智能电视这些在用户周边设备中充当中心并且要求Bluetooth v4.0 dual-mode通讯的智能设备
- Bluetooth Smart设备时传感器类型的设备,比如心率计、电子计步器这种以电池并用来收集特定信息的设备,通常他们只需要single-mode low energy Bluetooth v4.0通讯
- Bluetooth4.0低功耗模式由双模和单模两种应用。双模应用中,蓝牙低功耗功能集成在现有的经典蓝牙控制器中,或在现有经典蓝牙技术的芯片上增加低功耗堆栈,整体架构基本不变,因此成本增加有限。单模应用面向高度集成、紧凑的设备,具备轻量级链路层,支持超低功耗的待机模式操作、简单设备恢复、可靠的点对点数据传输、安全的加密连接等;而链路层则适用于网络互连传感器,并确保在无线传输中,皆能通过蓝牙低功耗传输。单模式蓝牙低功耗设备与现有蓝牙设备不能兼容,无法向下兼容,仅能支持BLE技术;而双模式芯片可同时支持蓝牙低功耗和传统蓝牙技术。一般而言,手机和个人电脑等设备将会安装双模式芯片,以便于蓝牙低功耗设备已传统蓝牙进行互操作。
SoftDevice
- S110和S120由于协议栈大小有区别,因此在内部ROM和RAM分配的空间是有区别的。如下图:
- 应用程序的向量表地址,取决于芯片是否已下载了SoftDevice,SoftDevice的下载地址从0x0开始,应用程序的向量表必须紧跟在SoftDevice之后,应用程序可以使用除去SoftDevice空间之外的Flash空间。相应的,SoftDevice数据区从最低的RAM地址开始,应用程序的数据区要跟在SoftDevice的数据区域后面布置
- 如果芯片烧写了SoftDevice,那么用户应用程序和SoftDevice共享同一个call stack(堆栈),应用程序必须保证call stack有足够的空间给自己和SoftDevice,SoftDevice的call stack空间需求跟不同的设备和不同的协议版本都有关系。用户应用程序应该把call stack的大小设置为它本身的需求加上SoftDevice的需求,然后设置堆栈指针(stack pointer)到应用程序的复位向量(Reset Vector)的首地址。
- 为了保证SoftDevice的正确性,微处理器包含了一个MPU(Memory Protection Unit),它可以防止对特定区域的访问,debugger读取这些区域将会返回0x0000。被SoftDevice占用的空间将禁止write和erase,使能SoftDevice后,MPU将会对协议栈进行写保护。为了避免单步调式保护区域,请在SVC calls后面设置断点,然后直接运行到该断点,也可以使用“step over”方法跳过SVC calls。
GPIO
- 在使用GPIO的input功能之前,需要将input buffer连接上,不使用的时候可以断开,这样可以一定程度上省电
- GPIO pin的上下拉电阻使用标准的13KΩ的内部电阻
- GPIO pin的驱动强度,标准情况下是0.5mA,高驱动能力下为5mA
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31/*****************************************************/
extern void platform_led_init(void);
/****************************************************/
void platform_led_init()
{
nrf_gpio_range_cfg_output(LED_START,LED_END);
}
/****************************************************/
int main()
{
SEGGER_RTT_printf(0,"***Welcome to nRF51822***\r\n***System Clock=%dHz***\r\nPress \'y\' to begin\r\n",SystemCoreClock);
while('y' != SEGGER_RTT_WaitKey());
platform_led_init();
uint8_t led_status = 0;
while(1){
nrf_gpio_port_write(LED_PORT,1<<(led_status+LED_OFFSET));
led_status = (led_status+1) % LED_NUMBER;
nrf_delay_ms(500);
}
}
Power
- 实际中如果供电电压在1.75-1.95的时候,可以旁路内部的DC/DC转换器,直接使用内部的LDO,此时电源电压不高,在LDO上产生的功耗比较小,不会对整机功耗产生多达影响。当实际产品的供电电压高于1.95V,需要使能DC/DC转换器,以期将电源的效率提高。DC/DC转换器工作的时候会消耗300uA的电流。DC/DC转换器工作与否通过配置寄存器DCDCEN来实现。