最近手里有了一块NRF51822EK_PRO开发板, 在淘宝上买的一个山寨开发板. 山不山寨不重要, 重要的是cheap and work fine. 提醒以下, 那些淘宝店说什么提供技术支持, 那是屁话来的, 没什么值得的参考的技术.
ok, 先说说JLink在linux使用时该注意的事项:
linux下的Jlink会提示升级固件(如果JLink的固件版本比PC上的软件版本低的话), 然后自动升级, 然后JLink就不亮灯了, 即固件升级失败. 所以在linux下使用JLink时, 不能升级. 请确保JLinkExe的版本和JLink固件版本一致. 对于那些升级失败的童鞋, 可以google一下怎么重刷JLink固件.然后再继续. 重刷固件我在win7 64bit系统失败, 换xp就可以了.
我的解决方法: 在JLink官网下载Linux版本和windows版本的JLink软件包, 我用的是4.80e, 然后在windows上打开JLinkCommander 4.80e, 这时会提示升级JLink固件版本, 点确定升级. 顺利升级就可以回到Linux下了. 这时使用./JLinkExe连接JLink成功!
好了, 转到主题来:
由于NRF51822EK_PRO本身集成Jlink, 所以直接用USB线连上电脑即可. 在linux下, NRF51822EK_PRO使用不了JLinkgdbserver. 至于为什么, 我也不知道. 咱这里只用来烧写.
输入./JLinkExe 连上JLink, 自动切换的SWD模式. (如果连不上, 看看JLink的readme文件)
JLink_Linux_V480e_i386$ ./JLinkExe SEGGER J-Link Commander V4.80e ('?' for help) Compiled Jan 31 2014 18:13:30 DLL version V4.80e, compiled Jan 31 2014 18:13:27 Firmware: J-Link ARM-OB STM32 compiled Aug 22 2012 19:52:04 Hardware: V7.00 S/N: xxxxxxxx Feature(s): RDI,FlashDL,FlashBP,JFlash,GDBFull VTarget = 3.300V Info: Could not measure total IR len. TDO is constant high. Info: Could not measure total IR len. TDO is constant high. No devices found on JTAG chain. Trying to find device on SWD. Info: Found SWD-DP with ID 0x0BB11477 Info: Found Cortex-M0 r0p0, Little endian. Info: FPUnit: 4 code (BP) slots and 0 literal slots Cortex-M0 identified. Target interface speed: 100 kHz J-Link>连接成功!
接下来讲讲烧写NRF51822的地址问题:
根据官方给的文档, 使用不同版本的S110, 设置的链接地址和烧写地址都有所不同.
我用的是S110_5.2.1的版本, 蓝牙协议栈占用80KB Code Rom, s110 softdriver 烧写到0x0地址, 一直到0x14000(80*1024), 所以我们烧写使用S110蓝牙协议栈的程序时, 下载地址是0x14000, 使用JLink命令 loadbin your_bin 0x14000来烧写.
如果不使用蓝牙协议栈的应用程序, 直接下载到0x0即可. 这个没实验过, 理论上是这个地址的.
下面贴上我的烧写脚本:
$cat NRF51822_FlashDL.JLinkScript r h loadbin /tmp/led_gcc_s110_xxaa.bin 0x14000 q
$cat FlashDownload.sh #!/bin/bash JLinkScriptFile=$PWD/NRF51822_FlashDL.JLinkScript JLinkDir=/opt/software/JLink_Linux_V480e_i386 cd $JLinkDir ./JLinkExe -if SWD -device nRF51822_xxAA -speed 1000 -CommanderScript $JLinkScriptFile用在其他项目, 稍微修改一下路径和文件名就可以用了.
后记:
说到链接地址, 使用MDK这些IDE, 可以在图形界面上改改即可. 因为linux下, 就用不了MDK了. 官方文档有教如何在eclipse上搭建开发环境. 但是我试了一下. 挺麻烦的. 所以我自己搭建自己的开发环境, 就是vim和makefile了. 现在也可以烧写了. 基本都够用了. 继续研究一下怎么调试.
有空把自己的开发环境也写出来跟大家分享一下.