TA的每日心情 | 擦汗 2014-5-23 23:46 |
---|
签到天数: 6 天 连续签到: 1 天 [LV.2]偶尔看看I
|
本帖最后由 ayuan_h0n9 于 2014-5-20 09:02 编辑
以上帖子纯属原创,如有雷同,算我抄你.
Hi everybody~I am Ayuan
大家好,我又来了,这么晚打扰大家,真是不好意思~~~
这次写文章的目的是让大家从此撇开dongle,撇开那不稳定的SWD四根线,用手机(ios/android)通过BLE直接
下载/调试固件!!
其实说白了就是用了示例里面的DFU程序稍微修改罢了,从而实现 Bootloader + SoftDevice ,哈哈哈没有任何技术含量的,,献丑了!!
所以其中的修改过程不就赘述啦哈,那些都没有技术含量的,也都不值得去深究的,虽然也花了我整整一天时间
来研究/修改它.....惭愧...
首先下载附件包,解压缩,并确定电脑安装了 keil 和 Master Control Panel.3.5.1.8299 版本
注意,一定得用那个版本才能正常使用
然后连接上dongle + AK Board...废话..
打开 刚刚解压缩的文件夹,运行里面的STEP1.bat 批处理(不需要管理员权限也行)
随便按个键,开始对AK板下载 最新版的 SoftDevice 7.0.0(我是用最新版的,建议也用这个)
然后一会会跳出一个窗口提示
Could not start CPU core. [ErrorCode: -1]
无视它,因为你用的是D版的dongle.然后再随便按个按键,窗口关闭.
然后,拔下dongle,两秒钟后再插上去,切记这个步骤一定得做,不然芯片无法
从复位中跳入正常状态.
插入一会后(大概5s),运行STEP2.bat批处理 刷入BootLoader 1.0.0(Ayuan修改版哈哈哈)
也是随便按个按键,顺利的话会一路运行到:
然后就,恭喜你~dongle可以光荣退休了~~把光荣的旗帜交接给你的移动终端吧.
接下来测试一下 Bootloader 1.0.0 + SoftDevice 7.0.0 是否成功运行.
1.拔下dongle,只接VCC GND两根线到AK板上
2.观察AK板上LED1-LED5的运行状况:
成功刷入的话,LED1-LED4会先同时亮起,一秒种后再同时熄灭,一秒种后LED1-LED4再以一秒种的间隔
逐渐亮起,一秒种后LED4-LED1再以一秒种的间隔逐渐熄灭,之后LED1常量,此时工作正常.
此时,用手机端(我是已经过时了的iphone5....安卓端暂时还没测试,等明天Moto G到手了再测试一下)
上面的nRF Loader 或者nFR Toolbox 里的 DFU 程序,随便选个程序,再按扫描设备(注意,这里只是测试连接),如果出现" AKII_DFU"设备的话,那么恭喜你,一切正常~~~可以真正抛开dongle了~~
当然,如果你好奇,再点一下设备,连接上的话,你会发现AK板上的LED1灯灭了,LED2灯亮起来了,那是因为
LED1 是 Advertising Led,就是广播指示灯
LED2 是 Connected Led,也就是"已连接"指示灯
Bootloader 与 SoftDevice 都有了,接下来改做什么呢?
对了,该刷一个 APP来运行一下嘛,,毕竟刚刚那些都是外表,这个才是真正的心脏.
因为我用的是 7.0.0版本的SoftDevice,所以手机端自带的几个测试hex文件都是不兼容的,
为什么呢?
这个问题卖个关子,让有心人来回答一下哈(都吃我嚼过的东西就没意思了,有些东西还是得大家花些心思去摸索)
XX00SDFLJSADLFSD;J@@@@&&&&-----------------------------------------------
所以得用我们自定义的固件,不知道该自定义什么?没关系我也准备好了,就在刚刚解压缩的文件夹里面的
led_test.bin 固件.
那么,怎么测试呢?因为坑爹的ios架构不可以随便操作程序目录,所以只能按刚刚nRF Loader的软件提示通过邮箱把
固件发到手机邮箱上,再用手机端邮箱打开邮件,然后再指定附件由nRF Loader打开(这个操作很简单,就不用我再手把手教了吧)
然后同样,连接 目标板,也就是 AKII_DFU,再upload, Done!
正常的话板上程序会开始运行了,板上的五个LED灯会以0.5秒的间隔开始亮灭了(原来只有4个,请注意)
至此,我的工作就全部结束了,哈哈哈哈哈,谢谢观赏~
等等,貌似我还漏了什么重点没讲?
是的,刚刚上面那个问题还没有解答,
好的,这里解答一下吧,
因为新的SoftDevice 版本7.0.0 较 原来的6.x.x版本功能增多,体积增大,
6.x.x 所占用的 rom 地址为: 0x00000H - 0x14000H ,只用了,80k的rom大小
7.0.0 所占用的 rom 地址为: 0x00000H - 0x15000H ,用了 84k的rom大小
而手机端的nRF Loader软件或者nRF Toolbox 软件里面的测试程序都是基于6.x.x 的SoftDevice 编写的,所以当然无法
正常运行啦.
所以,重点来了,,
如果以后大家在编写 APP时,要修改的地方是
IROM1: 的 start 要改为 0x15000, 原来是 0x0 或者 0x14000
size 要改为 0x13000,原来是 0x40000
这里可能有人会问, 51822 的rom容量是 256k,如果因为 SoftDevice 占用了 84k体积,那么size也
应该是 256k - 84k = 172k 呀, 为什么会是 76k(0x13000H) 呢? 不要忘了 Bootloader也是需要占用rom的容量的,
它占用的是 0x3B000 -- 0x40000 一共 20k(0x5000H)的容量,而且,这个bootloader 是基于 dual bank 模式的也
就是说,是把剩余的 256k - 84k - 20k = 152k rom容量平均分成两片区域,也就是 0x13000H = 76k,这样
旧的程序在新的程序被烧写,验证成功之前是不会被擦除的,
这样也保证了芯片里面时刻有App可以稳定运行so....
至此,就这么多啦..再次感谢大家花时间来 debug 我的文章...
还有一点,如果AK板上电后正常运行APP程序了,想让它再跳转入Bootloader模式时,怎么做呢?
为此我在 bootloader 1.0.0 版本里也设定好了,
只要按住Botton 0 不放,再按一下nRF_RESET按键就行啦,它会复位并跳转入 Bootloader模式
当然,如果让它发现其实你是在调戏它,让它在一分钟之内都没有对它脱衣或者脱裤或者任何进一步动作的话,
它就会重新跳转如APP(如果有的话),并正常运行了...
就是这么简单....
很无聊的文章是吧......
PS:文章里没有提到任何关于 RTOS 或者任何中断 所需要做的相应修改,为什么呢,因为,这将会是我的下一篇文章
哈哈哈哈哈~~
各位晚安(早安)~~~~~~~~~~~~赶快去编写 app代码吧~~~
Ayuan
2014.05.20 00:41
|
|