nrf52805/nrf52810/nrf52832 如何让程序从RAM运行
一.目的
在一些特定场景,如工厂测试、入库测试,我们要做到快速、准确地测试PCBA,我们必须在主控芯片上面写一些测试代码来验证天线性能,工作电流,是否虚焊的情况。一般处理方法如下:
- 把这些代码放在我们的应用程序 里面,通过UART指令或IO去切换;
- 缺点:消耗芯片的 RAM和ROM,和应用程序耦合,需要用到UART或IO资源。
- 优点:只需要烧录1次。
- 应用程序和测试程序***分开***,测试的时候烧录测试代码。测试完后,烧录正式的应用程序。
- 缺点:芯片需要烧录多次,速度慢。
- 优点:不会消耗芯片RAM和ROM,不会和应用程序耦合,不需要占用UART或IO资源。
- 应用程序和测试程序***分开***,测试代码烧录到RAM区域,测试完后,再烧录正式的应用程序。因为测试代码写到Flash区域,速度比较慢。
-
缺点:芯片需要烧录多次。
-
优点:不会消耗芯片RAM和ROM,不会和应用程序耦合,不需要占用UART或IO资源。另外因为测试代码写到RAM区域,速度比较快。
二.实现
这篇文章我们来谈谈如何程序如何从RAM启动。我们都知道Nordic的芯片程序都是从0x00000000开始的。要想程序从RAM起始地址0x20000000启动,我们只需要做三步就可以实现了。这里以NRF52832为例。
- a)编译代码,使代码和变量保存到RAM区域。使用keil编译时,把ROM和RAM地址配置成芯片的RAM区域。
- b)把hex文件转成bin文件。
fromelf.exe --bin -o ./_build/nrf52832_xxaa.bin ./_build/nrf52832_xxaa.axf
- c)最后,也是最重要的一部分。我们需要把bin文件写到RAM区域,并运行起来。这里可以利用JLink脚本来实现这一点。
sleep 1
si 1
speed 4000
sleep 1
r
w4 4001e504 2
w4 4001e50c 1
w4 4001e514 1
sleep 30
r
sleep 2
loadbin nrf52832_xxaa.bin 0x20000000
sleep 2
verifybin nrf52832_xxaa.bin 0x20000000
sleep 2
setpc 0x20000000
sleep 2
g
q
所有资料在
提取码:gvru
运行demo:
双击test_script_nrf52832.bat
欢迎关注个人公众号“低功耗蓝牙研究及推广”,关注最新技术动态。