Nordic nRF52832 学习笔记(1) 介绍,入门,与准备工作
近来,物联网已成为大势所趋,VR与AR正方兴未艾,各种手环、遥控、智能家居也在粉墨登场。技术前沿的领航者们已经快马加鞭,各种意志与暗示也在上传下达。物联网,无线通讯,移动互联,将成为新的目标与宠儿。最近开的电赛动员会上已经明确而彻底的传达了“互联网+”的精神,甚至要用手机做APP来操控云云,总之是无线通信已经被摆在了前所未有的位置上。
现在常用的有规范标准的无限通信协议主要有WiFi(802.11a/b/g/n),蓝牙(Bluetooth),ZigBee(802.15.4)等等,他们各有各的优点与不足。
WiFi的功耗太大,速率高,适合来传输数据流(文件),而不是做控制,距离较短。
蓝牙功耗很低(BLE),而且历史悠久,技术成熟,是手机的标配,距离适中,适合做控制以及小规模的数据传输。(BLE是低功耗蓝牙的意思,也就是指蓝牙4.2)
ZigBee功耗也很低,且通信距离较远,传输速率很低,是专为自动控制设计的通信协议,但目前技术仍不够成熟,且组网较为复杂。
此外还有Z-wave,Thread,ANT等各种无线通信协议,但是不如以上几种通用程度高。
6LoWPAN似乎也很有潜力,但是目前才刚刚开始。
作为无线通信入门,我选择了从蓝牙开始。
市面上常见的蓝牙模块有很多,TI的CC系列,Dialog的DA系列,以及Nordic的nRF系列都是很优秀的产品。
Dialog的产品硬件结构较特殊,整体成本低但是开发复杂,CC系列和nRF系列都是资料资源丰富且广泛使用的产品,我所选择的产品就是Nordic的nRF52832,支持蓝牙4.2(BLE),甚至可以支持5.0。
这些蓝牙模块多半都是带有MCU核的,或者说根本就是一个MCU带有蓝牙功能。相对于TI产品,nRF52832的硬件资源要丰厚许多(Cortex-M4F,512K Flash,64K RAM,xxAA版),这也就意味着更大规模的工程成为可能。
(其实真正的原因是CC系列的引脚定义我没太看明白....等52832学习完了也可能上手CC2640)
开发板不想买了,因为已经习惯了用TI的TM4C1294进行开发,所以一般主体工程都是靠1294完成,学习52832主要是想熟练蓝牙的配置与使用。于是买了个最小系统板(严格来说都不算,只是把所有引脚引出来而已,然后加一段镀铜天线)。
然后就遇到了许多问题。
之前用1294时是TI官方的EvaluationKit板,自带仿真模块(Stellaris ICDI),只要驱动一装就能刷金程序然后Debug调试。因此也从来没有考虑过什么接口仿真的问题。现在对着52832芯片手册上的管脚图,只找到了两个SWDIO和SWDCLK引脚,对于具体如何把程序烧写进去依然一无所知。回想起其他用32开发板的情况,似乎需要一个名为Jlink的东东?快速上淘宝翻了下52832开发板的情况,确实如此,Jlink仿真器是必须的,开发板上已经预留好了20脚的JTAG接口,直接将仿真器连在开发板与PC中间,再辅以相应的驱动程序就能实现下载与仿真。但是我买的产品上可没有JTAG接口,而且SWD和JTAG似乎也不太一样的吧?
一顿搜索,大概对JTAG,SWD,JLink都有了一番了解。JTAG和SWD确实是不一样的协议,Jlink本身默认JTAG,但是从JLinkV6以后,Jlink仿真器也开始支持SWD,到了V8以后,对SWD的支持已经相当不错了。于是又买了块Jlink仿真器,说是给nrf5系列专用的V8,一个仿真器比两个我买的52832板还贵,拿到手以后,做工让我瞬间就断定是盗版货了。。还好上面似乎有标识JTAG+SWD...在52832的数据手册上,基本已经确定了这款芯片只支持SWD了,希望能用吧(笑)。大概就是把SWD的引脚接到仿真器的特定引脚上吧。
然后是软件环节。习惯了TI的datasheet和SDK,Nordic的真的是....体验感差好多呀。。采用的IDE是MDK Keil,然而官网提供的nRF_DeviceFamilyPack最新版和SDK最新版例程里的pack版本居然不一样(pack已经更新到8.14.1了,而SDK里用的是8.12.0,SDK用的也是最新版)。好吧或许SDK那边还没更新,但是老版的pack下载在哪里呢?只能手动添加Device和CMSIS,然后是令人烦躁的include paths。SDK的文件结构相当出色,各种包各种drivers各种libraries相当完善有条理,但是初始化必须的一些驱动和库文件被包含在了各个文件夹,相比之下,TI的driverlib简直太方便了。至于TI的pdf函数库对Nordic的html的无比的优越性。。用了都知道。
终于到了编译环节,把官方的例程拿出来编译,果然一大堆错误,定义变量语句不在函数开头之类的问题比比皆是,还有一大堆定义结构体顺便初始化的奇怪格式也是层出不穷,难道我的Keil MDK 5.20已经很老了吗~
在手动改完官方库的所有错误之后,把自己的初始化空工程拿出来终于编译通过..比TI的果然是慢了好多好多。。
在具体的操作中借鉴了新浪博客Elson的很多知识,也欢迎去看看
NRF52832开发日志
http://blog.sina.com.cn/s/articlelist_2684296980_1_1.html
鉴于板子还没到,只能先到这里啦