High Idle Power Consumption on the NRF9160 DK using Blinky on Zephyr (~ 520 uA)

Working with the NRF9160 it is often important to make sure current / power consumption is at its absolute minimum. To understand power floor it makes sense to first take a look at basic Zephyr sample application such as blinky.


# assuming the nrf connect sdk is installed under ~/dev/nrf-1.7.1
cd ~/dev/nrf-1.7.1/zephyr/samples/basic/blinky
# pristine flag making sure no old build files are used
west build -b nrf9160dk_nrf9160_ns --pristine
west flash --erase

Above commands will build and flash the Blinky Example. Measuring current on P22 of the board with a multimeter quickly shows a power draw of about 521 uA which is unusually high.

The source of the issue lies in the Secure Partition Manager module which has a configuration Flag set (CONFIG_SERIAL=y). Even setting CONFIG_SERIAL=n in the local proj.conf file will not disable the flag since it is still used by the spm module.

Manually overriding the .config file ~/nrf-1.7.1/zephyr/samples/basic/blinky/build/spm/zephyr/.config would in this case solve the issue and rebuilding would result in measuring idle consumption of about 3uA. However, there is a more convenient and opinionated way of setting this value by changing the menuconfig for spm using:

# start the menuconfig for spm
west build -b nrf9160dk_nrf9160_ns -t spm_menuconfig

Search for serial with /serial in the menuconfig and find the config flag.
Deselect the Serial config by pressing “space”

Rebuilding will then allow the current consumption to drop to the expected floor of about 3uA.

The prj.conf used in the example:


CONFIG_GPIO=n
CONFIG_LOG=n
CONFIG_CONSOLE=n
CONFIG_UART_CONSOLE=n
CONFIG_RTT_CONSOLE=n
CONFIG_USE_SEGGER_RTT=n
CONFIG_LOG_BACKEND_RTT=n
CONFIG_SERIAL=n
CONFIG_AT_HOST_LIBRARY=n
CONFIG_STDOUT_CONSOLE=n

Another even more persistent way of configuring the spm config flags is to utilize the Project File structure:


child_image/
└── spm
└── prj.conf

And configure the flags in the file ./child_image/spm/prj.conf


# Configuration copied from the nRF Secure Partition Manager (SPM) sample:
CONFIG_IS_SPM=y
CONFIG_FW_INFO=y
CONFIG_GPIO=y
CONFIG_SERIAL=n

Hope this is helpful for figuring out power issues with the nrf9160 DK.

Building and Deploying the Mainline (Vanilla) Android Master Source for the Beaglebone Black

Texas Instruments “AM335x” ARM platform has been gaining a lot of traction during the past couple of years. With the Beaglebone Black, a low cost board for developing on the platform is available. With the upcoming launch of the Arduino TRE which is based widely on the BBB, the platform is becoming even more interesting for the embedded industry.

In this post we would like to cover of how to get started with embedded Android development on the Beaglebone Black. While there are already excellent tutorials available of how to Build Yocto and Android Jellybean (based on the rowboat development project), this article covers building the Android Mainline (and vanilla) source code.

Continue reading “Building and Deploying the Mainline (Vanilla) Android Master Source for the Beaglebone Black”

Turn your (Linux-) Desktop / Arduino Yún / Raspberry Pi into an USB Android Accessory: How to use the Android Accessory Protocol with pyusb

py_acc

It has been a while since the post where we explained how to Turn your Linux computer into a huge Android USB Accessory. In the former post, the process of creating a C-application to communicate with your Android device has been discussed. Today, we would like to pick up on the same topic, this time however showing how communication can be established with the “pyusb” library using Python.

Since devices like the Arduino Yún or the Raspberry Pi offer a fully implemented USB stack (based on the Linux Kernel and libusb) it becomes increasingly interesting to use Python for this task.

Continue reading “Turn your (Linux-) Desktop / Arduino Yún / Raspberry Pi into an USB Android Accessory: How to use the Android Accessory Protocol with pyusb”