NCS初探--基于nRF5340的双核测试

接上一章:NCS初探--基于nrf5340的blinky

本次测试,网络核跑 radio_test ,应用核跑 empty_app_core。这个empty_app_core的项目就是为了那些只在网络核上跑的demo设计的,因为单独一个网络核是跑不起来的,必须要在应用核中使能网络核才可以!这个空的工程使能网络核后就关闭了ram和时钟。

需注意:

1. 使用IDE SES下载有时会遇到问题,推荐使用west下载!

2. 如果要debug其中一个核的代码,最好放在最后下载。

radio_test

1.使用SES

首先使用SES装载项目,目的是ses在装载项目时,会先build一遍,我们后面只要下载代码就可以了。项目地址如图:

 然后选择板子型号:

注意,radio_test 只能构建在网络核上,如果你选择的是应用核,会构建失败!

注意,选择nrf5340dk而不是pdk!

项目装载好后,打开NCS内置cmd,路径在NCS/toolchain/git-cmd.cmd 。不能使用默认cmd,因为内置的cmd有配置必要的环境变量!

在cmd中使用 cd 命令定位到项目文件夹下,比如我的路径是:

E:\NCS\v1.5.1\nrf\samples\peripheral\radio_test\build_nrf5340dk_nrf5340_cpunet

这个文件夹就是项目装载成功后SES自动根据脚本创建的。

使用指令 【west flash --recover】,会自动重新编译一遍然后下载。

参数 【--recover】 不是必须的,但是在首次下载建议直接使用,或者推荐使用 【nrfjprog --eraseall】先把板子里面的代码擦除再烧写,避免因为代码还在跑而引发的各种异常。

2.使用west

首先我们使用NCS内置cmd定位到radio_test这个文件夹,然后使用west构建项目:

west build -b nrf5340dk_nrf5340_cpunet -d build_nrf5340_cpunet -p

-b 后跟板子型号

-d 后跟构建项目的目标目录,不指定则默认为 build

-p 清除目录缓存

使用这个指令后,cd 到你指定的目录里,使用【west flash --recover】烧写网络核代码。

empty_app_core

步骤同上,也是两种方式,一种使用SES装载项目,一种直接用west指令构建项目,装载时选项如下:

使用west构建项目请参照上一节,注意 -b 后跟的板子应该为nrf5340dk_nrf5340_cpuapp。

 注意,使用【west flash】下载时,不要再加参数【--recover】。

 下载完成后:

测试

如果前两步都没有问题, 则nrf5340dk在电脑上的三个串口应该有一个发送指令会返回,串口配置如下:

根据官方文档,插上开发板后,电脑上显示3个串口,串口号从大到小,最大的串口号是应用核的打印,最小的是网络核打印,中间的默认不输出。但是根据实际使用发现,有时候也可能是中间的串口,所以最好三个都试一下,如果正常,则如:

输入help可以显示所有支持的指令!

TAB键可以自动补全或者提示参数!

比如你要设置数据速率,输入d然后按TAB键:

再输入a再按TAB,补全data_rate,再按TAB,提示可以跟哪些参数:

调试

首先只用一个jlink是无法同时调试两个核的(两个jlink没试过),所以我们分为两种情况:

1.调试网络核

操作步骤:

(1)为了防止下载代码出现异常,我们先用【nrfjprog -e】擦除所有代码。

(2)打开radio_test下载代码并进入debug模式,中间可能会弹出来:

我们直接点Yes就可以,这时候代码已经停在main里:

 而且串口也会打印出来OS已经启动了:

这个时候你可以选择直接运行代码,或者等待app核代码烧录。比如我这里直接运行:

可以看到多了一句打印,但是因为没有app核代码,网络核没有被使能,所以卡在了等待时钟函数里。这个时候点暂停,也可以印证:

这时候我们使用【west flash】下载app核代码:

可以看到下载成功后,网络核代码顺利跑了起来。 

 2.调试应用核

如果你从上一步停止debug,然后打开empty_app_core工程,直接start debugging,你会发现无法debug!代码停在:

 笔者猜测是因为网络核如果在运行了,应用核去重新下载并将代码重新从代码起点开始运行会有问题!

 目前解决办法是,在网络核没有跑起来之前debug应用核代码:

(1)先使用【nrfjprog -e】擦除所有代码

(2)使用【west flash】下载net核代码

(3)在SES里start debugging,中间可能会弹出:

直接点Yes,代码定位在main里:

此时,你用串口会发现,网络核代码已经在跑了,应用核代码还在暂停状态,所以两个内核的代码都是独立运行的!此时你就算一直把应用核代码处在debugging暂停状态,仍然可以使用指令去和串口交互。

3.不复位调试 

上面两种调试都是基于需要代码从头开始运行的调试,如果你调试时并不需要代码一定要从头开始,那可以使用Attach Debugger,使用它的好处在于不用重新下载和复位代码,不管是应用核还是网络核,直接启动就可以直接调试,不用再考虑两个核先去下载哪个的问题。

当然,启动调试之后,MCU是直接处于运行状态的,除此之外其他都和从头开始运行debug是一样的。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值