Murata CMWX1ZZABZ chip is actually famous for being a powerful LoRaWan multi zone module also able to communicate over Sigfox.
I’ve already published a technical post on Murata CMWX1ZZAB chip in a previous post. You will also find an implementation based on my IoT SDK. Yadom has just released a breakout board ( BRKABZ01) for this chip making it accessible for hackers and for easier prototyping.
This post is going to review this board and demo how to access it really quickly. Are you ready ?
Yadom BRKABZ01 (60€) is a breakout board for the Murata CMWX1ZZABZ (what a terrible name) device. It has been made to help you to design compact prototype based on the Murata module.
In the Murata familly, I would like to have the mother board! As you can see on the above picture the BRKABZ01 board is really smaller than the ST development kit allowing to use it embedded in a prototype more easily. Compare to the use of chip itself the BRKABZ01 will accelerate your design as a such module can’t be used on a break board. It can’t also be manually soldered with net. It means you need to make you custom PCB for using it. This solution takes 2-3 weeks with a risk of rework. For this reason it’s good to start with a break board for quickly getting started.
The other option not shown here is to start your design based on the MKRWAN1300 Arduino board I’ve been reviewed in a previous post. This solution is also compact (and a bit less expensive). The difference is Arduino board uses a modem version of the Murata module and you own software will run on the Arduino SAMD MCU instead of being executed directly on the Murata chip. That’s an easiest way for maker wanted to create a single IoT object based on this technical solution. If you want to design a final and industrial object based on the Murata module (and its powerful STM32 MCU included) the break board is the best solution.
The break board let you use the module directly. It also means you need to use the MCU programming software instead of an Arduino really accessible environment. You can use stm32duino solution as an intermediate way for programming. That said it’s not the one I prefer, particularly when your target is a final product. So the best way will be to use the STM development tools and SDK approach.
To save time, making this more accessible and to go beyond the devkit approach, I have created an IoT SDK supporting different platform. The Murata module is one of them. The next parts of this post will show you how to quickly getting started with this module and board using the Disk91 IoT SDK and the STM32 tools.
You need to have some software installed in your machine to compile compatible code to this break board.
- ST Micro-electronics CubeMX: this is a MCU configurator and code generator for the ST products. If you directly my github example code you will not need it. For going further it’s good to have it installed. The software works on Windows, Linux and MacOsX.
- System Workbench for STM32 (AC6) development IDE and compilation chain. This software is based on Eclipse IDE and GCC compiler. You can use it on Windows and Linux and MacOsX. The IDE includes OpenOCD for flashing device and debugging.
Configure the Murata module with CubeMx
This configuration has already been executed in the example provided in the next chapter so you can directly jump to this part. You can watch the video is you want to get the details of the configuration on CubeMx for the Murata CMWX1ZZABZ module. The configuration time is about 5 minutes.
Erratum: The BRKABZ01 breakout board is using PB2 pin instead of the usual PA12 pin to pilot TXCO_VCC. You need to change that pin in CubeMX. The PB2 must be set as OUTPUT when PA12 need to be move back as analog. I’ve discovered this point after making the video so it’s not part of it.Important notice.
Integrate and configure IT-SDK to the Cube MX project
As indicated previously, if you directly use the later provided example code you do not need to execute this step and you can jump to the next chapter. This step is explaining how to integrate Disk91 IoT SDK in a fresh new Cube-MX project.
Disk91 IoT SDK is an open source SDK made for IoT projects with all the basic features you need to quickly start. It integrate the LoRaWan stack, Sigfox Stack and all what you need to enter configuration, store it “securely”… So basically it saves hundreds of hours to code all that stuff.
The first following part explains how to setup the Disk91 IoT SDK with a CubeMX generated project by importing the SDK files into the project.
The second step is to link the Disk91 IoT SDK code into the project code. This allows to modify the CubeMX configuration as many time as you need without impacting your higher level code. This also allows to port you code on different platform with a reduced impact.
In this step we are also going to configure the Disk91 IoT SDK to activate the features you need. This is done by editing 1 to 4 configuration template files you are importing from the SDK. These files configure the low power mode as the connection keys secure storage, the logging and the interactive console used for tracking errors or dynamically changing the configuration.
Create your custom application on Murata module
So you need to take about 15 minutes for making the previous configuration and you are now ready for creating your custom application with all the low-level and radio protocol stack configured.
You may need to take a look to the Yadom BRKABZ01 schematics to configure the LED (on PH1-OSCOUT / GPIOH-Pin1) and User Button (Boot 0). On the last page of the document you will also see the location of pin1 for the programming cable.
I’ve setup a sample code running on the Breakout board and shared it on Github. Following this link you will find a demo code for Murata CMWX1ZZABZ-091 running on the Yadom BRKABZ01 breakout. The README.md file is explaining how to compile it.
You can watch a video of the firmware execution in the following video.
Upload your firmware with the DFU mode
The STM32 Cube Prog software allows to upload a firmware directly from the USB port without the need of a ST-Link programmer. It’s really cool the BRKABZ01 is having this feature.
To program the breakout this way, you need to click on the BOOT0 button while connecting the board to an USB cable. You need to maintain the BOOT0 button click until the device starts. An ST… BOOTLOADER device will appear. Once done you will be able to connect to it with the STM32 Cube Prog software and upload the firmware. The only issue is the following one: ST Software are as usual worst than bad and the stability will be a challenge. I’ve never been able to make it running under Windows. I’ve been able to make it working on MacOs X. When trying to disconnect after programming the program never respond ; some other time the disconnection has been automatically done. The device have been correctly programmed that’s the goal. So the hardware part is excellent, the software part will be your nightmare.
That way you will not have to package the firmware specifically for DFU (compared to the method used for this other ST tool). This point is really positive and makes the DFU option really efficient.
The provided example code is switching to low-power mode on regular basis. The default wake-up time is set to 500ms. To stay in Low power mode the UART2 needs to be connected, otherwise, floating the device will immediately waking up (just to let you know). The following graph show you the power consumption:
You can see higher and lower 1s periods corresponding to the led blinking. When the led is off you reach the minimal power consumption. We have a 65uA @ 3,7V on the LiPo connector.
This consumption can be reduced a bit by disabling the UART2 at the price of loosing the console. If you find some power improvement, let me know I would really like to reach the minimum power consumption indicating in the Murata documentation, even if in my point of view it is just a theory.
Hi, nice project! what tool do you use to measure consumption? Thanks
I’m using OTII tool and software
Hello. Suppose I bought the cmwx1zzabz-078 lora module and designed my own pcb like you. How can I pull the DevEUI from the module or is there DevEUI embedded in it?
DevEUI is provided by your LoRaWan operator usually.
Hi, how you soldered the cmwx1zzabz module?Your information is important to me.Thank you
You need a solder mask to correctly place the solder paste. Then I’m using a classical oven (dedicated for this)
I applied high heat at the soldering stage and it burned.I didn’t use a solder mask.I soldered the pads a little and applied hot air from the bottom of the pcb.I made a big mistake.
for sure it’s more complicated with such tools. The soldering mask is really important for such components