One of the areas left incomplete in the Texas Instruments AM335x BSP when they ended Windows Embedded support was the whole power management and low power operation. TI turned over support to a third party, which will remain nameless, and from what I can gather not much work has been done since.
This is a shame as the AM335x processor, as used on the Beaglebone, has some fantastic low power features. In general, ARM processors have always had superior low power characteristics over the x86 family. This is do, in part, to the fine granularity ARM gives you over clock and power domain control as distributed within the chip itself. You have the ability to shut down different sections of the chip, or even run them at a reduced voltage. You also have the ability to slow down or cut off clocks to different internal peripherals within the part. All these can have a cumulative effect on lowering the current draw and thus the power consumed by the chip. These things become very important if you are doing a battery operated design where you need to squeeze every last bit of operating power from the storage battery.
The basics:
From basic electronics we get the equation: P = I*E or Power is equal to Voltage times Current. From this is is easy to see how reducing the voltage can lower the power consumed. But why does the clock frequency matter? Well it is like this, the internal architecture and silicon physics state that transistor switching actually what draws most of the current. The faster the clocks the more switching goes on and thus more power is drawn from the source.
This leads to a commonly used power saving technique employed by most modern high end embedded processors, DVFS. DVFS stands for Digital Voltage and Frequency Scaling. What this means is we can “scale” the performance by controlling the voltage and frequency. We are basically trading off performance for longer battery life. On the AM335x we can set different “operating points” and dynamically switch between them as cpu load increases. On earlier incarnations of the OMAP BSPs from TI, in particular the AM37XX processors BSP, the DVFS was an integral part of the BSP and there were even “cpu load rules” you could enable to dynamically control loading.
As I stated earlier this feature is totally broken on the public AM335x BSP. Many of the power management chips defines (the TPS75217 pmic) are wrong and most of the functions just do not work. It is obvious most of these functions were ported from an earlier BSP, that used a different pmic, and were never tested or debugged.
I went through the code and cleaned up many of the functions and tested operation at these different operating modes:
1000Mhz MPU @ 1.325V, CORE @ 1.1V (Nitro) 720Mhz MPU @ 1.275V, CORE @ 1.1V (Turbo) 600Mhz MPU @ 1.200V, CORE @ 1.1V (OPM120) 500Mhz MPU @ 1.100V, CORE @ 1.1V (OPM100) 275Mhz MPU @ 0.950V, CORE @ 1.1V (OPM50)
These are the most common operating modes for the Beaglebone Black but there are many others possible. You can see there are two different power domains shown: the MPU domain and the CORE domain.
I also ran some benchmark test with these results:
1000Mhz 13.848 MFLOPS 720Mhz 9.948 MFLOPS 600Mhz 8.263 MFLOPS 500Mhz 6.894 MFLOPS 275Mhz 3.768 MFLOPS
I was able to “flip” the operating mode on the fly and rerun the benchmark without resetting. The power readings differential from 1Ghz to 275Mhz was approximately 340mw and while this may not sound like a lot over one charge cycle it can extend battery life several hours. There is clearly a power vs. performance tradeoff shown.
Another area worth investigating is the whole Suspend/Resume operation. Again, there are interesting possibilities as the AM335x has several Deep Sleep and Suspend modes that drop standby power to almost nothing yet with still the ability to wake up on command, like touch screen or RTC alarm. The Am335x actually has a small co-processor, called a CM3 that aids in this task. Alas, this feature is also broken in the last TI BSP release. I will share my finding in a future blog posing.
Community BSP at https://beaglebonebsp.codeplex.com/
Hello , dvescovi . Because of Job , I use your Beaglebone black BSP which is helpful for me . I want to know how much the full version is . Please mail me to know , thank you . Best Regards.
Re: Windows Embedded Compact 2013 on Beaglebone gets IoT sample
Please contact me regarding a full installation of this BSP for WINCE2013, and what is necessary for...
-- Aaron Peterson
Re: BeagleBone BSP code clean up
Hi David, Interest in the fully version of the image. Please let me know the commercials. I need clarification...
-- CB
Re: BeagleBone BSP gets several improvements
Hi David, How can I get a full version (without reboot) of your image available for demonstration?
-- Marco Aurélio Braun
Re: Low power operation on the community IoT Beaglebone BSP (Part 1)
Hello , dvescovi . Because of Job , I use your Beaglebone black BSP which is helpful for me . I want...
-- KevinHsu
Re: Yet Another Gotcha: Compact 7 Update
Hi David, Would you please contact me regarding the wince7 BSP for the BBB? I have a few LCD Capes...
-- trialsrideraz
Seems MS may have posed a new updated ISO on MSDN. For those without a subscription, you are still out...
-- dvescovi
Re: Power management on the Beaglebone part 2–Battery
Hi David, First of all thanks for this, blog it's been very useful. Before I go ahead and solder anything...
-- Juanes1220
Re: More improvements for Beaglebone BSP
Thank you for the fixes. The latest version builds under WEC7! Yay! Next .. have to try deploying it...
-- OzFlipper
Of course, I meant the WEC2013 SDK ... see what happens when you work with too many bits at the same...
Hi David. First, thank you for what must have been a huge amount of work. I have been trying to install...