This repository contains driver for the AEM10900 energy harvester.
The AEM10900 is a fully integrated and compact battery charger circuit that extracts DC power from a solar cell to store energy in a rechargeable battery. This compact and ultra- efficient battery charger allows to extend battery lifetime and eliminates the primary energy storage in a large range of wireless application, such as wearable and medical applications and Smart sensors. Thanks to its Maximum Power Point Tracking and its ultra-low power boost converter, the AEM10900 harvests the maximum available input power from a source to charge a storage element, such as a Li-ion battery. The boost converter operates with input voltages in a range from 115 mV to 1.5 V. With its unique cold-start circuit, it can start operating with an input voltage as low as 250 mV and an input power of only 5 μW. The output voltages are in a range of 2.8 V to 4.8 V. – e-peas
The repository is build on top of the datasheet DS-AEM10900-v1.5 and contains:
The YAML specification of the driver, as used by Reginald to create the struct fields
The yaml file can be automatically parsed using Reginald, based on branch schilkp/rust
, commit dc4ff0d
.
The rust version is built (from within rust/src/) using:
reginald gen -i ../../aem10900.yaml -o registers.rs rs-structs --enum-derive "Debug" --struct-derive "Debug" --enum-derive "PartialEq" --struct-derive "PartialEq"
The C version is built (from within c/) using:
reginald gen -i ../aem10900.yaml -o aem10900_reg.h c-funcpack
The markdown datasheet is build (from within /) by using:
reginald gen -i ./aem10900.yaml -o aem10900.md md-datasheet
The rust driver consists of lib.rs, device.rs, config.rs, error.rs and registers.rs. registers.rs
is the only auto-created file using reginald, and contains the register structs as well as pack/unpack functions.
The C driver consists of aem10900.c, aem10900.h and aem10900_reg.h. aem10900_reg.h
is the only auto-created file using reginald, and contains the register structs as well as pack/unpack functions.
The example projects make automatically use of the drivers described above, and can be used as a reference for the implementation. The following pinout holds:
Peripheral | Functionality |
---|---|
I2C1 | I2C peripheral used for communication |
PB8 | SCL pin used together with I2C1 |
PB7 | SDA pin used together with I2C1 |
GPDMA1_CH0 | DMA channel for TX on I2C1 |
GPDMA1_CH1 | DMA channel for RX on I2C1 |