1 unstable release

0.9.3 Nov 26, 2024
0.9.2 Nov 25, 2024
0.9.1 Nov 22, 2024
0.9.0 Nov 22, 2024

#288 in Embedded development

Download history 215/week @ 2024-11-18 249/week @ 2024-11-25

464 downloads per month

LGPL-3.0

90KB
2K SLoC


author: Silvano Cortesi date: 18.11.2024 title: AEM10900 Driver

#+LICENSE: LGPL-3.0

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

YAML Transpile Instruction

The yaml file can be automatically parsed using Reginald, based on branch schilkp/rust, commit dc4ff0d.

  1. Rust version

    The rust version is built (from within rustsrc) using:

    reginald gen -i ../../aem10900.yaml -o registers.rs rs-structs --enum-derive "Debug" --struct-derive "Debug" --enum-derive "PartialEq" --struct-derive "PartialEq"
    
  2. C version

    The C version is built (from within c/) using:

    reginald gen -i ../aem10900.yaml -o aem10900_reg.h c-funcpack
    
  3. Markdown Datasheet

    The markdown datasheet is build (from within /) by using:

    reginald gen -i ./aem10900.yaml -o aem10900.md md-datasheet
    

Rust driver

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.

C driver

The C driver consists of aem10900.c, aem10900.h and aem10900reg.h. aem10900_reg.h is the only auto-created file using reginald, and contains the register structs as well as pack/unpack functions.

Example projects for C and Rust

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 GPDMA1CH0 DMA channel for TX on I2C1 GPDMA1CH1 DMA channel for RX on I2C1

Dependencies

~0.7–1.3MB
~27K SLoC