接触过BLE开发的盆友基本都听过Nordic蓝牙芯片,Nordic通过提供完善的SDK给开发者,降低了开发BLE应用的难度。但是对于芯片的固件下载只能通过命令行工具或者安装一整套开发工具,如果只是临时需要下载用一下就显得很不方便,并且官方的工具对于HEX文件支持比较好,而BIN文件下载就比较麻烦。
由于Nordic芯片下载麻烦,本文基于Python开发了用于固件下载的工具,可以下载到内部Flash及外部QSPI Flash,支持HEX及BIN文件下载。使用此工具只需要安装J-Link驱动,使用起来比较方便。
目前只实现了NRF52芯片的下载,手头只有NRF52840开发板,所以只测试了NRF52840,其他的有机会再测试。
1. 基本结构
由于NRF52芯片是基于ARM Cortex-M内核,所以可以使用JLinkARM.dll与之通信实现固件下载,直接操作JLinkARM.dll比较麻烦。幸运的是Nordic提供了封装好的Python代码pynrfjprog,Github地址为pynrfjprog,所以现在要做的就是通过Python实现一个GUI界面,再调用pynrfjprog提供的接口即可。
下载工具结构如下:
工具界面使用Python thinker开发,最后用pyinstaller打包成一个单独的EXE文件,这样可执行文件可以到其他PC上直接运行,不依赖Python、pynrfjprog等环境。当然,J-Link驱动还是需要的,否则无法与芯片通信。
2. 使用方法
下载工具是图形化界面,所以使用非常简单:
-
插入设备,如果没有驱动则安装J-Link驱动。如果Segger的驱动装不上,可以试试用驱动精灵安装,我自己的电脑就是死活装不上,然后用驱动精灵装上了.
-
打开工具,选择需要下载的文件,可以选择HEX或BIN文件。其中BIN文件需要输入下载的起始地址,如果地址在QSPI的范围则下载的外部QSPI Flash。
-
点击Connect按钮
-
点击Download开始下载,等待进度条结束。
-
点击Disconnect断开
-
Optional, Lock锁住芯片J-Link无法连接,Recover恢复芯片并擦除全片,Reset复位芯片
3. 总结
使用图形化工具下载便捷,后续可以添加更多功能,如读取Flash数据、读寄存器等。
代码地址: NRF flash tool