Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/trembel/aem10900
https://github.com/trembel/aem10900
Last synced: about 1 month ago
JSON representation
- Host: GitHub
- URL: https://github.com/trembel/aem10900
- Owner: trembel
- License: lgpl-3.0
- Created: 2024-11-25T17:45:59.000Z (about 2 months ago)
- Default Branch: main
- Last Pushed: 2024-11-25T17:52:47.000Z (about 2 months ago)
- Last Synced: 2024-11-25T18:12:01.599Z (about 2 months ago)
- Language: C
- Size: 0 Bytes
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.org
- License: LICENSE
Awesome Lists containing this project
- rust-embedded - AEM10900 - [![crates.io](https://img.shields.io/crates/v/aem10900.svg)](https://crates.io/crates/aem10900) (Driver crates / Other)
- awesome-embedded-rust - AEM10900 - [![crates.io](https://img.shields.io/crates/v/aem10900.svg)](https://crates.io/crates/aem10900) (Driver crates / Other)
README
#+TITLE: AEM10900 Driver
#+AUTHOR: Silvano Cortesi
#+DATE: 18.11.2024
#+LICENSE: LGPL-3.0This 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_quoteThe 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 |