Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/trembel/aem10900


https://github.com/trembel/aem10900

Last synced: about 1 month ago
JSON representation

Awesome Lists containing this project

README

        

#+TITLE: AEM10900 Driver
#+AUTHOR: Silvano Cortesi
#+DATE: 18.11.2024
#+LICENSE: LGPL-3.0

This repository contains driver for the AEM10900 energy harvester.

#+begin_quote
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. -- [[https://e-peas.com/product/aem10900-solar-battery-charger/][e-peas]]
#+end_quote

The repository is build on top of the datasheet [[https://e-peas.com/wp-content/uploads/datasheets/ds-aem10900-v1-5.pdf][DS-AEM10900-v1.5]] and contains:

** The [[file:aem10900.yaml][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 [[https://github.com/schilkp/reginald][Reginald]], based on branch ~schilkp/rust~, commit ~dc4ff0d~.

**** Rust version
The rust version is built (from within [[file:rust/src/][rust/src/]]) using:
#+begin_src sh
reginald gen -i ../../aem10900.yaml -o registers.rs rs-structs --enum-derive "Debug" --struct-derive "Debug" --enum-derive "PartialEq" --struct-derive "PartialEq"
#+end_src

**** C version
The C version is built (from within [[file:c/][c/]]) using:
#+begin_src sh
reginald gen -i ../aem10900.yaml -o aem10900_reg.h c-funcpack
#+end_src

**** Markdown Datasheet
The [[file:aem10900_reg.md][markdown datasheet]] is build (from within [[file:README.org][/]]) by using:
#+begin_src sh
reginald gen -i ./aem10900.yaml -o aem10900.md md-datasheet
#+end_src

** Rust driver
The rust driver consists of [[file:rust/src/lib.rs][lib.rs]], [[file:rust/src/device.rs][device.rs]], [[file:rust/src/config.rs][config.rs]], [[file:rust/src/error.rs][error.rs]] and [[file:rust/src/registers.rs][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 [[file:c/aem10900.c][aem10900.c]], [[file:c/aem10900.h][aem10900.h]] and [[file:c/aem10900_reg.h][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.

** 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 |
| GPDMA1_CH0 | DMA channel for TX on I2C1 |
| GPDMA1_CH1 | DMA channel for RX on I2C1 |