Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2579018
  • 博文数量: 320
  • 博客积分: 9650
  • 博客等级: 中将
  • 技术积分: 3886
  • 用 户 组: 普通用户
  • 注册时间: 2009-03-27 21:05
文章分类

全部博文(320)

文章存档

2024年(1)

2017年(5)

2016年(10)

2015年(3)

2014年(3)

2013年(10)

2012年(26)

2011年(67)

2010年(186)

2009年(9)

分类: 嵌入式

2017-01-21 11:16:39

转自:

前言:

最近在研究nRF51822,这是Nordic出的一个低功耗蓝牙(BLE)芯片,使用的是M0的内核,外设也还比较丰富,大概可使用的GPIO有30多个,具体参数请参考芯片手册,这里就不多说了,使用它做产品,一般有个功能是必须的,那就是如何升级固件,因为你是不敢保证你卖产品的时候,固件程序是完美无缺的,所以就存在一个升级问题,当然你不可能叫用户把硬件寄给你用编程器来烧程序吧,所以就得让你的产品支持用户自己升级固件的功能。


原理简介:
对于单片机做的产品,要实现在线升级,单片机内部一般是两段代码,一个是bootloader程序,一个是用户app程序,bootloader程序主要就是实现app升级的程序,它是单片机上电后首次运行的程序,app程序就是实现产品功能的程序。
对于nRF51822来说,稍微有点特殊,但是本质原理也是一样的,nRF51822芯片内部有段SoftDevice的程序,它是芯片上电后首次运行的程序,不过这段程序不负责程序升级,它是Nordic官方提供的蓝牙协议栈程序,当然它也具备一点bootloader的功能,也就是说,芯片上电后,它会判断芯片内部是否有bootloader代码(bootloader代码位置固定,所以它能判断出是否有合法的bootloader程序),若有bootloader程序则会跳转到bootloader程序执行,若没有bootloader程序而只检测到了用户的app程序,那么就直接跳转到app程序运行,当然这个bootloader程序是我们自己写的代码,只是它存储的位置和app程序是不一样的。
bootloader程序差不多也只做两件事情,1:控制程序的跳转,比如跳转到app程序;2:实现app程序升级;
当然bootloader是我们自己写的,你要实现更多的功能也是可以的,但是最基本的功能就是这两个,bootloader运行后,检测直接跳转到app的条件是否满足(app程序合法,相关标志位合法),若满足就直接跳转到app执行app程序,若不满足就继续执行bootloader,等待升级的相关操作命令;
 
手机端DFU功能简介:
单片机段程序准备好了,当然就需要手机端程序来实现固件的升级了,主要工作流程如下:
1,扫描蓝牙设备,连接蓝牙设备,查询蓝牙设备是否支持DFU服务;
2,若支持DFU服务,那么将本地的固件通过蓝牙发送出去;
3,数据发送完毕,升级固件成功


当然,具体实现的时候,细节就复杂很多,目前我实现了一个通过网络升级的app,主要就是通过FTP从服务器获取固件文件,然后再通过蓝牙将数据传输到nRF51822实现固件升级。

  
这个是我刚刚做好的APP,可以实现通过网络方式升级固件
1,点击获取固件,从服务器获取固件文件列表;
2,从列表中选择一个固件,选择后会自动下载固件到手机本地目录;
3,点击选择设备,打开设备列表,选择需要升级固件的设备;
4,点击升级固件按钮,固件升级完成!

所用S110下载:  s110_nrf51822_6.2.1_softdevice.rar (86.51 KB) 
APP源码下载:   (653.88 KB) 
APP安装包下载:   (1.03 MB) 

这个文档说得更详细点,需要深入了解的可以看看
  (1.42 MB)
阅读(5546) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~