Nordic nRF7002-DK Review

Table of contents

RoadTest: Sign Up to Review the Nordic Wi-Fi 6 IC Dev Kit nRF7002 DK with WI-Fi 6 Router

Author: vmate

Creation date:

Evaluation Type: Development Boards & Tools

Did you receive all parts the manufacturer stated would be included in the package?: True

What other parts do you consider comparable to this product?: Espressif ESP32-C6, u-blox MAYA/IRIS, Infineon AIROC CYW5557x series

What were the biggest problems encountered?: Lack of documentation and getting started guide

Detailed Review:

Unboxing and initial impressions

nRF7002-DK boxBox contents

The box includes the nRF Development kit itself, an NFC antenna, and a piece of paper with the link to the Getting Started guide.

The DevKit itselfBack of devkit

The board is quite nice, has plenty of debug headers, places to measure nRF current and RF stuff, and two buttons plus two LEDs connected to GPIO.

There are actually two nRF5340 MCUs on the board, along with the nRF7002.

The Getting Started guide is, well, not really existent. The page linked is the “overview” page, with a link to the product brief. There is basically no useful info, other than the specifications.

There is a big “Documentation” button, but it’s just about the SDK and software related options. The only information in the “Hardware” section is about the onboard oscillators, and which pins the onboard buttons and LEDs are connected to. I couldn’t find anything about the second USB port, built in debugger, which MCU the NFC antenna is connected to, and similar, basic details about the board.

The back of the PCB had more information on it than the entire guide pointed to by the piece of paper in the box, although, in itself, it’s a bit cryptic, and not too useful without having first read some documentation about the board – which doesn’t seem to exist.

I did end up finding the schematic and board layout later, which clarified some details, but having to look at schematics to be able to tell very basic information about a development kit is not exactly great.

EDIT: After nearly finishing my testing, I found the documentation for the board, completely by accident. It’s not linked to on the nRF7002 “Getting Started” page, or anywhere else, and stumbled upon it by clicking around on completely unrelated parts of Nordic’s website. I am not going to redo this part of the review at this stage though, but I’ll include some more information:

Most of my questions are answered by the well-hidden documentation, the MCU on the left is used as a J-Link debugger/programmer only, and the MCU on the right is the “actual” nRF5340. The top USB port connects to the native USB interface of that, user-programmable MCU.

Development kit hardware block diagram

EDIT 2: I found a PDF, that is *almost* like a getting started guide, however, only for the hardware side of things:
I stumbled upon this by searching google related to the nRF7002 itself, and I still cannot find any references to this PDF on any of Nordic’s nRF7002-DK pages.

Linking to these two documents would have saved HOURS of time trying to figure out basic information.

Installing the Nordic SDK

First, I downloaded the nRF Connect for Desktop program, and installed the following:

  • Bluetooth Low Energy
  • Programmer
  • RSSI Viewer
  • Serial Terminal
  • Toolchain Manager

nRF Connect for Desktop Application

I am not sure which ones I’ll need, so I just installed everything that seems useful. It would be nice to have a simple and comprehensive guide to getting everything set up, for someone who has never used any Nordic products.

When Toolchain Manager was ready, I opened it to install the nRF Connect SDK

Toolchain Manager

After the SDK finished installing, I tried to click “Open VS Code”, and got a popup about missing VSCode extensions.

Missing VSCode extensions

Then I got an error message about not having the nRF Command Line Tools installed

Missing command line tools error

After installing the command line tools, everything was ready to start using VSCode.

First VSCode start

There’s a new side menu on the left for the nRF SDK, and a “Welcome to nRF Connect” page shows up with Quick Setup.

The installed SDK and Connect Toolchain is recognized automatically, so nothing else to do.


In conclusion, I did not really like the installation experience. I had to install an installer, to install an installer, to install the SDK, which then told me to just go to Nordic’s website and install the command line tools manually. What was the point of the installers then? It would be nicer to have a single installer, where everything is available in a single list, or maybe even a wizard to help figure out what I need.

For the “Install VS Code extensions” popup in Toolchain Manager, it would be better to have it inside VSCode, for example on the “Quick Setup” page that opens automatically.

