nrf52840 gpiote如何配置中断输入_Nordic的BLE芯片如何OTA

本文档基于芯片NRF52832和NRF52840,SDK版本为nRF5_SDK_16.0.0,系统为windows。

在github上有一个类似官方的教程,按该教程来做是没问题的,只是有些地方说的并不是很清楚,没有讲到为什么,该教程地址是:https://github.com/gamnes/nRF52832-buttonless-dfu-development-tutorial

开始之前是,需要准备一些工具。

1. 工程编译工具,可以是IAR,或Keil,或Segger 的embeded studio,用哪种都是可以的。

2. 安装Jlink的驱动,这个不用说了,尽量安装6.0或更高的版本。因为老的版本不支持芯片型号。

3. 安装nrfjprog和mergehex工具,用来烧写芯片和合并固件,这两个工具可以通过安装<nrfgo_studio>来获取。

4. 安装nrfutil工具,用来生成setting文件,和打包固件。官方的教程里有讲在python下安装,但由于目前仅支持到2.x,所以问题比较多,并且也需要系统安装python工具,个人简单按本教程方法,只下载.exe教程就可以了。该工具的windows版本下载地址为:

https://github.com/NordicSemiconductor/pc-nrfutil/releases

注意:工具最好选用最新的正式版,否则可能会有问题,本例用的版本为:6.0.0;

之前用6.0.0a1版本时就有问题,导至OTA时校验通过不过,无论如何都无法OTA。

5. 安装make工具,用来编译micro-ecc库,工具版本最好不低于3.8.1,下载地址为:

http://gnuwin32.sourceforge.net/packages/make.htm

micro-ecc库用于空中升级加解密,在生成bootloader时需要该库生成的目标文件,在SDK中的路径为<externalmicro-ecc>。目录下有个build_all.bat文件,用来从github上下载最新的源代码,然后编译。

6. 安装gcc-arm-none-eabi的windows版本。同样用来编译micro-ecc库,下载地址为:

https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-rm/downloads

建议用最新版。

以上工具准备时没有顺序要求,但建议把相关工具都放在系统的环境变量中,这样后面在使用时就不需要使用工具的绝对路径了,在cmd中直接输入工具名称就可以执行。

好了,工具准备完毕后就可以开始制作OTA工程了。

建议先从SDK中的示例工程开始:

Bootloader工程:examplesdfusecure_bootloadersecure_bootloader.eww

Application工程:examplesble_peripheralble_app_buttonless_dfuble_app_buttonless_dfu.eww

工程源码什么都不用改,只需要选择对应芯片的项目就可以。

1. 下载micro-ecc库,并编译,方法是从cmd控制台中进入到目录<externalmicro-ecc>,然后执目录下的build_all.bat,第一次执行时确保电脑连接网络,因为要下载源码。之后就可以不用连网了。

该步骤有一点要注意,在IDE生成application时可能会提示wchar_t 是16们或32位不兼容的问题,如果有该类似错误的话,需要修改对应Makefile中的CFLAGS,找到包含有”-fshort-wchar”参数,然后从CFLAGS中删除该参数,再重新生成即可。

同样在IAR或Keil中可能也会提示<libnrf_cc310_bl_0.9.12.a>文件wchar_t数据类型长度不兼容的问题,此时需要去该.a文件下面用另一个同名文件来替代它,比如IAR中用<externalnrf_cc310_bllibcortex-m4hard-floatlibnrf_cc310_bl_0.9.12.a>来代替工程中原有的文件。

2. 需要生成私钥和公钥

生成办法是在控制台中输入以下命令:

nrfutil keys generate private.pem

nrfutil keys display --key pk --format code private.pem --out_file dfu_public_key.c

然后会生成两个文件private.pem和dfu_public_key.c文件,注意保存这两个文件,private.pem在生成OTA的zip包时要用到,给ota包加密钥。Dfu_public_key.c为生成bootloader时要用到的源码,两个文件必须一一对。

3. 把dfu_public_key.c文件复制到<exampledfu>目录下,替换掉SDK中自带的同名文件,然后编译bootloader工程。

4. 编译示例application工程<examplesble_peripheralble_app_buttonless_dfu>

5. 把第3和第4步生成的bootloader和application目标文件复制到一个指定的目录下面,然后复制softdevice文件也到该目录下面。对应的Softdevice文件可以在SDK的目录<componentssoftdevice>下面找到。

确保三个文件在同一个子目录下面,以方便脚本文件操作。

6. 依据application文件来生成setting文件,该文件用来指令applicatoin在芯片flash中的一些配置及其它一些工程,具体可参考SDK手册,生成的指令如下:

nrfutil settings generate --family NRF52 --application app.hex --application-version-string 0.0.0 --bootloader-version 0 --bl-settings-version 2 settings_s132.hex

注意:--flaily后面的为芯片的型号系列,值可以通过查看nrfutil工具的help来可以获取,--bl-settings-version这个也有要求,对该SDK的版本值应该为2,也可以通过查看工具的help来获知:

nrfutil settings generate –help

39ae0e4e0d5583c7eeefc0e14919528b.png

7. 合并离线烧录文件,把app,bootloader和Softdevice及bootloader的配置文件合并成一个文件,一次性烧到芯片中去,适合工厂使用,脚本 如下 :

mergehex.exe --merge softdevice.hex bootloader.hex --output fw_sd_boot.hex

mergehex.exe --merge app.hex fw_sd_boot.hex settings_s132.hex --output fw_all_s132.hex

生成的fw_all_s132.hex即是打包好的文件。

8. 把fw_all_s132.hex烧到芯片中去,采用如下 脚本 :

nrfjprog.exe --family NRF52 --eraseall

nrfjprog.exe --family NRF52 --program fw_all_s132.hex --verify

nrfjprog.exe --family NRF52 --reset

9. 生成可以 OTA的zip包文件,注意,后面制作或更新app时仅需执行该步即可。

脚本 为:

nrfutil pkg generate --hw-version 52 --sd-req 0xCA --application-version-string 0.0.1 --application app.hex --key-file private.pem app_ota_s140.zip

该指令中的-sd-req的值 和-hw-version的值需要注意,它们要的和bootloader中的sd_config.h中的硬件版本配置一至,及softdevice和版本一至。其中—sd-req的值可以通过nrfutil的帮助说明来获取:

nrfutil pkg generate –help

f8adcbe93364aca54602fc8a5652d741.png

注意,如果你使用的nrfutil的版本比较老,则可以看不到针对新版的SDK所需要配置的值。另外,如果是非Debug版本,则要注意—application-version-string的值,不能低于芯片中已经有的版本。

好了,第9步做完后,就可以使用nRF Connect来通过手机给芯片OTA方式升级了。

然后把示例的application所具有的OTA功能移植到你自己的工程中就可以了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值