So Element14 was nice enough to send me one of these little WaRP7 boards to do a little evaluation prior to the Road Test.
I hadn't heard of the board before, but when I looked into it, I was pretty impressed.
Some of the specs:
NXP i.MX 7Solo applications processor, Cortex-A7 and Cortex-M4 core
NXP PF3001 power management IC and BC3770 battery charger
3.7 v 100 mAh LiPo battery
NXP MPL3115A2MPL3115A2 high precision barometer
NXP FXOS8700 six-axis sensor combining an accelerometer and magnetometer
NXP FXAS21002 three-axis gyroscope
NXP NT3H1101 near-field communication IC
Murata LBEE5KL1DX-TEMP-DS-SD Wi-Fi (802.11/b/g/n) and Bluetooth (4.1 Bluetooth Smart + EDR)
Kingston 08EMCP04-EL3AV100-C50U MCP with 8 GB managed NAND flash and 4 GB LP-DDR3
This thing is tiny, so tiny in fact, I had some issues connecting the battery to the daughter board. But nothing a pair of tweezers and a little patience couldn't resolve.
The above picture shows the kit assembled. With the WaRP7 connected to the daughter board. Yes, that is a AAA battery.
This picture shows the 2 pieces separated.
The Software:
The device came preloaded with Yocto linux distribution. It did not have support for the WiFi module built in so I had to download and reload another version.
The instructions to do so were found in the WaRP7 User Guide found here https://github.com/WaRP7/WaRP7-User-Guide/releases/tag/v1.2 .
I found the instructions to be accurate so I wont list them again.
I also followed the instructions in the manual to download and build my own customized distribution and that was also a success.
The instructions assume a linux (preferably Ubuntu, maybe Debian) host operating system. If you run Windows, perhaps load a Linux distro in a Virtual Box, or in the case of Windows 10, perhaps run an ubuntu Docker image.
Using the board:
I'm not going to write a critique of Yocto, this is my first exposure to it, but it seems that it is a customizable minimalist Linux distro that you can design and build to only include the packages and software that you want.
The Yocto project provides tools and guidance to make this easier than trying to complete this task on your own, and provides tools to make this repeatable. From my exposure it seems like it is a good idea, but learning it to the level
I would have liked to fully customize the distro for this board would have taken too long.
The distribution came with Python, but no Pip, so adding python packages is a chore. There was no C compiler available in the provided distros, so doing native development on the board was out. They did however include the I2CTools such as i2cdetect, i2cdump, i2cget, and i2cset
so it is possible to access the included peripherals through the command line or through shell scripts. There is a unit test package available where they used these methods to show that the peripherals worked. These are available here https://github.com/WaRP7/warp7-unit-test .
There was no ssh or scp contained on the supplied distro, but once I downloaded the unit test package to my host computer, I was able to shut down the WaRP7 and put it in a mode where the system disk appeared as a USB drive on my computer and I was able to copy the unit test package
onto the drive and reboot. Once the system was back up I was able to access the unit test scripts. Bear in mind, none of this is a limitation of the hardware or the Yocto software, it is a limitation of the distro that was chosen and my lack of familiarity with Yocto packaging. The developers of the distro probably had very specific goals in mind for their distro and I'm piggy backing off of what they did for an entirely different purpose, and I have not taken the time yet to learn the Yocto way of getting a distro built to include the tools and utilities that I would like to have available.
Most of the peripherals are connected via I2C and the associated unit tests give examples of how to access them and read data. As an example, the unit test accelerometer_FXOS8700CQ.sh accesses the accelerometer like so:
#!/bin/sh echo 1 > /sys/devices/virtual/misc/FreescaleAccelerometer/enable printf '\n' while [ 1 -eq 1 ] ; do printf 'Test for FXOS8700CQ (3-axis linear accelerometer)\n' printf '\nPlease check the device ID (Should be 0xC7)\n' printf ' Device ID\n' WHO_AM_I="$(i2cget -f -y 3 0x1e 0x0D)" echo " WHO_AM_I: ${WHO_AM_I}" printf '\nPlease move the Board in different directions\n' printf ' AXIS X\n' OUT_X_MSB="$(i2cget -f -y 3 0x1e 0x01)" OUT_X_LSB="$(i2cget -f -y 3 0x1e 0x02)" echo " OUT_X_MSB: ${OUT_X_MSB}" echo " OUT_X_LSB: ${OUT_X_LSB}" printf '\n AXIS Y\n' OUT_Y_MSB="$(i2cget -f -y 3 0x1e 0x03)" OUT_Y_LSB="$(i2cget -f -y 3 0x1e 0x04)" echo " OUT_Y_MSB: ${OUT_Y_MSB}" echo " OUT_Y_LSB: ${OUT_Y_LSB}" printf '\n AXIS Z\n' OUT_Z_MSB="$(i2cget -f -y 3 0x1e 0x05)" OUT_Z_LSB="$(i2cget -f -y 3 0x1e 0x06)" echo " OUT_Z_MSB: ${OUT_Z_MSB}" echo " OUT_Z_LSB: ${OUT_Z_LSB}" usleep 300000 printf "\033[18A\033[K" done
So as you can see from the script, the device is locates on i2c bus 3, at address 0x1e.
Accessing register 0x0d will give you the device ID of 0xC7
Accessing register 0x01 will give you the x-axis most significant bit, which obviously will change with the position of the sensor.
Registers 0x02 - 0x06 will give you the current contents of the remaining values sensed.
The audio device can be accessed using the programs amixer, arecord, and aplay. This is demonstrated in the unit test audio.sh.
This script sets the Mic level to 50%, the Capture level to 50%, and records, then plays the captured audio.
Examples for the remaining currently supported devices can be found in the unit test folder.
Several of the devices that this board/kit features that intrigued me the most were not available at the time of this writing. This would be the built-in camera, and access to the Cortex M4 core. Although support is expected soon.
All in all, I think it is a interesting little board with great potential.
I think if I were to learn more about the Yocto distribution and how to include more packages of my choosing, I would be able to exploit this board in greater detail.
The documentation is fairly complete and seemed to be accurate. I followed the instructions as written for loading new images and downloading the distribution and building locally and had no issues.
I'd definitely recommend this board if you are looking for a small device that is able to be powered by a battery, has wi-fi, and bluetooth capability, and also contains an NFC reader. As I mentioned most of the devices are available via I2C, and the peripherals are well documented, both by NXP and by the supplied unit tests.
Something I might like to do in the future to make this a better development platform is to have a more traditional linux distro available that would allow me to do my development on the board, and then package it as a yocto distribution for deployment.
Top Comments