Showing a guide for installing the SDK on the “Quick Setup” page might be useful for someone who installed the VSCode extension first, but if the SDK and Toolchain is already detected, it is completely unnecessary, and might even be confusing for a second (I initially thought that it couldn't find the SDK, hence the instructions for installing it).

The “First Steps” button in Toolchain Manager shows up after the toolchain is installed. The page it opens also has a guide about installing the SDK. Why wasn’t this shown before?

On the positive side, UIs are very nice, and the automatic installations did go through quickly and without any issues, other than having to install the command line tools manually from Nordic’s website.

Creating an application

Creating a new application

Finally there was proper documentation for this part, and no issues were encountered. I like the option to choose an “Application template”, instead of always basing new projects on a blank program or Hello World, like in most other IDEs/SDKs. The default choice here was “Hello World”, but I opted for “Blinky PWM”.

After creating the application, there’s still some things to set up. Going into “Add build configuration”, we can set the board.

Add build configuration

There are several options for the nRF7002-DK

nRF7002-DK board targets

A small warning explains what the “_ns” suffix means:

Security extension warning

I assume the “nrf7001” boards are a backwards compatibility option.
“cpunet” and “cpuapp” are mentioned in the documentation, although not much is explained:

Explanation of cpunet vs cpucore

It would’ve been nice to write a bit about what these mean, or at least link to the relevant sections of documentation. Searching around for a few minutes, I found this:

Application core description

Network core description

After saving the build configuration, I was able to successfully build the project.

There is a really nice “Memory Report” option in the bottom left, that shows both RAM and ROM utilization, and can jump to the relevant code by clicking on the chart.

Memory Report

Uploading to the board

I plugged in the board to upload the firmware. Initially, everything went well, but then it was stuck on “Check image validity – block 1 of 2”. After waiting for over 15 minutes, I unplugged the board, but there was no way to cancel the “Check image validity” process, so I had to restart VSCode.

Even after closing VSCode, a J-Link process was using 100% of all 24 threads available, making my computer barely usable.

 J-Link process maxing out CPU

After stopping it, I could no longer upload to the board, saying that no devices were found.


I had to go into the extension settings, and change “Device Provider” to “nrfjprog” to fix the problem.


Finally, I had the code uploaded to the board.

Checking out the PWM Blinky example code

I went to take a look at main.c, and well, it took me a while to understand what’s happening. As a basic example, for showing beginners how to do simple things, it’s bad. It’s cryptic, has almost no comments, and the whole thing looks like a mess.

Blinky PWM main.c

I managed to find some documentation about this example, which at least clarified what it is trying to do.

Documentation of PWM Blinky

Having to google for documentation on a very basic example is not good, especially when all of this could’ve been ~10 lines of comments in the code.

The whole point of these simple example projects would be to quickly get someone new to Nordic/Zephyr up to speed on the basics. This is completely incapable of such in its current form.

Trying out WiFi

The documentation for this isn’t great either, or maybe I just couldn’t find it.

I decided to try out the “wifi/sta” sample code.

There’s some minimal docs about this sample, mostly about the configuration options, but nothing about how it works. I’d love to see something that explains the code a bit more, or at least links to some documentation about the WiFi library.

The VSCode syntax highlighting is misconfigured, upon opening main.c I got several red squiggly lines.

Squiggly red errors in VSCode

Uploading this example took an absurdly long amount of time, close to 10 minutes. Not sure what happened, but it doesn’t seem normal.

After the upload finished, I encountered the next problem.
There are a bunch of  “LOG_INF” calls in the code that I want to see the output of. The documentation says absolutely nothing about it, so I assumed it prints to a serial port. Which one though? There’s a native USB port on the nRF5340, so it could be over that, or there’s some hardware UART? Upon closer inspection, the J-Link USB interface also exposes two serial ports. By trying both of them at different baud rates, I found that the second port at 115200 baud is what I needed.

Serial output of wifi/sta example code

Success, the nRF7002 is now connected to a WiFi6 AP.

To do so, I had to configure the SSID, password, and other information in prj.conf, but that seems a bit weird. What if I want to dynamically choose the SSID/password based on user input from, for example, a touchscreen?

Searching around for a bit, I might have found the solution:

WiFi credentials method documentation

I’m not sure why the examples aren’t using this, instead opting for hard-coding the credentials in the firmware, through the prj.conf file.

Making some requests

Next, I wanted to send some GET/POST requests, and print the response to serial. I found some documentation about the rest_client library, which seems like what's needed. However, there are no examples.

I tried to include the library, and failed. The documentation states that the header file is “include/net/rest_client.h”. There is no such file. So I went looking around.

File structure of the SDK

Under the nRF Connect SDK “folder”, there’s nothing like that. I couldn’t even find all the libraries that the sample code uses. Apparently there should be a “net” folder in “zephyr”, but it’s not there.

Attempt 2:

I used Ctrl + left click in VSCode to take me to the included files. This brought me to the following:

Path of one of the headers used in an example

I was hopeful that I’m going to find “rest_client.h” here, but no success.

I even searched my entire computer for a rest_client.h, with no luck

Conclusion

Overall, I’m disappointed with Nordic. The hardware is very nice in pretty much every regard: The nRF5340 is a great MCU with plenty of resources and features. So is the nRF7002. The development kit itself is fine as well, it includes many interfacing and debug options.

The obvious issue is documentation. Although some documentation that I was missing does indeed exist, but it’s pretty much hidden from the user. The two most useful documents were only found at the very end of my testing:
https://infocenter.nordicsemi.com/topic/ug_nrf7002_dk/UG/nrf7002_DK/intro.html?cp=3_0_2
https://infocenter.nordicsemi.com/pdf/nRF7002_DK_User_Guide_v0.7.2.pdf

These aren’t shown ANYWHERE that I could see on Nordic’s website, both were found from completely unrelated google searches.

The SDK docs were somewhat better. There are plenty of examples, but they aren’t that great, and have minimal amounts of explanation about what’s happening.

The rest_client documentation, for example, would have been adequate, but I couldn’t even figure out how to include it. The specified header file doesn’t exist, not rest_client.h anywhere on my system.

These docs might be sufficient for someone who already has some experience with Nordic, but for someone new to the SDK, it is not a pleasant experience.

A proper “Getting Started” guide, both for the hardware itself, and for the SDK, would be good to have, covering things like installing the SDK, creating a Hello World project, explaining in detail what happens and why. Show how the toolchain works, what debug options exist. Make a few very well documented example projects. Blink and PWM a LED, do some I2C and SPI communication, show what kind of power management and clock control features the SDK/SoC has. Have some simple Bluetooth and WiFi examples, like making a single key keyboard with the onboard buttons that works over Bluetooth, and send a few GET/POST requests to an example API.

I originally intended to review more things in this RoadTest, including comparisons with non-WiFi6 MCUs, but I only received the DevKit slightly over one week before the deadline, due to some import mishaps from the courier service, and figuring out the basics without any proper documentation also took several times longer than I expected, not leaving enough time to test everything I originally wanted. Still, I think I managed to highlight the most important issue – the lack of accessible documentation – in sufficient detail.

Rating

Product Performed to Expectations: 5/5

 - The board itself does have the expected resources and features

Specifications were sufficient to design with: 5/5

- Both the nRF5340 and nRF7002 have sufficient features



Demo Software was of good quality: 2.5/5

 - The example code included with the SDK had minimal documentation or explanations as to what it happening

Product was easy to use: 3.5/5

 - The hardware itself is nice and easy to perform measurements and tests on, but the lack of documentation (that later turned out to exist in some capacity, at least for the hardware itself, but is essentially hidden from the user) lowers this rating significantly.

Support materials were available: 2/5

 - There is a small amount of support material available, that is not sufficient for a first time Nordic user to properly figure out how to use all the features of this product.

The price to performance ratio was good: 5/5

 - The development board is priced competitively considering the hardware present.

Anonymous
Parents
  • A nice review.

    I assume the “nrf7001” boards are a backwards compatibility option.

    Nordic also make a nRF7001 which is like the nRF7002 but only supports 2.4GHz. Rather than creating a separate nRF7001 DK, you can use this board but ensure that the nRF7002 behaves like an nRF7001 - i.e. disable 5GHz.

Comment
  • A nice review.

    I assume the “nrf7001” boards are a backwards compatibility option.

    Nordic also make a nRF7001 which is like the nRF7002 but only supports 2.4GHz. Rather than creating a separate nRF7001 DK, you can use this board but ensure that the nRF7002 behaves like an nRF7001 - i.e. disable 5GHz.

Children