Back in March 2017, NXP had rolled the MCUXpresso IDE starting with Version 10.0.0. With the intent to unify the SDK, LPCXpresso, CodeWarrior, Kinetis Design Studio and Processor Expert into one unified and integrated set of tools. V10.0.0 was a good start. The MCUXpresso IDE V10.0.2 in July was more of a smaller update, and the Pin and Clock configuration tools were not integrated, no added tool for peripheral configuration.
A week ago the MCUXpresso V10.1.0 has been released which shows where the journey is going: an free-of-charge and code size unlimited Eclipse based integrated set of tools to configure, build and debug Cortex-M (Kinetis, LPC and i.MX RT) microcontroller/processor based applications.
I have used it for a week, and although many things are still new, I thought I’m able to give an overview about what is new.
I have used the MCUXpresso IDE this year in several projects and migrated successfully lecture class material to the new environment: it is free-of-charge, code size unlimited, based on the industry standard Eclipse IDE and GNU tools for ARM Cortex-M. The IDE and debug tools have been a step forward from the ‘legacy’ IDEs. The gap compared with the ‘old’ days using Processor Expert was that using the SDK requires a in-depth knowledge of the device. There are tools to configure pin muxing and (core only) clock configuration, but because are separate tools outside of Eclipse, they did not help much with the development flow. And the configuration tools stopped at the clock boundary to the peripherals, so still a lot of learning and coding had to be done on that level.
Now with the advent of the MCUXpresso IDE v10.1.0 release, things are moving into an easier and better development flow:
- The MCUXpresso Configuration tools are now integrated into the Eclipse IDE and work directly on the projects. I can stay inside Eclipse and do muxing, clocking and peripheral configuration along with building and debugging.
- It includes the ‘Peripherals’ tools which closes a gap in the ‘post-Processor Expert’ era.
- Better handling and extension of the MCUXpresso SDK: The SDK is the central software and driver delivery method, and the wizard in the IDE can now add/remove drivers or middleware from a project.
- Additional device support, including for the new RT family
- Bug fixes and many smaller features and improvements added, including extended documentation set
The IDE (Eclipse 4.6/Neon) setup is available from http://www.nxp.com/mcuxpresso/ide/download. I can keep the earlier version installed, as the new version can be installed side-by-side. The IDE build version is 589:
Obviously the integration with the MCUXpresso Configuration Tools (Pins, Clocks and the *new* Peripherals) tools is the big thing in that 10.1 release (more about this later).
Still, there are many smaller things which make working with the IDE an even better experience. I suggest you consult the release notes/documentation, but below are the things worthwhile to mention from my view:
Eclipse Marketplace Client
The IDE now integrates the Eclipse Marketplace plugin, so there is no extra step any more needed to install it (see “MCUXpresso IDE: Adding the Eclipse Marketplace Client“). With the marketplace client, thousands of plugins are just a few clicks away.
Now I can install e.g. doxygen/eclox for classroom environment from the marketplace client. In addition to the marketplace client added, XML, XPath and XSL editor and tools are now included.
Managed Linker Scripts
The managed linker scripts now generates _HeapSize, _StackSize, _image_start, _image_end and _image_size symbols, that way there is no need to manually add them (see “Tutorial: Porting BLE+NRF Kinetis Design Studio Project to MCUXpresso IDE“). This makes especially porting legacy projects which depend on these symbols easier.
The Binary Utilities menu has now a ‘ELF Information‘ menu item.
I can inspect any ELF/Dwarf files and it gives me information about which can be quite useful for ‘unknown’ binary files. The menu is using the GNU ‘readelf’ utility. Maybe not a ‘killer’ feature, but still useful.
Debug Probe Discovery
The MCUXpresso IDE nicely handles debug probe discovery (see my earlier article, debug probe setup in ‘normal’ Eclipse usually is huge pain). To trigger a new probe discovery in the V10.0 version of the IDE, I have used the trick to delete the existing launch (*.launch) configuration files. The new V10.1 version features a nicer way to do this: Holding the SHIFT key when clicking on ‘Debug’ in the Quickstart panel will force a new probe discovery:
The Peripherals+ Viewer shows the peripheral register details as renderings in the Memory view. Previously I faced sometimes issues if a peripheral was not clocked because it was not possible accessing the memory: now this seems works nicely in V10.1:
I have avoided semihosting in the past as much as possible, as it causes far too many problems. One thing is usually that it will block the target if there is no active debug session which is really a bad thing. The updated SDK now includes hard fault handlers so the target can continue running if no debug session is present. In the project wizard, I can choose if I want to use the UART or semihosting:
More options are ini the advanced project settings:
I still prefer real UART or USB CDC, but that changes makes semihosting less nasty. But still: I don’t like printf() :-).
GNU Tool Chain
The GNU toolchain for ARM has been updated to version 6 update 2. For all the C++ lovers this includes the latest C++ dialects:
The new compiler did not create any problems with the pilot projects I have tested so far. I observed some code size reduction which is a good thing, but I’m not using the highest optimization levels anyway.
i.MX RT Support
Another exciting thing is that the MCUXpresso IDE supports the i.MX RT. The NXP i.MX RT is a ‘crossover’ processor which can cross the gap between a microcontroller system (say ARM Cortex-M4F running at 180 MHz) and an Embedded Linux System. I have ordered the RT1050-EVK board (ARM Cortex-M7 running at 600 MHz with 512 KB SRAM 🙂 ) to see how well this will fit a new advanced embedded computing course. Once I have that board and the time to use it, I plan to report back.
A bigger part of the changes are the things around the MCUXpresso SDK. NXP delivers all their software and drivers in the form of SDK packages (zip files with all the files plus an XML file with manifest information which is consumed by the IDE). With the release of the new IDE, the MCUXpresso SDK on https://mcuxpresso.nxp.com has been updated too. The SDK dashboard informs about the updates available.
The web site is accessible within the IDE too. After downloading the SDK packages, I can drag&drop them into the ‘Installed SDK’ view (same workflow as in 10.0). While it is recommended to upgrade to the latest and greatest SDK version, it nicely works with the older version too, so I’m not forced to do an upgrade.
The view shows the installed SDK and manifest version, together with different icons so I can easily see what SDK version is used.
So the new IDE 10.1 supports the new 2.3.0 SDK versions, and I still can continue using the IDE 10.0 with the earlier SDK versions in parallel, because the SDK default folder mechanism supports different versions too.
💡 I have a few critical research projects running with the SDK 2.3.0 and the MCUXpresso IDE V10.1, and I have used both the new SDK and IDE in parallel without any issues.
From the installed SDK’s I can create new projects or import example projects.
If using the 2.3.0 SDK, I can now add/remove middleware components:
What is really cool is that I can add/remove components after I have created the project. For this I can use the context menu on the project or the ‘Manage SDK components’ button:
It shows a dialog in which I can change my settings:
💡 Of course if I have used a middleware or driver in my project, it won’t affect my user code, it will add/remove the SDK drivers and components. Removing a middleware afterwards might still need some tweaking and worked fine for me.
The MCUXpresso Configuration tools and SDK are replacing Processor Expert (see “NXP MCUXpresso Software and Tools with Clocks Tool“). So far the ‘Pins’ and ‘Clocks’ were available as ‘standalone’ tools, and using the tools with Eclipse was cumbersome and complicated. Now things are much easier and simpler.
There is now the new ‘Peripherals’ tool, and all of them are integrated into the MCUXpresso Eclipse IDE. They are available with multiple views under the usual menu Window > Show Views:
The Project Explorer View has now a new button for the configuration tools. I can click on the button or on the small triangle to select a dedicated tool:
This opens a custom perspective e.g. with the Pins tool. The Pins tool is responsible to manage the pin mapping and muxing and the electrical characteristics:
The cool thing is that the tool is able to extract the configuration data stored in the source files and places a .mex file into the project:
The information is stored in a special format inside the source files:
So if the project has been managed with the configuration tools as the SDK examples and projects, the tools are able to extract and keep up that information. With ‘Update Project Code’ the source files get updated:
The same way I can change and update the clocking of my device. The Clocks tool in the MCUXpresso suite of tools is responsible for the core and bus clocking:
The Clock tool has a cool graphical interactive and clickable clock tree view (see above). Configures the clocks of the core up to where the clocks are routed to the peripherals, but not the clock settings *inside* the peripherals, e.g. the generated baud rate of the UART.
This is the job of the a new member in suite of MCUXpresso Configuration tools: the Peripheral tool:
With this the Peripheral tool closes a gap left after the discontinuation of Processor Expert. While the three tools can be used independently, they do a cross checking. As shown in the above screenshot, the Peripheral tool informs me that I using the UART1 but have not muxed it yet in the Pins tool. In Processor Expert all this was very tightly coupled, and as a result this slowed down Processor Expert especially for larger projects. Keeping things separate might sound like a backward step, but to me it makes sense: that way things can be managed and worked on separately too. Additionally this will enables using the tools with multiple users in a version control system, something which is not possible in Processor Expert.
I’m missing a few peripherals like RTC or DMA in the Peripherals tool, but compared to ‘bare’ SDK coding the Peripheral tool is a huge step forward. And the MCUXpresso IDE Eclipse integration of the configuration tools was something I have missed from the beginning, and now things are coming together :-).
The MCUXpresso IDE v10.1 comes with a lot of smaller extensions and features making it even more useful as before. What is a huge step forward is the MCUXpresso Configuration Tools integration: no need to step outside of Eclipse to change pin assignments or changing the clocks. With the Peripheral tools finally I have a tool to configure the SDK instead digesting all the SDK header files. I’m using the tools now for two pilot projects (a robotic and a communication application), and getting more and more familiar with the workflow. If there is any interest, I could come up with a series of tutorials. If you cannot wait: the included documentation for the IDE/Config tools is pretty decent and a good starting point too ;-).
Happy MCUXpressing 🙂
- Download link: http://www.nxp.com/mcuxpresso/ide/download
- MCUXpresso IDE V10.1.0 available: https://community.nxp.com/community/mcuxpresso/mcuxpresso-ide/blog/2017/11/16/mcuxpresso-ide-v1010-now-available
- MCUXpresso IDE V10.0.0: https://mcuoneclipse.com/2017/03/28/mcuxpresso-ide-unified-eclipse-ide-for-nxps-arm-cortex-m-microcontrollers/
- MCUXpresso IDE V10.0.2 update: https://mcuoneclipse.com/2017/07/15/mcuxpresso-ide-v10-0-2-updated-eclipse-based-ide-for-lpc-and-kinetis/
💡 PS: In “MCUXpresso IDE: Installing Processor Expert into Eclipse Neon” I described an approach to install Processor Expert into Neon (or Oxygen). That approach worked in 10.0 (although not supported), but *not* in 10.1 because of a plugin conflict.