Thoughts on development tools

Hi guys,
I'd be interested in hearing some opinion and/or discussion around development tools and UX. As we all know, creating BLE applications with any tool, is not especially easy. Not talking about learning platforms like the micro:bit. But for "real" development platforms in general.

This was one thing that I discovered when starting with Nordic: In spite of the ingenious design of SoftDevices and the SDK, the toolchain of the nRF products may not be the easiest to get your head around. There is no single download-to-rule-them-all or wizard-based code generators. There are overview tutorials and code examples to start with, where you usually choose an example that fits one of the peripherals you want to work with. But the moment you need to integrate more perihperals, as is most often the case with BLE applications, the next step may be a bit obscure. And fiddly.

Having worked a fair bit with the Atmel AVR, the difference was very tangible. Atmel had AVR studio, which was an integrated development and debugging platform. It included gcc and connected and updated external hardware tools automatically. Then Atmel Studio, also including the choice of which modules to include in your project and do some initialization housework at the click(s) of a button(s). There was also, the Imagecraft and CodeVision compilers/IDEs which had a setup wizard included; allowing you to setup peripherals like timers, GPIO and ADC without writing code.

The AVR range is of course not directly comparable to the nRF products in terms of features and performance.
But what do you think - are there similar approaches that would benefit the nRF products?
Maybe you think the tools are just fine, but agree that some more integrated tutorials and examples could be useful?
What are your most appreciated features of a development toolchain?

Cheers and thanks;
Eivind :-)

Top Replies

  • It is no secret that the nRF SDK toolchain has been confusing a lot of people, with build errors, environment set-up errors and missing tools. I had to help someone the other week as the tutorials he read and getting started assistant didn't tell him to install nrfjprog. Without it, he was getting the 'File not found" error. It's safe to say that process of setting up the toolchains and development tools could be a little bit easier for new users.

    A single unified method of installing everything in one go would be a welcome feature for new user's looking to adopt the nRF SDK, as it's hard to be enthusiatic about a platform that you had to spend several days setting up as something went wrong.

    I will say that Nordic have definitely tried hard to make the new SDK easier to set-up over the past year. When I got one of the early access nRF9160 DKs, getting everything set up and working was a lot more confusing than it is now and this was using a laptop that was already set-up to build for nRF52s. The addition of the SDK tutorials and Getting Started Assistant make the process much simpler.

    I have never used AVR as I personally only left University and started working 2 years ago so my only experience is with the nRF5x and nRF91 series. Would I be wrong in saying that SEGGER Embedded Studio is a similar IDE to Atmel Studio? It sounds somewhat similar from your description and can even set-up peripherals as well.

    Tutorials are always appreciated, so more tutorials that explore the set-up of the SDK, toolchain and basic introduction to the Zephyr Platform is definitely something that Nordic should work on in the background. I don't believe there is a such thing as too many tutorials and I appreciate that Zephyr has it's own list of example programs and documentation to demonstrate features on a generic level. I'm sure there is a way to flatten all issues on this forum into a list and develop tutorials around those most common issues or questions; maybe even just a simple FAQ for toolchain set-up.

  • I have not negligible experience programming MCUs, but Nordic has been my first swing at a real wireless protocol environment.  It has not been friendly, but I can imagine worse.  If I had a magic wand I would want maybe two things:

    1. A code generating tool.  I am thinking along the lines of STM CubeMX.  CubeMX is a tool that I have bad-mouthed in the past, but it is a great way for novices to generate working examples fitting the general outline of what they need.  The peripherals like SPI, Timers, etc. should be standard code anyway.  And even with BLE/NFC/etc. since we have a handy way to represent them graphically (service block nested around characteristic blocks with certain attributes and such) it would make sense to have a tool where you fill in the blanks and valid code comes out.  Doesn't mean the code is optimal, but if it works then that would be great.  This also does away with the ubiquitous "just look at the XXX example code" that Nordic employees seems to sprinkle on peoples questions here.
    2. Much better documentation around the preferred API... or even a preferred API.  I am trying to build a simple tool - SPI gets data from sensor, sends over BLE - using NRFX drivers and it is rough going.  Even when you ask for advice, people just say to use the legacy drivers (even though the documentation explicitly recommends otherwise).  Each task should be the same steps every time even if the config/options are different, so why is it so difficult to find clear documentation telling you what goes where, exactly what the sdk_config fields should be, etc.

    Other than that, it would be cool if they were a little more transparent - I'm trying to use SDK 17.x... why is this different from SDK 15.3.x?  What are they trying to accomplish moving on to the newer version numbers?  Maybe this is documented somewhere, but I haven't found it.  As it is, I have been referencing pages in the infocenter that "Are not found in the bookmarks" - why such obscurity?

  • Have you looked at the new nRF Connect SDK - that's supposed to be the way forward, and to address some of the deficiencies of the old SDK approach ... ?

    I'm trying to use SDK 17.x... why is this different from SDK 15.3.x?

    But that's the same for any & every piece of software - they are always growing & developing.

    You can see what's changed in the Release Notes.

  • Have a look at these blog pages.

    Since you are already familiar with eclipse. See this page for working with eclipse GCC on nRF51 & nRF52

  • Hi ,

    you can take a look at this tool for code generation:
    It currently supports GPIO, GPIOTE, PWM, UART, SPI & TWIM with Segger Embedded Studio project file generation. More peripherals and boards to be supported soon. Please do share you feedback if you try it out.