Hi,
Couple of thoughts:
- I think this function/syscfg belongs in the MCU definition, as a
configuration item that can be controlled by the BSP.
- I think it should be called as early as possible, so probably
hal_bsp_init().
- It’s a bid odd that hal_bsp_init() is the same for bootloader and
running image, we should probably have an option to make this different.
I’d lean to having more functionality in the image, because it’s
upgradable.
Sterling
On 7 Apr 2017, at 16:32, will sanfilippo wrote:
Hello:
I want to add some code that enables the DC/DC regulator for the
nordic chips. Enabling this regulator reduces power consumption
(considerably). For example, using the LDO when running from flash
(cache enabled) is typically 7.4mA; using the DC/DC regulator it goes
to 3.7 mA.
It would be best to turn this on as soon as possible but it should
only be enabled if there is some external circuitry attached to some
of the pins (see the product specifications for more details). For all
the BSP’s currently in the repo, the DC/DC regulator can (and
should) be enabled. GIven that there is external circuitry involved I
was going to create a syscfg variable that would either exist in the
BSP or be overridden by the BSP. What I am having a bit of trouble
figuring out is where should the code to enable the DC/DC regulator
go?
We have a choice of putting it in an existing place or doing something
new. It seems to me that if we choose an exisiting place it would go
in either hal_bsp_init() or hal_system_start().
Some comments about the existing functions:
hal_system_start():
* Code would only need to be modified in one place (in hw/mcu).
* This function is called after the bootloader does some work, so more
power savings could be realized earlier on.
* If you build an image with no bootloader I do not think this is
called.
* It might be a bit of an odd place to put this code (enabled the
DC/DC regulator).
hal_bsp_init():
* This is called early on by the bootloader. It is also called by the
application which is a bit confusing to me. I am not super familiar
with the bootloader but unless this function exists in some place I do
not see or we override bsp syscfg variables in the bootloader app,
hal_bsp_init() is going to do things twice. Is this true or am I
missing something?
* We would have to modify hal_bsp_init() in all the bsps.
Honestly, I am not too concerned about having to modify all the bsps
that use the nordic chip if the community thinks this code belongs in
hal_bsp_init().
Any comments/suggestions?
Thanks!
PS If we decide that this code should exist in hw/mcu what I would do
is to create a syscfg variable in hw/mcu/nordic (or
hw/mcu/nordic/nrf52xxx and hw/mcu/nordic/nrf51xxx) called
MCU_DCDC_ENABLE (or some such). By default, this will be 0. All the
bsp syscfg.yml files will override this setting.